我最近更新了我的.NET应用程序以使用EPPlus库来保存Excel文件(之前使用的是MS COM互操作库),性能更好(速度提高约50%),但是保存文件的实际调用非常慢(在某些情况下,比我使用MS COM互操作时的保存调用慢)。
Excel工作簿大约有120万个单元格(大约20,000行,分为32个工作表,平均每张大约60列),文件大小约为6.2 MB。获取工作表的数据后,创建和保存的过程大约需要15-16秒。创建EPPlus ExcelPackage大约需要4秒,大约1秒进行一些格式化(单元格注释,下拉列表等),然后大约10秒用于保存文件,到C:驱动器上的某个位置。
有没有办法提高创建ExcelPackage或保存Excel文件的性能?
以下是创建ExcelPackage对象的方法:
Public Shared Function CreateExcelPackageFromDS(ByVal ds As DataSet) As ExcelPackage
Dim xlPackage As New ExcelPackage()
Dim oBook As ExcelWorkbook = xlPackage.Workbook
'Load each table into worksheet
For Each dt As System.Data.DataTable In ds.Tables
Dim ws As ExcelWorksheet = oBook.Worksheets.Add(dt.TableName)
ws.Cells.LoadFromDataTable(dt, True)
ws.Cells.Style.Locked = False
Next
Return xlPackage
End Function
这是调用该方法并保存Excel文件的代码:
CreateExcelPackage(ds)
'Formatting stuff goes here
Dim excelFile As New FileInfo(tempFilesPath & "\Export" & userID & ".xlsx")
xlPackage.SaveAs(excelFile)
'Stuff for writing Excel file to HTML Response goes here
我尝试了其他保存文件的方法,但它们大致相同(例如使用ExcelPackage.SaveAs到MemoryStream)或更慢(使用ExcelPackage.GetAsByteArray并在响应中使用它)。