【发布时间】:2015-10-03 12:38:12
【问题描述】:
下面的代码完成了这项工作,但完成执行需要将近 60 秒。大约有 2000 行和 55 列。我想嵌套循环不是最有效和最专业的方式,我在谷歌搜索但没有找到更好的方式......(我想也许有一种方法可以使用 SQL?)。我将感谢有关使这项任务更有效率的建议。 (它是用 vb.net 编写的,但 c# 也适用于示例和建议)
Public Sub LoadDataTableToExcell(ByVal d As DataTable, ByVal path As String, ByVal fileName As String, ByVal newFile As Boolean, ByVal sheetName As String)
If CheckIfDirExist(path) = False Then
MsgBox("the Path" & " " & path & " " & "Does not exist")
Exit Sub
End If
CreateAnExcelFile(path, sheetName)
Dim xlapp As New Excel.Application
Dim ws As Excel.Worksheet
Dim xlworkbook As Excel.Workbook
xlworkbook = xlapp.Workbooks.Open(path)
ws = xlworkbook.Sheets(sheetName)
Dim Erows As Integer = Nothing
Dim Ecolumns As Integer = Nothing
For Ecolumns = 0 To d.Columns.Count - 1
ws.Cells(1, Ecolumns + 1) = d.Columns(Ecolumns).ColumnName
For Erows = 0 To d.Rows.Count - 1
ws.Cells(Erows + 3, Ecolumns + 1) = d.Rows(Erows).Item(Ecolumns)
Next
Next
Dim CarbonNewRng As Excel.Range
CarbonNewRng = ws.Range(ws.Cells(1, 1), ws.Cells(d.Rows.Count + 2, d.Columns.Count))
CarbonNewRng.Borders.Weight = 4
CarbonNewRng.Borders.Color = Color.FromArgb(0, 64, 64)
ws.Columns("A:AZ").autofit()
xlworkbook.Save()
xlworkbook.Close()
xlapp.Quit()
releaseObject(xlapp)
releaseObject(ws)
releaseObject(xlworkbook)
xlworkbook = Nothing
xlapp = Nothing
ws = Nothing
Else
End If
end sub
【问题讨论】:
-
任何时候您需要打开 Excel 应用程序对象,都需要一些时间。如果您只关心数据,您可以使用 OleDBCommand,或者简单地写出一个 csv 文件。如果您需要进行格式化,请查看 ClosedXML closedxml.codeplex.com
-
是否可以添加一个示例如何使用 OleDBCommand 将 dataTable 导出到 excel 中?
-
见stackoverflow.com/questions/151005/…(大约是答案的1/2)