[英]ReportViewer - How can I render Excel files with more than 65,000 rows?
[英]Is there any way to ask a ReportViewer if the result of the query inside a Report will yield more than 65k rows?
我的报表位于Reporting Services服务器中,在.rdl内有一个接受参数的查询。 我将这些参数与ReportViewer实例一起传递。 我有一种方法,可以直接使用Excel格式下载报告的结果,而无需直接使用ReportViewer。 方法如下:
private void CreateEXCEL(Dictionary<string, string> parametros, string nombreReporte)
{
// Variables
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
// Setup the report viewer object and get the array of bytes
string ReportServerURL = ConfigurationManager.AppSettings["ReportServerCompletitudURL"];
string ReportName = ConfigurationManager.AppSettings["ReportNameRankingVentaPDV"] + "/" + nombreReporte;
MyReportViewer.Reset();
MyReportViewer.ProcessingMode = ProcessingMode.Remote;
MyReportViewer.ServerReport.ReportPath = ReportName;
MyReportViewer.ServerReport.ReportServerUrl = new Uri(ReportServerURL);
List<ReportParameter> parameters = new List<ReportParameter>();
foreach (var d in parametros)
{
parameters.Add(new ReportParameter(d.Key, d.Value));
}
MyReportViewer.ServerReport.SetParameters(parameters);
byte[] bytes = MyReportViewer.ServerReport.Render("EXCEL", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
// Now that you have all the bytes representing the PDF report, buffer it and send it to the client.
Response.Buffer = true;
Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("content-disposition", "attachment; filename=" + nombreReporte + "." + extension);
Response.BinaryWrite(bytes); // create the file
Response.Flush(); // send it to the client to download
}
现在的想法是,我不能创建一个包含65536行以上的文件作为Excel文件,如果不是Report内的查询结果将产生65k行以上,则要“询问”,然后使用csv格式。 我看不到reportviewer服务器控件具有检查查询结果的方法。 我不想在SSRS报告中使用分页符。 有什么办法可以在我的代码后面询问吗?
不知道这是否有帮助,但这可以解决导出到excel的问题。
在tablix(或表或列表)上创建一个父组,然后在Group on:字段中输入以下表达式。
在组的每个实例之间添加分页符
=CInt(Ceiling(RowNumber(nothing)/65000))
请参阅此处的问题。
我找到了解决此特定问题的方法,如下所示:
将此表达式放在我的“详细信息”组中。 在Disabled属性中: =IIF(rownumber(nothing) mod 10000=0,false,true)
BreakLocation: End
。 进行此更改后,我可以每隔1万行将保存在同一工作表中的excel保存在不同的工作表中。 我尝试做上限,但是如果您在该组中有一个行号表达式,它将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.