适用于: 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 个字符(或 1,726.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 开始并以 1 为增量的整数。 例如,如果初始页面名称为“Sales Report by Fiscal Year”,则第二个工作表将命名为“Sales Report by Fiscal Year (2)”。 第三个报表将命名为“Sales Report by Fiscal Year (3)”,依此类推。
如果分页符创建的所有报表页面都提供了新的页面名称,则每个工作表都具有关联的页面名称。 但是,如果这些页面名称不是唯一的,则工作表的命名方式与初始页面名称相同。 例如,如果两个组的页面名称为“Sales for NW”,则一个工作表选项卡的名称为“Sales for NW”,另一个工作表选项卡的名称为“Sales for NW (2)”。
如果报表未提供初始页面名称或分页符的页面名称,则工作表选项卡将采用默认名称“工作表 1”、“工作表 2”,依此类推。
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 的局限性,大纲的嵌套级别最多不能超过 7 级。
文档结构图
如果报表中存在任何文档结构图标签,则文档结构图将呈现为 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。 然后可能需要重启计算机。