【问题标题】:Freeze Column Headers in excel after export from ssrs从 ssrs 导出后冻结 excel 中的列标题
【发布时间】:2017-04-20 06:12:51
【问题描述】:

我已经创建了一个报告,现在我需要冻结 tablix 标题。我尝试了所有与 SSRS 中的冻结窗格相关的方法,但导出到 excel 后,冻结窗格不起作用。您知道在 SSRS 2016 中实现这一目标的任何方法吗?

以下是我尝试过的步骤:

  1. 选择 tabix 并单击 Tablix 属性。
  2. 在“列标题”部分下的“常规”选项卡中,您可以看到“滚动时保持标题可见”复选框,选中它。
  3. 现在标题行将在报告中保持固定。

  1. 在分组窗格中,确保打开高级模式(单击分组窗格最右侧的黑色小向下箭头)
  2. 在行组层次结构中选择对应的(静态)项
  3. 在属性网格中,将 RepeatOnNewPage 设置为 true
  4. KeepwithGroup 到 After

  1. 冻结所有列的标题[冻结表头]:从行组中选择表头行的静态成员[高级 Mode ] 并将 FixedData 设置为 true
  2. 冻结最初的 2 列:选择列组中列的静态成员并将 fixedData 设置为 true。

【问题讨论】:

  • 在导出到 Excel 后冻结 Tablix 标头是不可能的。导出后报表中唯一在 Excel 中冻结的部分是页眉。

标签: reporting-services


【解决方案1】:

我知道这个问题有两种不同的解决方案。各有优缺点。

解决方案 1

您可以在mssqltips.com 上关注本指南。此解决方案让您为每列创建一个文本框并将其放在报表标题中。这是完成工作的一种乏味且繁琐的方式,但它确实有效,并且全部包含在报告中。

解决方案 2

实现此目的的第二种方法是使用 powershell。仅当您可以安排报告的分发而不是在 SSRS 门户中按需访问时,此解决方案才有效。您让 powershell 生成报告、修改输出并分发。下面是一个示例 powershell 脚本。

#Set variables
$ReportServerUri = "http://MySsrsServer/ReportServer_MySsrsServer/ReportExecution2005.asmx?WSDL"
$ReportPath = "/MyReportPath"
$ReportOutputType = "EXCEL"
$ReportOutputDirectory = "C:\SsrsOutput\"
$ReportOutputFileName = "MyReport.xlsx"
$ReportOutput = $ReportOutputDirectory + $ReportOutputFileName

#Connect to web service
$ReportServer = New-WebServiceProxy -Class 'ReportServer' -Namespace 'ReportServer' -Uri $ReportServerUri -UseDefaultCredential
$ReportServer.Url = $ReportServerUri

#Load report
$Report = $ReportServer.GetType().GetMethod("LoadReport").Invoke($ReportServer, @($ReportPath, $null))

#Other variables to hold parameters and output values
$parameters = @()
$deviceInfo = "<DeviceInfo><NoHeader>True</NoHeader></DeviceInfo>"
$extension = ""
$mimeType = ""
$encoding = ""
$warnings = $null
$streamIDs = $null

#Render the report
$RenderOutput = $ReportServer.Render($ReportOutputType,
    $deviceInfo,
    [ref] $extension,
    [ref] $mimeType,
    [ref] $encoding,
    [ref] $warnings,
    [ref] $streamIDs
)

#Write file
$Stream = New-Object System.IO.FileStream($ReportOutput), Create, Write
$Stream.Write($RenderOutput, 0, $RenderOutput.Length)
$Stream.Close()

#Open Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $False

#Open File
$workbook = $excel.Workbooks.Open($ReportOutput)

#Disable Split
$excel.ActiveWindow.Split = $false

#Freeze Panes
$excel.Rows.Item("10:10").Select() | Out-Null
$excel.ActiveWindow.FreezePanes = $true

#Save and Close Workbook
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault
$workbook.SaveAs($ReportOutput, $xlFixedFormat)
$workbook.Close($true)

#Close Excel
$excel.Quit()

#Send out email
Send-MailMessage -From "MySsrsReports@MyOrg.com" -To "ReportUsers@MyOrg.com" -Subject "My Report" -SmtpServer "email.myorg.com" -Attachments $ReportOutput

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多