【发布时间】:2014-10-16 18:35:56
【问题描述】:
我有一个运行在具有多个请求和性能要求的服务器上的 VB .NET Web 应用程序。 我有一个函数可以从数据库中检索一些数据,并且必须生成一个 Excel 报告以显示给系统用户。 我以某种方式做到了,但我的解决方案没有我想要的性能:基本上我的代码所做的是:
- 服务器接受报表生成请求
- 服务器填写一个excel文件
- 服务器在本地保存 xls 文件
- 服务器将文件附加到 html 响应中,用户下载它
- 服务器删除文件(什么时候?我也需要处理临界情况)
sn-p的代码是这样的:
Public Sub ExportaDataTableToExcel(ByVal dt As System.Data.DataTable, ByVal Page As System.Web.UI.Page, ByVal ReportName As String)
Dim oExcel As Excel.Application
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim colIndex As Integer
Dim rowIndex As Integer
oExcel = New Excel.Application
oBook = oExcel.Workbooks.Add(Type.Missing)
oSheet = oBook.Worksheets(1)
'Export the Columns to excel file
For Each dc In dt.Columns
colIndex = colIndex + 1
oSheet.Cells(1, colIndex) = dc.ColumnName
Next
oBook.SaveAs("C:\file.xls")
oSheet = Nothing
oBook.Close()
Page.Response.AddHeader("content-disposition", "attachment;filename=" & ReportName & ".xls")
Page.Response.Charset = String.Empty
Page.Response.ContentType = "vnd.application/ms-excel"
Page.Response.TransmitFile("C:\file.xls")
Page.Response.Flush()
Page.Response.End()
oExcel.Quit()
End Sub
如您所见,服务器在本地 C:\file.xls 中生成 xls 文件,然后在响应页面中传输该文件。
我想要做的,我真的不知道这是否可能,因为我没有找到任何示例,正在动态生成 xls 文件而不将其保存在本地(可能以 Stream 的形式返回字节或类似的东西),然后在响应页面中将其组装为 xls 文件,而不在本地保存文件。
我尝试同时使用 Page 和 System.IO.StringWriter 都没有运气,也许我做错了什么。 以下代码行为异常,要求我保存对文件的修改(在服务器端),并下载包含页面部分 html 的 xls 文件,生成有关缺少 css 文件的错误并显示部分页面。所以,通过这种方法,我几乎为零。这是代码:
Public Sub ExportaDataTableToExcel(ByVal dt As System.Data.DataTable, ByVal Page As System.Web.UI.Page, ByVal ReportName As String)
Dim oExcel As Excel.Application
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim colIndex As Integer
Dim rowIndex As Integer
oExcel = New Excel.Application
oBook = oExcel.Workbooks.Add(Type.Missing)
oSheet = oBook.Worksheets(1)
'Export the Columns to excel file
For Each dc In dt.Columns
colIndex = colIndex + 1
oSheet.Cells(1, colIndex) = dc.ColumnName
Next
oSheet = Nothing
oBook.Close()
Dim stringWrite As System.IO.StringWriter = New System.IO.StringWriter
Dim htmlWrite As System.Web.UI.Html32TextWriter = New System.Web.UI.Html32TextWriter(stringWrite)
Page.Response.Clear()
Page.Response.AddHeader("content-disposition", "attachment;filename=" & ReportName & ".xls")
Page.Response.Charset = String.Empty
Page.Response.ContentType = "vnd.application/ms-excel"
Page.Response.WriteFile(stringWrite.ToString)
Page.Response.Flush()
Page.Response.End()
oExcel.Quit()
End Sub
【问题讨论】:
-
您不应该使用 Excel 自动化来进行服务器端报告:它有很多问题,还有其他可用的替代方法。 google.com/?gws_rd=ssl#safe=off&q=NET+Excel+reporting
-
不幸的是我没有足够的运气在服务器上安装东西......我想我需要面对我所拥有的。
标签: html asp.net .net vb.net excel