LocalReport到Excel

我使用下面的代码来渲染一个简单的报告到Excel或PDF,它在PDF中工作正常,但是在Excel中,如果dtTable具有多于64K行,则会出现错误。 我正在使用Microsoft发布的ReportDefinition来允许从DataTabledynamic创buildrdlc,可从http://www.gotreportviewer.com/获得

任何人都知道如何设置报表生成器,每64K行将电子表格分成一个新的选项卡?

var localReport = new LocalReport(); var availableFields = new List<string>(); for (var i = 0; i < dtTable.Columns.Count; i++) { if (dtTable.Columns[i].ColumnName != "RowID") availableFields.Add(dtTable.Columns[i].ColumnName); } MemoryStream m_rdl = new MemoryStream(); RdlGenerator gen = new RdlGenerator(); gen.AllFields = availableFields; gen.SelectedFields = availableFields; gen.WriteXml(m_rdl); m_rdl.Position = 0; localReport.LoadReportDefinition(m_rdl); ReportDataSource reportDataSource = new ReportDataSource("MyData", dtTable); localReport.DataSources.Add(reportDataSource); string reportType = "Excel"; string encoding; string fileNameExtension; string mimeType; string deviceInfo = "<DeviceInfo><OutputFormat>Excel</OutputFormat></DeviceInfo>"; Warning[] warnings; string[] streams; byte[] renderedBytes; renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings); 

要将每个64K行放在单独的工作表中,请根据行号在报表中创build分页符。

如果数据超过65k,如何在SSRS报告的Excel中导出数据
导出到SSRS 2005中的EXCEL错误

出现该错误的原因是,报表查看器控件使用旧的BIFF Excel格式,该格式每个工作表只处理65536行。

为了防止其他人遇到相同的情况,这里是我修改/添加到TableRdlGenerator,为了让它在Excel中输出任意数量的行。 花了大约5分钟生成一个2M行的报告。

  public Rdl.TableType CreateTableExcel() { Rdl.TableType table = new Rdl.TableType(); table.Name = "Table1"; table.Items = new object[] { CreateTableColumns(), CreateHeader(), CreateDetails(), CreateTableGroups(), }; table.ItemsElementName = new Rdl.ItemsChoiceType21[] { Rdl.ItemsChoiceType21.TableColumns, Rdl.ItemsChoiceType21.Header, Rdl.ItemsChoiceType21.Details, Rdl.ItemsChoiceType21.TableGroups, }; return table; } private Rdl.TableGroupsType CreateTableGroups() { Rdl.TableGroupsType tableGroups = new Rdl.TableGroupsType(); tableGroups.TableGroup = new TableGroupType[] { CreateTableGroup(), }; return tableGroups; } private Rdl.TableGroupType CreateTableGroup() { Rdl.TableGroupType tableGroup = new TableGroupType(); tableGroup.Items = new object[] { CreateGrouping(), }; return tableGroup; } private Rdl.GroupingType CreateGrouping() { Rdl.GroupingType groupingType = new GroupingType(); groupingType.Name = "pagebreak"; groupingType.Items = new object[] { true, CreateGroupExpressions(), }; groupingType.ItemsElementName = new ItemsChoiceType17[] { ItemsChoiceType17.PageBreakAtEnd, ItemsChoiceType17.GroupExpressions }; return groupingType; } private Rdl.GroupExpressionsType CreateGroupExpressions() { Rdl.GroupExpressionsType groupExpressions = new GroupExpressionsType(); groupExpressions.GroupExpression = new string[] { "=Int((RowNumber(Nothing)-1)/65000)" }; return groupExpressions; }