我一直在网上寻找解决方案,但到目前为止还没有运气。
在我正在开发的当前应用程序中,我需要将可能很大的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。”
所以这是我的问题: 有没有办法告诉出口商在达到最大行数时创建一个新的工作表?那是什么意思呢?
答案 0 :(得分:2)
我遇到了类似的问题,并认为我会在这里添加我的经验。由于没有提到SSRS的版本,问题仍然没有答案,我认为这是一个好地方。我编写了一个PowerShell脚本,将SSRS 2012 rdl报告导出为各种格式,一种是Excel。我也收到了以下错误:
异常调用"呈现"用" 7"参数:" Excel渲染扩展:行数超过此版本工作表中可能的最大值。 请求的行数:65587。最大行数:65536。(rrRenderingError)"
SSRS 2012确实从Excel导出中删除了65536行限制,但我很难找到如何以编程方式超过此行限制。经过一番搜索,我遇到了http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/,帮助我解决了问题。参数值" Excel"需要更改为" EXCELOPENXML"
var bytes = localReport.Render("EXCELOPENXML", string.Empty);
同样,这对早期版本的SSRS没有帮助,但我希望为SSRS 2012提供更多可见性。
答案 1 :(得分:1)
不确定您使用的是哪个版本的Excel,但是65,536行是.xls文件的限制。如果您创建一个.xlsx文件,那么最多只有1,048,576行(来自here),这应该满足您的要求。
编辑:虽然我最近自己使用了本机Excel对象,但显然EPPlus将允许您更轻松地创建XLSX文件。
HTH, ž
如要求:
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函数here
答案 2 :(得分:1)
我知道这是一个老问题,但您可以在.rdl文件中添加分页符。这些导致导出在Excel中启动新工作表。您可以使用.rdl中的公式来确定何时需要动态地进行其他分页。