将分页报表导出到 Microsoft Excel(报表生成器)
适用于: Microsoft Report Builder (SSRS) Power BI Report Builder SQL Server Data Tools 中的 Report Designer
使用 Power BI 或 SQL Server Reporting Services (SSRS)时,可以使用 Excel 呈现扩展插件将分页报表导出到 Microsoft Excel。 Excel 中导出列的宽度模仿报表中列的宽度。 但是,你可以重新构造报表数据或在工作簿中进一步处理它。
本文讨论导出过程的各个方面,例如对交互式功能的呈现器支持以及单元格中的数据放置。 还介绍了 Excel 和呈现器的限制。
导出格式
Excel 呈现扩展插件将报表导出为 Office Open XML 格式。 呈现器生成的文件的内容类型为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,文件扩展名.xlsx。
您可以通过更改设备信息设置来更改此呈现器的某些默认设置。 有关详细信息,请参阅 Excel 设备信息设置。
有关如何以 Excel 格式导出报表的信息,请参阅导出分页报表(报表生成器)。
重要
定义类型的 String
报表参数时,用户会显示一个可以采用任何值的文本框。 如果报表参数未绑定到查询参数,并且参数值包含在报表中,则存在安全风险。 具体而言,报表用户可以输入表达式语法、脚本代码或 URL 作为参数值。 因此,用户可以输入恶意脚本或恶意链接。 如果报表导出到 Excel,则其他用户可以查看它。 如果他们选择呈现的参数内容,则它们可能会无意中运行恶意脚本或转到恶意站点。
若要降低无意中运行恶意脚本的风险,请仅从可信来源打开呈现的报表。 有关保护报表的详细信息,请参阅保护报表和资源。
Excel 限制
由于 Excel 及其文件格式的功能,Excel 对导出的报表进行了限制。 最重要的限制包括:
- 最大列宽为 255 个字符或 1726.5 磅。 呈现器不会验证列宽是否小于此限制。
- 单元格中的最大字符数为 32,767。 如果超出此限制,呈现器会显示错误消息。
- 最大行高为 409 磅。 如果行的内容导致行高超过 409 磅,Excel 单元格将显示最多 409 磅的部分文本量。 其余单元格内容仍位于单元格中,最多允许 32,767 个字符。
- 由于最大行高为 409 磅,因此,如果报表中某个单元格的定义高度大于 409 磅,Excel 会将单元格内容拆分为多行。
- Excel 中未定义工作表的最大数目。 但外部因素(如内存和磁盘空间)可能会导致应用限制。
- 在大纲中,Excel 最多允许 7 层嵌套级别。
- 大纲的可用性取决于控制另一项可见性的报表项的位置。 在以下情况下,大纲不可用:
- 控件报表项不在上一行或下一行中,相对于要展开或折叠的项。
- 控件报表项不在正在展开或折叠的项的列中。
有关 Excel 限制的详细信息,请参阅 Excel 规范和限制。
文本框和文本
对于文本框和文本有以下限制:
- 内容为表达式文本框值不会转换为 Excel 公式。 报表处理过程中会计算每个文本框的值。 计算表达式会作为每个 Excel 单元格的内容导出。
- 每个文本框都呈现在一个 Excel 单元格中。 对于字号、字面、修饰和字体样式,单元格文本支持格式。
- Excel 不支持超行文本格式。
- Excel 在单元格的左右两侧将默认添加大约 3.75 磅的填充量。 如果文本框的填充小于 3.75 磅,并且该框不够宽,无法容纳文本,则文本可能会换行到 Excel 中的新行。 若要解决此问题,请增加报表中文本框的宽度。
映像
对于图像有以下限制:
- 由于 Excel 不支持单个单元格的背景图像,因此将忽略报表项的背景图像。
- Excel 呈现扩展插件仅支持表体的背景图像。 如果报表中显示有表体背景图像,则该图像呈现为工作表的背景图像。
矩形
以下限制适用于矩形:报表页脚中的矩形不会导出到 Excel。 但报表正文、Tablix 单元格和其他类似组件的矩形呈现为 Excel 单元格区域。
报表表头和表尾
对于报表表头和表尾有以下限制:
- Excel 表头和表尾最多支持 256 个字符,其中包括标记。 呈现扩展插件将在 256 个字符处截断字符串。
- SSRS 不支持报表页眉和页脚的边距。 在 Excel 中,这些边距值设置为零。
- 打印导出到 Excel 的报表时,打印机设置可能会影响呈现。 具体而言,如果报表中的页眉或页脚包含多行数据,则可能在打印输出中看不到多行。
- 页眉或页脚中的文本框在导出到 Excel 时保持其格式,但不会保持其对齐方式。 当报表呈现到 Excel 时,将剪裁前导空格和尾随空格,这会更改对齐方式。
合并的单元格
以下限制适用于合并单元格:如果合并单元格,则文本未正确包装。
Excel 呈现器主要是一种布局呈现器。 其目标是在 Excel 工作表中尽可能接近地复制呈现的报表的布局。 因此,单元格可能在工作表中合并以保留报表布局。 合并的单元格可能会导致问题,因为 Excel 中的排序功能要求以特定方式合并单元格才能正常工作。 例如,如果要对单元格区域进行排序,Excel 要求区域中的每个合并单元格的大小与区域中其他合并单元格的大小相同。
减少 Excel 工作表中合并单元格的数量可以更轻松地对工作表进行排序。 以下几点可帮助你最大程度地减少在导出过程中合并的单元格数。
- 单元格合并的最常见原因是项不与左侧或右侧对齐。 通常,可以通过为所有报表项的左右边缘排排以及为项提供相同宽度来解决该问题。
- 即使对齐所有项,某些列在极少数情况下仍会合并。 呈现过程中的内部单元转换和舍入可能会导致单元格合并。 在报表定义语言(RDL)中,可以在各种单位(如英寸、像素、厘米和磅)中指定位置和大小。 在内部,Excel 使用点。 因此,在呈现过程中,英寸和厘米将转换为点。 若要最大程度地减少呈现过程中的转换操作,以及舍入的可能不准确,请考虑在整点中指定所有度量值。 一英寸等于 72 磅。
报表行组和列组
将行组或列组导出到 Excel 时包含空单元格的报表。 下图显示了一个报表,该报表对通勤距离上的行进行分组。 每个上下班路程可以包含多个客户。
将报表导出到 Excel 时,通勤距离仅显示在“通勤距离”列的一个单元格中。 设计报表时,可以将文本与行组的顶部、中间或底部对齐。 该对齐方式确定值是位于导出报表的第一个、中间单元格还是最后一个单元格中。 组中该列中的其他单元格为空。 “名称”列(包含客户名称)没有空单元格。
下图显示了将报表导出到 Excel 后的报告。 空单元格在图像中显示为灰色,但该底纹不是导出报表的一部分。
将包含行组或列组的报表导出到 Excel 后,需要先修改报表,然后才能在数据透视表中显示导出的数据。 必须将组值添加到其缺少的单元格中。 然后,工作表将成为一个平面表,其中包含所有单元格中的值。 下图显示了更新后的工作表。
如果为将报表导出到 Excel 的特定目的创建报表,以便进一步分析报表数据,请考虑不要对报表中的行或列进行分组。
Excel 呈现器
以下 XML 代码显示了 RSReportServer 和 RSReportDesigner 配置文件中 Excel 呈现扩展插件的元素:
<Extension Name="EXCELOPENXML" Type="Microsoft.ReportingServices.Rendering.ExcelOpenXmlRenderer.ExcelOpenXmlRenderer,Microsoft.ReportingServices.ExcelRendering"/>
Excel 呈现器具有以下默认值和限制:
属性 | Value |
---|---|
每个工作表的最大列数 | 16,384 |
每个工作表的最大行数 | 1,048,576 |
工作表中允许的颜色数 | 大约 1600 万种(24 位颜色) |
ZIP 压缩文件 | ZIP 压缩 |
默认字体系列 | Calibri |
默认字号 | 11 磅 |
默认行高 | 15 磅 |
由于报表显式设置行高,因此默认行高度仅影响导出到 Excel 期间自动调整大小的行。
Excel 格式的报表项
将报表导出到 Excel 时,以下组件将呈现为 Excel 单元格区域:子报表、矩形、报表正文和数据区域。 文本框、图像、图表、数据条、迷你图、地图、仪表和指示器在一个 Excel 单元格内呈现。 但该单元格可能会与其他单元格合并。 报表其余部分的布局确定是否发生合并。
图像、图表、迷你图、数据条、地图、仪表、指示器和线条位于一个 Excel 单元格中,但它们位于单元格网格的顶部。 线条呈现为单元格边框。
图表、迷你图、数据条、地图、仪表和指示器将导出为图像。 它们所描绘的数据不随它们一起导出。 数据在包括在报表内数据区域中的列或行中之前不可用于 Excel 工作簿中。
如果要处理图表、迷你图、数据条、地图、仪表和指示器的数据,可以将报表导出到 CSV 文件或从报表生成符合 Atom 的数据馈送。 有关详细信息,请参阅将分页报表导出到 CSV 文件(报表生成器)并从报表生成数据馈送(报表生成器)。
页面大小
Excel 呈现扩展插件使用页面高度和宽度设置来确定 Excel 工作表的纸张设置。 Excel 会试图将 PageHeight
和 PageWidth
属性设置与最常用的一种纸张大小相匹配。
如果未找到匹配项,Excel 将使用打印机的默认页面大小。 如果页面宽度小于页面高度,则方向设置为 Portrait
。 否则,方向设置为 Landscape
。
工作表选项卡名称
将报表导出到 Excel 时,分页符将创建报表页,并将每个页面导出到其他工作表。 如果为报表提供初始页面名称,Excel 工作簿的第一个工作表具有此名称。 由于工作簿中的每个工作表必须具有唯一的名称,因此从两个开始的整数,并按一个递增追加到每个工作表的页面名称中。 例如,如果初始页面名称为“按会计年度的销售报表”,则第二个工作表按会计年度命名为“销售报表”(2)。 第三个报表按财政年度(3)命名为“销售报告”,依此命名。
如果分页符创建的所有报表页都提供新的页名称,则每个工作表都有关联的页名称。 但是,如果这些页面名称不唯一,则工作表的命名方式与初始页面名称相同。 例如,如果两个组的页面名称是 NW 的 Sales,则一个工作表选项卡具有 NW 的名称 Sales,另一个 NW 的销售额 (2) 。
如果报表未提供分页符的初始页名或页名称,则工作表选项卡的默认名称 为 Sheet1、 Sheet2 等。
SSRS 提供可以为报表、数据区域、组和矩形设置的属性。 这些属性可帮助你创建可以根据需要导出到 Excel 的报表。 有关详细信息,请参阅分页报表中的分页(Microsoft报表生成器)。
文档属性
Excel 呈现器会将以下元数据写入 Excel 文件。
报表元素属性 | 说明 |
---|---|
创建 | 报表执行的日期和时间,格式为 ISO 日期/时间值。 |
作者 | Report.Author |
说明 | Report.Description |
LastSaved | 报表执行的日期和时间,格式为 ISO 日期/时间值。 |
页眉和页脚
页面页眉的呈现方式取决于设备信息 SimplePageHeaders
设置:
- 默认情况下,
SimplePageHeaders
设置为 False。 在这种情况下,标题将呈现到 Excel 工作表的单元格网格,该网格顶部。 - 如果
SimplePageHeaders
设置为 True,则标题将呈现到 Excel 工作表标题部分。
无论设置的值 SimplePageHeaders
如何,页面页脚始终呈现到 Excel 工作表页脚部分。
由于 Excel 的限制,文本框是唯一可在 Excel 页眉和页脚部分呈现的报表项类型。
Excel 表头和表尾部分最多支持 256 个字符,其中包括标记。 如果超出此限制,Excel 呈现器将删除从页眉或页脚字符串末尾开始的标记字符,以减少总字符数。 如果删除了所有标记字符,并且长度仍超过最大值,则从末尾开始截断字符串。
SimplePageHeader 设置
当设备信息
SimplePageHeaders
设置设置为 False 时,包含标题的工作表行将变为锁定行。 您可以冻结或解冻 Excel 中的窗格。如果将打印标题的 Excel 设置配置为打印这些标题行,则这些标题将打印在每个工作表页上,文档地图封面表除外。
在报表生成器页眉属性窗口:
- 如果未 选择第一页上 的“打印”,则不会将页眉添加到第一个报表页。
- 如果未 选择上一页上 的“打印”,则不会将页眉添加到最后一个报表页。
交互性
Excel 支持一些交互元素。 以下各节讨论交互性。
显示和隐藏
Excel 在导出报表项时管理隐藏和显示报表项的方式存在一些限制。 包含可展开和折叠的报表项的组、行和列将呈现为 Excel 大纲。 但 Excel 大纲展开并折叠整个行或列中的行和列。 因此,报表项可以折叠,而不应折叠。 此外,Excel 的大纲符号可能会变得杂乱无章,与重叠的轮廓。
若要解决这些问题,Excel 呈现扩展插件使用以下大纲规则:
可以在 Excel 中展开和折叠最靠近左上角的报表项也可以展开和折叠。 与其他报表项共享垂直或水平空间的报表项不能在 Excel 中展开或折叠。
若要确定数据区域是否按行或列折叠,需要考虑两个项的位置:
- 控制可见性的报表项
- 可以展开和折叠的数据区域
应用的规则取决于这两项的相对位置:
- 如果控制可见性的项显示在展开和折叠的项上方或下方,则该项按行折叠。
- 如果控制可见性的项显示在展开和折叠的项旁边,则该项可按列折叠。
- 如果控制可见性的项在上方和展开和折叠的项旁边显示相同的距离,则该项可按行折叠。
若要确定在呈现的报表中放置自动分类汇总的位置,呈现扩展插件将检查动态成员的第一个实例。 如果对等静态成员紧随其上方显示,则假定动态成员是分类汇总。 大纲将设置为指示此数据为摘要数据。 如果动态成员没有静态同级,则该实例的第一个实例即为小计。
由于 Excel 限制,大纲只能嵌套最多七个级别。
文档结构图
如果报表中存在任何文档地图标签,文档地图将呈现为 Excel 封面工作表。 工作表名为 文档映射,位于工作簿中的第一个选项卡位置。
DocumentMapLabel
报表项或组的属性确定其在文档映射中的标签。 标签按报表中显示的顺序列出,从第一行开始,在第一列中。 每个文档结构图标签单元的缩进深度级别数与报表中所出现的一样。 每个缩进级别是通过在后续列中放置一个标签来表示的。 Excel 最多可支持 256 个大纲嵌套级别。
文档结构图大纲呈现为可折叠的 Excel 大纲。 大纲结构与文档结构图的嵌套结构相匹配。 大纲的扩展和折叠状态从第二级开始。
映射的根节点是报表名称或其文件名,没有 .rdl 扩展名。 该名称不是交互式名称。
呈现器对文档地图链接使用 10 磅 Arial 字体。
钻取链接
文本框中显示的钻取链接以 Excel 超链接的形式呈现在呈现文本的单元格中。 图像或图表的钻取链接呈现为图像上的 Excel 超链接。 选择钻取链接时,它将打开客户端的默认浏览器,并转到目标的 HTML 视图。
超链接
文本框中显示的超链接呈现为呈现文本的单元格中的 Excel 超链接。 图像或图表的超链接呈现为图像上的 Excel 超链接。 选择超链接时,它会打开客户端的默认浏览器并转到目标 URL。
交互式排序
在报表生成器中,可以选择报表中的按钮以更改表和矩阵显示行和列的顺序。 Excel 不支持这种类型的交互式排序。
书签
文本框中的书签链接呈现为在其中呈现文本的单元格中的 Excel 超链接。 图像或图表的书签链接呈现为图像上的 Excel 超链接。 选择书签时,它会转到在其中呈现带书签的报表项的 Excel 单元格。
在运行时更改报表
在某些情况下,需要一个报表才能呈现为多种格式。 如果无法创建以所有所需格式呈现方式的报表布局,则可以使用 RenderFormat
内置全局值。 使用此值时,可以在运行时有条件地更改报表外观。 这样,可以根据所使用的呈现器来隐藏或显示报表项,以获得每种格式的最佳结果。 有关详细信息,请参阅分页报表中内置全局变量和用户参考(报表生成器)。
排查导出到 Excel 的问题
使用虚拟服务帐户和执行帐户时,导出到 Excel 可能会失败。 具体而言,可以拒绝注册表项访问。
若要解决此问题,可以授予对虚拟用户帐户分支下受影响注册表项的执行帐户的读取权限。 例如,一个可能的注册表项是 HKEY_USERS\S-1-5-80-4050220999-2730734961-1537482082-519850261-379003301\Software\Microsoft\Avalon.Graphics
。 然后,需要重新启动计算机。