导出到 Microsoft Excel Report Builder 3.0
导出到 Microsoft Excel(Report Builder 3.0 和 SSRS)
![]() |
---|
定义 String 类型的参数时,系统将向用户显示一个可以使用任何值的文本框。如果报表参数未与查询参数关联,并且参数值包含在报表中,则报表用户可以向参数值中键入表达式语法、脚本或 URL,并将报表呈现为 Excel。如果其他用户查看报表并单击呈现的参数内容,则用户可能会无意中执行恶意脚本或链接。 |
若要降低无意中运行恶意脚本的风险,请仅从可信来源打开呈现的报表。有关保护报表的详细信息,请参阅保护报表和资源。
![]() |
---|
在 Business Intelligence Development Studio 中,您可以在 Report Builder 3.0 和报表设计器中创建和修改报表定义 (.rdl)。每个创作环境提供了不同的方式来创建、打开和保存报表和相关项。有关详细信息,请参阅 Web 上 microsoft.com 中的“在报表设计器和 Report Builder 3.0 中设计报表 (SSRS)”。 |
矩形、子报表、表体和数据区域呈现为一组 Excel 单元格。文本框、图像、图表、数据条、迷你图、地图、仪表和指示器必须呈现在一个 Excel 单元格内,这些元素可能会根据报表其余部分的布局进行合并。
图像、图表、迷你图、数据条、地图、仪表、指示器和线条虽然位于一个 Excel 单元格内,但是它们却位于单元网格的顶部。线条呈现为单元格边框。
图表、迷你图、数据条、地图、仪表和指示器导出为图片。它们所描绘的数据(例如图表的值和成员标签)不随它们一起导出,并且在数据包括在报表内数据区域中的列或行中之前不可用于 Excel 工作簿中。
如果您想要使用图表、迷你图、数据条、地图、仪表和指示器数据,请将报表导出到 .csv 文件中或者从报表生成与 Atom 兼容的数据馈送。有关详细信息,请参阅 导出到 CSV 文件(Report Builder 3.0 和 SSRS)和基于报表生成数据馈送(Report Builder 3.0 和 SSRS)。
此呈现器仅支持逻辑分页符。对于每个明确定义的逻辑分页符,均会创建一个新的 Excel 工作表选项卡。
页面命名
如果在工作簿中仅有一个工作表(不包括文档结构图),则该工作表的名称即为报表名称。
如果在工作簿中存在多个工作表(不包括文档结构图),则这些工作表将被命名为 SheetX,其中 X 是工作簿中工作表的编号,例如,第五个工作表称为 Sheet5。
确定页大小
Excel 呈现扩展插件采用页面高度和宽度设置来确定要在 Excel 工作表中定义哪些纸张设置。Excel 会试图将 PageHeight 和 PageWidth 属性设置与最常用的一种纸张大小相匹配。
如果未找到匹配项,Excel 将使用打印机的默认页面大小。如果页面宽度小于页面高度,则将页面方向设置为“纵向”;否则,将方向设置为“横向”。
将报表导出到 Excel 时,将分页符创建的报表页导出到不同的工作表。如果您提供了报表的初始页名称,默认情况下 Excel 工作簿的每个工作表将具有此名称。此名称显示在工作表选项卡上。不过,由于工作簿的每个工作表必须具有唯一的名称,因此从第二个工作表开始会将一个整数追加到每个工作表的初始页名称,从 1 开始追加,每增加一个工作表,该整数递增 1。例如,如果初始页名称为 Sales Report by Fiscal Year,则第二个工作表的名称为 Sales Report by Fiscal Year1,第三个工作表的名称为 Sales Report by Fiscal Year2,依次类推。
如果分页符创建的所有报表页都提供新页名称,每个工作表将具有相关的页名称。但是,这些页名称可能不唯一。如果页名称不唯一,按与初始页名称相同的方式来命名工作表。例如,如果两个组的页名称是 Sales for NW,则一个工作表选项卡将具有名称 Sales for NW,另一个工作表选项卡具有名称 Sales for NW1。
如果报表既不提供初始页名称也不提供与分页符有关的页名称,工作表选项卡将具有默认名称 Sheet1、Sheet2,依次类推。
Reporting Services 提供要对报表、数据区域、组和矩形设置的属性,帮助您创建可以所需方式导出到 Excel 的报表。有关详细信息,请参阅了解 Reporting Services 中的分页方式(Report Builder 3.0 和 SSRS)。
根据设备信息 SimplePageHeaders 设置,页眉可以按两种方式呈现:页眉可以呈现在每个工作表单元网格的顶部,或者位于实际 Excel 工作表表头部分。默认情况下,页眉呈现至 Excel 工作表的单元网格上。
页脚始终呈现至实际 Excel 工作表表尾部分,无论 SimplePageHeaders 设置的值如何。
Excel 表头和表尾部分最多支持 256 个字符,其中包括标记。如果超出此限制,则 Excel 呈现器将删除自表头和/或表尾字符串末尾开始的标记字符,以便减少总字符数。如果在删除所有标记字符后,字符串长度仍然超出最大限制,则系统会自右侧开始截断字符串。
SimplePageHeader 设置
默认情况下,设备信息 SimplePageHeaders 设置将设为 False;因此,页眉在 Excel 工作表图面上呈现为报表行。而包含页眉的工作表行将变成锁定的行。您可以冻结或解冻 Excel 中的窗格。如果选中“打印标题”选项,则这些页眉将自动设置为在每个工作表页上打印。
如果在 Excel 的“页面布局”选项卡上选中“打印标题”选项,则页眉会在工作簿中每个工作表的顶部重复(文档结构图封面表除外)。如果在“报表表头属性”或“报表表尾属性”对话框中未选中“在首页上打印”或“在最后一页上打印”选项,则表头不会分别添加到第一页或最后一页。
页脚将呈现在 Excel 表尾部分。
由于 Excel 的局限性,文本框是唯一能呈现在 Excel 表头/表尾部分的报表项类型。
Excel 支持一些交互元素。下面是对一些特定行为的说明。
显示和隐藏
Microsoft Excel 对导出报表项时如何控制隐藏和显示报表项存在局限性。包含可切换的报表项的组、行和列将呈现为 Excel 大纲。Excel 可创建在整个行或列范围内扩展和折叠行与列的大纲,这样会导致折叠那些本来不应该折叠的报表项。此外,Excel 的大纲符号会与重叠的大纲混合在一起。为解决这些问题,在使用 Excel 呈现扩展插件时将应用以下大纲规则:
-
位于左上角可切换的报表项在 Excel 中仍然可以进行切换。与位于左上角可切换的报表项共享垂直或水平空间的可切换报表项在 Excel 中不能进行切换。
-
若要确定数据区域将按行还是按列折叠,需确定控制切换的报表项的位置以及要切换的报表项的位置。如果控制切换的报表项出现在要切换的报表项之前,则项可以按行进行折叠。否则,项可以按列进行折叠。如果控制切换的报表项均匀地出现在要切换的区域的旁边和上方,则在呈现项时行可以按行折叠。
-
若要确定小计在所呈现报表中的位置,呈现扩展插件将检查动态成员的第一个实例。如果对等静态成员紧靠在其上方,则假定该动态成员为小计。大纲将设置为指示这是摘要数据。如果动态成员没有静态同级,则该实例的第一个实例即为小计。
-
由于 Excel 的局限性,大纲的嵌套级别最多不能超过 7 级。
文档结构图
如果报表中存在任何文档结构图标签,则会呈现文档结构图。文档结构图呈现为 Excel 的封面工作表,插在工作簿的第一个选项卡位置。该工作表称为“文档结构图”。
文档结构图中显示的文本由报表项或组的 DocumentMapLabel 属性决定。文档结构图标签按它们在报表中出现的顺序列出,自第一列的第一行开始。每个文档结构图标签单元的缩进深度级别数与报表中所出现的一样。每个缩进级别是通过在后续列中放置一个标签来表示的。Excel 最多可支持 256 个大纲嵌套级别。
文档结构图大纲呈现为可折叠的 Excel 大纲。大纲结构与文档结构图的嵌套结构相匹配。大纲的扩展和折叠状态从第二级开始。
结构图的根节点是报表名称 <reportname>.rdl,并且它是不可交互的。文档结构图链接字体是宋体 (10pt)。
钻取链接
文本框中出现的钻取链接在用于呈现文本的单元格中呈现为 Excel 超链接。图像和图表的钻取链接在呈现的图像上呈现为 Excel 超链接。单击钻取链接时,将打开客户端的默认浏览器并导航到目标的 HTML 视图。
超链接
文本框中出现的超链接在用于呈现文本的单元格中呈现为 Excel 超链接。图像和图表的超链接在呈现的图像上呈现为 Excel 超链接。单击超链接时,将打开客户端的默认浏览器并导航到目标 URL。
交互式排序
Excel 不支持交互式排序。
书签
文本框中的书签链接在用于呈现文本的单元格中呈现为 Excel 超链接。图像和图表的书签链接在呈现的图像上呈现为 Excel 超链接。单击书签后,将转至用于呈现标有书签的报表项的 Excel 单元格。
由于 BIFF 的格式功能,Excel 对于导出的报表存在一些限制。最重要的限制包括:
-
工作表的最大行数限制为 65,536 行。如果超出此限制,呈现器会显示错误消息。
-
工作表的最大列数限制为 256 列。如果超出此限制,呈现器会显示错误消息。
-
最大列宽限制为 255 个字符(或 1726.5 磅)。呈现器不会验证列宽是否小于此限制。
-
最大行高为 409 磅。如果行内容导致行高超过 409 磅,则内容将被拆分并添加至下一行。
-
单元格中的最大字符数限制为 32,767 个。如果超出此限制,呈现器会显示错误消息。
注意
Excel 工作表的单元格中大约显示 1000 个字符,但是可以在编辑栏中编辑允许的最大字符数。
-
在 Excel 中并没有限定工作表的最大数量,但是诸如内存和磁盘空间等外部因素可能限制工作表的最大数量。
-
在大纲中,Excel 最多允许 7 层嵌套级别。
-
如果控制另一个报表项是否切换的报表项不是位于要切换的报表项的上一或下一行/列,则还会禁用大纲功能。
Excel 文件的大小
在报表第一次导出并保存到 Excel 中时,它们并不会从 Excel 自动应用到其 *.xls 工作簿文件的文件优化中获益。如果文件较大,可能会导致电子邮件订阅和附件出现问题。若要减小导出的报表的 *.xls 文件的大小,请打开 *.xls 文件,然后重新保存工作簿。重新保存工作簿通常可以将其文件大小降低 40% 到 50%。
文本框和文本
对于文本框和文本有以下限制:
-
内容为表达式文本框值不会转换为 Excel 公式。报表处理过程中会计算每个文本框的值。计算表达式会作为每个 Excel 单元格的内容导出。
-
文本框呈现在 Excel 的一个单元格内。Excel 单元格中的单个文本仅支持字号、字体、效果以及字形格式。
-
Excel 中不支持文本效果“上横线”。
-
Excel 在单元格的左右两侧将默认添加大约 3.75 磅的填充量。如果文本框的填充设置小于 3.75 磅,并且其宽度仅足以容纳文本,则在 Excel 中文本可能换行。
注意
若要解决此问题,请增加报表中文本框的宽度。
图像
对于图像有以下限制:
-
由于 Excel 不支持单个单元格的背景图像,因此将忽略报表项的背景图像。
-
Excel 呈现扩展插件仅支持表体的背景图像。如果报表中显示有表体背景图像,则该图像呈现为工作表的背景图像。
矩形
对于矩形有以下限制。
-
报表表尾中的矩形不导出到 Excel 中。但是,表体或 tablix 单元等中的矩形将呈现为某个范围的 Excel 单元。
报表表头和表尾
对于报表表头和表尾有以下限制:
-
Excel 表头和表尾最多支持 256 个字符,其中包括标记。呈现扩展插件将在 256 个字符处截断字符串。
-
Reporting Services 不支持报表表头和表尾上的边距。在导出到 Excel 时,这些边距值将设置为零,并且包含多行数据的任何表头或表尾可能不打印多行,打印的行数取决于打印机设置。
-
在导出到 Excel 时,表头或表尾中的文本框保持其格式设置,但不保持其对齐方式。导致出现此问题的原因在于,在报表向 Excel 呈现时对前导及尾随空格进行了修整。
合并单元
对于合并单元有以下限制:
-
如果合并单元格,则自动换行功能可能不正常。如果行中存在任一合并单元格,并且所呈现的文本框具有 AutoSize 属性,则自动调整大小功能将会不正常。
Excel 呈现器主要是一种布局呈现器。其目的是为了在 Excel 工作表中尽可能接近地复制呈现的报表的布局,并且最终生成的单元可以合并到工作表中以便保留报表布局。合并的单元可能导致问题,因为 Excel 中的排序功能要求以一种非常具体的方式对单元进行合并,这样才能正确排序。例如,Excel 要求合并的单元的范围具有相同的大小以便进行排序。
如果可以对导出到 Excel 工作表的报表进行排序十分重要,则以下内容可帮助您减少 Excel 工作表中合并的单元的数目,这是影响 Excel 排序功能的常见原因。
-
无法左对齐和右对齐项是合并的单元的最常见问题。请确保所有报表项的左边缘和右边缘都彼此对齐。使项对齐并且具有相同宽度将解决大多数此类情况中的问题。
-
尽管您正确将所有项对齐,但在很少的一些情况下,还会发现某些列继续合并。这可能是在呈现 Excel 工作表时由内部单位转换和舍入导致的。在报表定义语言 (RDL) 中,您可以通过不同的度量单位(例如英寸、像素、厘米和磅)指定位置和大小。Excel 在内部使用磅。为了尽量减少转换以及在将英寸和厘米转换为磅时进行舍入而导致的不精确性,请考虑用磅指定所有度量单位,以便获得最直接的结果。一英寸等于 72 磅。
报表行组和列组
当导出到 Excel 时,包含行组或列组的报表包含空单元。请考虑一个按销售渠道和邮政编码对行分组的报表。每个渠道包含许多邮政编码,每个邮政编码列出了许多商店名称。下图显示了此报表。
![具有两个行组和数据值的报表 具有两个行组和数据值的报表](http://i.msdn.microsoft.com/dynimg/IC409220.gif)
当将报表导出到 Excel 时,邮政编码只出现在“邮政编码”列的一个单元中。根据文本在报表中的对齐方式(顶部、中、底部),该值将位于第一个单元、中间单元或最后一个单元中。其他单元为空。包含商店名称的列没有空单元。下图显示了报表导出到 Excel 之后的情况。添加红色的单元边界是为了进行强调。它们不是导出报表的组成部分。
![导出到 Excel 的具有两个行组的报表 导出到 Excel 的具有两个行组的报表](http://i.msdn.microsoft.com/dynimg/IC409221.gif)
这意味着,对于具有行组或列组的报表而言,在将其导出到 Excel 之后,必须先进行修改,然后才能在数据透视表中显示导出的数据。必须在缺少组值的单元中添加组值,以使工作表成为在所有单元中均具有值的平面表。下图显示了更新的工作表。
![在 Excel 中更新具有两个行组的报表 在 Excel 中更新具有两个行组的报表](http://i.msdn.microsoft.com/dynimg/IC409222.gif)
如果您创建某个报表的目的是为了将此报表导出到 Excel 以便对报表数据进行进一步分析,则应考虑不在报表中包含行组或列组。
如果某个报表必须以多种格式呈现,并且不可能创建以您所需的所有格式呈现的报表布局,则可以考虑使用 RenderFormat 内置全局属性中的值,在运行时有条件地更改报表外观。这样,您可以根据用于在每种格式中获取最佳结果的呈现器,隐藏或显示报表项。有关详细信息,请参阅使用内置的全局和用户引用(Report Builder 3.0 和 SSRS)。