我一直在使用以下脚本从 SSIS 包自动执行/调用 SSRS 报告,没有出现任何问题。我遇到的问题是,当我返回到某个日期(超过 4 个月的数据)时,Excel 文件似乎仅部分填充,当我打开它时,我收到一条错误消息,指出“我们发现了一个问题” zzzz.xlsx 中有一些内容,您想尝试修复它吗?”当我缩短报告的日期范围时,不会发生这种情况,如果我从此脚本中获取生成的 URL 并将其粘贴到我的 Web 浏览器中,它也可以正常工作。我想知道是否有尺寸限制?输出文件大约 30mb。再次,将此脚本生成的 URL 直接粘贴到浏览器中即可正常运行。非常感谢任何帮助!
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.ComponentModel
Imports System.Diagnostics
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()>
<System.CLSCompliantAttribute(False)>
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
Protected Sub SaveFile(ByVal url As String, ByVal localpath As String)
Dim loRequest As System.Net.HttpWebRequest
Dim loResponse As System.Net.HttpWebResponse
Dim loResponseStream As System.IO.Stream
Dim loFileStream As New System.IO.FileStream(localpath, System.IO.FileMode.Create, System.IO.FileAccess.Write)
Dim laBytes(256) As Byte
Dim liCount As Integer = 1
Try
loRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
loRequest.Credentials = System.Net.CredentialCache.DefaultCredentials
loRequest.Timeout = 600000000
loRequest.Method = "GET"
loResponse = CType(loRequest.GetResponse, System.Net.HttpWebResponse)
loResponseStream = loResponse.GetResponseStream
Do While liCount > 0
liCount = loResponseStream.Read(laBytes, 0, 256)
loFileStream.Write(laBytes, 0, liCount)
Loop
loFileStream.Flush()
loFileStream.Close()
Catch ex As Exception
End Try
End Sub
Public Sub Main()
Dim url, destination As String
destination = Dts.Variables("Folder_Destination").Value.ToString + "\" + Dts.Variables("ReportName").Value.ToString + Dts.Variables("OutPutDate").Value.ToString + ".xlsx"
'destination = Dts.Variables("Folder_Destination").Value.ToString + "\" + Dts.Variables("ReportName").Value.ToString + ".xlsx"
url = Dts.Variables("ReportURL").Value.ToString + Dts.Variables("Location").Value.ToString + Dts.Variables("ServiceArea").Value.ToString + "&StartDate=" + Dts.Variables("START_DATE").Value.ToString + "&EndDate=" + Dts.Variables("END_DATE").Value.ToString + "&RUNTYPE=2" + "&rs:Format=EXCELOPENXML"
SaveFile(url, destination)
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
问题似乎在于 SSRS 报告生成多个工作表。我还没找到原因,但似乎每个工作表都有数据限制。