SharePoint托管SSRS报表自动导出Excel及订阅T-SQL代码咨询
一、自动导出报表至Excel的正确方式
你之前使用的RSViewerPage.aspx是报表在线查看页面,仅用于渲染报表供浏览,不会自动触发Excel下载。要实现直接导出,需调用Report Server的Render命令接口绕过查看页面,示例URL格式如下:
http://someServerName/_vti_bin/ReportServer?/Reports/Balance%20Sheet&rs:Command=Render&rs:Format=EXCEL&rp:DateRange=Last Month
- 核心参数说明:
_vti_bin/ReportServer:SharePoint集成模式下Report Server的核心端点rs:Command=Render:明确触发报表渲染导出操作rs:Format=EXCEL:指定导出格式为Excel(也可使用EXCELOPENXML对应xlsx格式)rp:DateRange=Last Month:传递报表参数
如果需要自动保存到本地或指定位置,可结合PowerShell脚本调用:
Invoke-WebRequest -Uri "http://someServerName/_vti_bin/ReportServer?/Reports/Balance%20Sheet&rs:Command=Render&rs:Format=EXCELOPENXML&rp:DateRange=Last Month" -OutFile "C:\Output\BalanceSheet.xlsx"
二、创建SharePoint托管报表订阅的T-SQL说明
重要提示
SharePoint集成模式下,报表订阅数据存储在SharePoint内容数据库中,微软不支持直接修改内容数据库,直接操作可能导致数据损坏、失去官方支持或升级失败。优先推荐使用Reporting Services的Web服务API(如ReportService2010.asmx的CreateSubscription方法)创建订阅。
参考T-SQL示例(非官方支持)
若需尝试T-SQL方式,步骤如下:
- 查询目标报表的
ItemID:
SELECT ItemID, Name, DirName FROM [WSS_Content].[dbo].[AllDocs] WHERE Name = 'Balance Sheet.rdl' AND DirName = '/Reports' -- 报表所在的文档库路径
- 插入订阅记录(替换占位符为实际值):
INSERT INTO [WSS_Content].[dbo].[Subscriptions] ( ItemID, OwnerID, DeliveryExtension, Settings, LastStatus, EventType, MatchData, LastRunTime, NextRunTime, ModifiedDate, CreatedDate, Status, IsDataDriven ) VALUES ( '替换为报表的ItemID', -- 第一步查询得到的ItemID (SELECT tp_ID FROM [WSS_Content].[dbo].[UserInfo] WHERE tp_Login = 'DOMAIN\你的用户名'), -- 订阅所有者ID 'EXCELOPENXML', -- 导出格式,可选EXCEL/EXCELOPENXML -- 交付设置XML:指定保存路径、文件名等 '<Settings> <DeviceInfo> <FileName>BalanceSheet_{&DateRange}.xlsx</FileName> <Path>http://someServerName/Shared Documents/报表导出/</Path> <Overwrite>True</Overwrite> </DeviceInfo> </Settings>', 'New subscription', -- 初始状态 'TimedSubscription', -- 订阅类型:定时订阅 -- 调度XML:示例为每月1日凌晨2点运行 '<ScheduleDefinition> <StartDateTime>2024-01-01T02:00:00</StartDateTime> <MonthlyRecurrence> <Days>1</Days> <MonthsOfYear> <January>True</January><February>True</February><March>True</March> <April>True</April><May>True</May><June>True</June> <July>True</July><August>True</August><September>True</September> <October>True</October><November>True</November><December>True</December> </MonthsOfYear> </MonthlyRecurrence> </ScheduleDefinition>', NULL, -- 上次运行时间,初始为NULL '2024-01-01T02:00:00', -- 下次运行时间 GETDATE(), -- 修改时间 GETDATE(), -- 创建时间 0, -- 状态:0为正常 0 -- 是否为数据驱动订阅:0为否 )
内容的提问来源于stack exchange,提问作者brdrok
相关产品推荐
相关产品推荐

