1

我一直在网上寻找解决方案,但到目前为止还没有运气。

在我正在开发的当前应用程序中,我需要将潜在的大型 rdlc 报告导出到 excel 文件(以及其他格式)

这是我用来实现这一点的代码,它在正常大小的报告上效果很好:

private static void ExportToExcel(LocalReport localReport, string filename)
{
  if (File.Exists(filename))
  { 
    File.Delete(filename);
  }

  var bytes = localReport.Render("Excel", string.Empty);
  using (var stream = File.Create(filename))
  {
    stream.Write(bytes, 0, bytes.Length);
  }
}

非常简单,但是当我尝试导出大型报告时,我收到类似于以下内容的异常:“Excel 渲染扩展:行数超过了此版本的工作表中可能的最大值。请求的行数:152190。最大行数:65536。”

所以这是我的问题:有没有办法告诉导出器在达到最大行数时创建一个新工作表?如果是这样,那是什么?

4

3 回答 3

2

我知道这是一个老问题,但您可以在 .rdl 文件中添加分页符。这些会导致导出在 Excel 中启动新工作表。您可以使用 .rdl 中的公式来动态确定何时需要另一个分页符。

于 2014-06-19T20:49:42.160 回答
2

我遇到了类似的问题,并认为我会在这里添加我的经验。由于没有提到 SSRS 的版本并且问题仍未得到解答,我认为这与任何地方一样好。我编写了一个 PowerShell 脚本来将 SSRS 2012 rdl 报告导出为各种格式,一种是 Excel。我也收到以下错误:

使用“7”参数调用“渲染”的异常:“Excel 渲染扩展:行数超过此版本的工作表中可能的最大值。请求的行数:65587。最大行数:65536。(rrRenderingError)”

SSRS 2012 确实从 Excel 导出中删除了 65536 行限制,但我很难找到如何以编程方式超过此行限制。经过一番搜索,我遇到了帮助我解决它的Microsoft 支持文章。参数值“Excel”需要更改为“EXCELOPENXML”

var bytes = localReport.Render("EXCELOPENXML", string.Empty);

同样,这对 SSRS 的早期版本没有帮助,但我想为 SSRS 2012 提供更多的可见性。

于 2015-06-01T14:27:13.080 回答
1

不确定您使用的是哪个版本的 Excel,但 65,536 行是 .xls 文件的限制。如果您改为创建 .xlsx 文件,则最多可以有 1,048,576 行(来自此处),这应该可以满足您的要求。

编辑:虽然我最近自己使用了本机 Excel 对象,但显然EPPlus可以让您更轻松地创建 XLSX 文件。

HTH,Z

按照要求:

xl.Application myExcelApp;
xl.Workbooks myExcelWorkbooks;
xl.Workbook myExcelWorkbook;
xl.Worksheet myExcelWorksheet;

myExcelApp = new xl.Application();
myExcelApp.DisplayAlerts = false;
myExcelApp.Visible = false;
myExcelWorkbooks = myExcelApp.Workbooks;

String fileName = @"G:/foo/bar/goleafsgo.xlsx"; // set this to the file you want
myExcelWorkbook = myExcelWorkbooks.Add(misValue);
myExcelWorksheet = (xl.Worksheet)myExcelWorkbook.Worksheets.get_Item(1);

Recordset rs = ConvertToRecordset(dt);

ws.get_Range("A3", System.Reflection.Missing.Value).CopyFromRecordset(rs);

myExcelWorkbook.SaveAs(fileName, xl.XlFileFormat.xlWorkbookDefault, misValue, misValue, false, false, xl.XlSaveAsAccessMode.xlNoChange, misValue, misValue, misValue, misValue, misValue);
myExcelApp.Quit();

ConvertToRecordset 函数可以在这里找到

于 2013-04-24T12:48:00.320 回答