【问题标题】:ReportViewer - How can I render Excel files with more than 65,000 rows?ReportViewer - 如何呈现超过 65,000 行的 Excel 文件?
【发布时间】:2025-12-16 23:00:01
【问题描述】:

我正在使用ReportViewer 控件将报告数据导出到 Excel。一切正常,除了当我尝试导出超过 ~65,000 行的数据时,它会引发异常。

是否有任何变通方法可以让我在多张工作表中呈现报告? 谢谢!

【问题讨论】:

  • 您使用的是什么版本的 MS Excel?
  • 您可能使用的是 2007,但运行 reportviewer 的服务器上安装了什么?
  • 可能是旧版本的 Excel。但它将行数限制为 ~65,000。
  • 升级 Excel 版本可能有效,但 CSV 是您最好的选择 IMO。

标签: c# asp.net excel reporting-services reportviewer


【解决方案1】:

为了克服限制错误,RDLC 提供了将页面分成多个工作表的选项。

示例

使用显示超过 66000 条记录的 Adventure Works 数据库,使用 Report Viewer 10.0 创建示例 RDLC 报告。

通过应用以下 RDLC 报告中提到的步骤,可以轻松地将大数据导出到多个工作表中。

第 1 步

打开 RDLC 并选择表格的数据行。右键单击它,选择添加组,然后选择父组。

第 2 步

在这一步中,您应该得到一个 Tablix 组窗口。在 Group by Text 框中输入下面提到的函数,然后单击 OK。

=Int((RowNumber(Nothing))/65520)

第 3 步

在下一步中,在 RDLC 报告的底部,您将找到“行组”窗格。在这里,右键单击组名称并选择组属性。

  1. 您将获得一个组属性窗口。我们可以在这里给一个合适的组名。

  2. 在左侧窗格的分页符中选中“组的每个实例之间”选项。

  3. 接下来,在排序部分,删除排序依据函数。

如果您在执行上述步骤后观察报告,它会添加 Group1 列,如下所示。选择添加删除列。

现在,保存并运行报告并导出为 Excel 格式。如果一切正常,数据应该显示在多个工作表中。

如果我们在表 2 中观察,报告标题将不会显示。为了显示标题,添加代码,如下所述。

在 XML 编辑器中打开 RDLC 报告。在 TablixMembers 节点的第一个 TablixMember 节点添加节点,如下所述。

<KeepWithGroup>After</KeepWithGroup> <RepeatOnNewPage>true</RepeatOnNewPage>

保存、重新运行报告并导出到 Excel。您可以通过所有工作表中的标题来观察多个工作表中的数据。

【讨论】:

    【解决方案2】:

    Excel 2005 及更早版本仅支持每张工作表 65536 行。

    Excel 2007 and 2010 support 1048576 rows per sheet.

    也就是说,ReportViewer 导出到 Excel 的限制可能只有 65536。以CSV 格式导出可以绕过这个限制。

    【讨论】: