【问题标题】:How to get named excel sheets while exporting from SSRS从 SSRS 导出时如何获取命名的 Excel 工作表
【发布时间】:2023-03-30 23:34:01
【问题描述】:

每当将单页报表导出到 excel 时,excel 中的工作表都会以报表名称命名。 如果报表有多个页面,则工作表命名为 sheet1、sheet2、.... 有没有办法在 SSRS 2005 中指定工作表名称?

解决方案: 谷歌搜索后发现了这个: Changing the Sheet names in SQL Server RS Excel: QnD XSLT

如果可行,将尝试并发布更新。

【问题讨论】:

  • 成功了吗?在生成报告后,我使用 Excel 宏重新格式化报告(不,我没有为其他用户自动化)。 SSRS 到 Excel 导出的格式问题太多。仅供参考,有一些第三方工具可以实现更好的 SSRS 到 Excel 渲染,例如 Aspose 和 OfficeWriter。
  • 顺便说一句,这些解决方案都不适用于在输出中命名工作表,除非您设置 TargetServerVersion = SQL Server 2008 R2,通过转到项目、[项目] 属性(应该是菜单中的最后一项)和将“TargetServerVersion”属性更改为(确切地说):SQL Server 2008 R2

标签: reporting-services reportingservices-2005 ssrs-2008 export-to-excel


【解决方案1】:

死灵术,以防万一所有链接都变黑了:

  1. 将组添加到您的报告中
    此外,建议在此处设置组表达式的排序顺序,以便选项卡按字母顺序排序(或者您希望它排序)。

    • “Zeilengruppe”的意思是“目标群体”
    • “Gruppeneigenschaften”是指“集团属性”
  2. 在组属性中设置分页符

    • “Seitenumbruche”表示“分页符”
    • “Zwischen den einzelnen Instanzen einer Gruppe”的意思是“在一个组的各个实例之间”
  3. 现在您需要设置 Tablix 成员(组)的PageNameNOT Tablix 本身的PageName /强>。
    如果您获得了正确的对象,则在属性网格的标题框中会显示“Tablix Member”(德语中的 Tablix-Element)。如果是错误的对象,它会在属性网格的标题框中显示only“table/tablix”(没有member)。

  4. 注意:如果您获得的是 tablix 而不是 tablix 成员,它将在每个选项卡中放置相同的选项卡名称,后跟 (tabNum)!如果发生这种情况,您现在就知道问题所在了。

【讨论】:

    【解决方案2】:

    要导出到不同的工作表并使用自定义名称,从 SQL Server 2008 R2 开始,这可以使用分组、分页符和组的 PageName 属性的组合来完成。

    或者,如果您只想为单个工作表指定特定名称,请尝试报告上的 InitialPageName 属性。

    更详细的解释请看这里:http://blog.hoegaerden.be/2011/03/23/where-the-sheets-have-a-name-ssrs-excel-export/

    【讨论】:

    • 不错的一个!效果很好
    【解决方案3】:
    【解决方案4】:

    要在导出到excel时添加选项卡名称,我使用了以下方法:

    • 在报表设计窗口中,选择 tablix 对象。
    • 打开 tablix 对象的属性窗口。
    • 将所需的选项卡名称添加到PageName 属性。
    • 运行报告
    • 将报告导出到 Excel。
    • 现在工作表名称与 tablix 对象的 PageName 属性相同。

    【讨论】:

      【解决方案5】:

      将选项卡名称放在报表的页眉或组 TableRow1 上,以便它显示在每个 Excel 工作表的“A1”位置。然后在您的 Excel 工作簿中运行此宏。

      Sub SelectSheet()
              For i = 1 To ThisWorkbook.Sheets.Count
              mysheet = "Sheet" & i
              On Error GoTo 10
              Sheets(mysheet).Select
              Set Target = Range("A1")
              If Target = "" Then Exit Sub
              On Error GoTo Badname
              ActiveSheet.Name = Left(Target, 31)
              GoTo 10
      Badname:
              MsgBox "Please revise the entry in A1." & Chr(13) _
              & "It appears to contain one or more " & Chr(13) _
              & "illegal characters." & Chr(13)
              Range("A1").Activate
      10
              Next i
      End Sub
      

      【讨论】:

        【解决方案6】:

        没有直接的方法。您可以导出 XML,然后正确设置 XSLT 以正确格式化它(这是一种艰难的方式)。一种更简单的方法是编写多个没有明确分页符的报告,因此每个报告仅在 Excel 中导出到一个工作表中,然后编写一个将为您合并的脚本。无论哪种方式,它都需要一个后处理步骤。

        【讨论】:

          【解决方案7】:

          我能够按照 Valentino Vranken 和 rao 建议的更复杂的说明完成此操作,但这里有一个更简单的方法,用于更简单的报告。这会将每个表放在单独的工作表上,并在 Excel 中命名。它似乎对 PDF 和 Word 等其他导出没有影响。

          首先在General 下的表格的Tablix Properties 中,选中Add a page break before or after,这会将报告分成工作表。

          然后在每个表中,单击该表,然后在Grouping 视图中,在Row Groups 一侧,选择父组或默认行组,然后在Properties 视图下Group -> PageBreak 设置@ 987654328@ 到 NonePageName 到工作表的名称。

          【讨论】:

            【解决方案8】:

            矩形方法

            我发现实现工作表/分页的最简单、最可靠的方法是使用矩形工具。

            将您的页面分组在矩形或单个矩形中,以填充子报表中的页面,如下所示:

            • 我发现放置矩形的最快方法是将其绘制在要放置在矩形中的对象周围。

            • 右键单击并在布局菜单中,将矩形发送到后面。

            • 选择所有对象并轻轻拖动它们,但要确保它们落在原来的位置。它们现在都在矩形中。

            在矩形属性中,您可以将分页符设置在矩形的开始或结束处,并且页面的名称可以基于表达式。

            工作表的名称将与页面名称相同。

            重复的名称将在括号后缀中有一个数字。

            注意:确保名称是有效的工作表名称。

            【讨论】:

            • 或者,您可以在节的末尾添加一个矩形,在矩形属性中选中“在之后添加分页符”,然后在“属性”选项卡中,在“常规 > 页面名称”下为页面命名.
            【解决方案9】:

            您可以使用 -sed- 和 -grep- 替换或写入每个文件的 xml 标头,在任何出现的标签之间指定您想要的工作表名称,例如 sheetname1:

            <Sheetnames>?sheetname1?</Sheetnames>
            

            【讨论】:

              【解决方案10】:

              虽然在对象上使用 PageName 属性实际上允许您在 Excel 中自定义导出的工作表名称,但请注意,它还可以更新报表的命名空间定义,这可能会影响将报表重新部署到您的服务器。

              我有一个报告,我在 BIDS 中应用了它,它更新了我的命名空间从 2008 年到 2010 年。当我尝试将报告发布到 2008R2 报告服务器时,我收到一个错误,指出命名空间无效,必须恢复一切。我确信我的情况可能是独一无二的,也许这不会总是发生,但我认为值得发布。一旦我发现问题,此页面帮助恢复命名空间(除了重置命名空间之外,还必须删除一些标签):

              http://beatheadagainstwall.blogspot.com/2011/03/invalid-target-namespace-when-deploying.html?showComment=1440647962263#c5741523651495876761

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多