這裏有一個快速下降和骯髒的方式從一個DataTable到Excel中複製,而無需通過數據表的每一行/列迭代:
Private Sub ExportToExcel(ByVal dt As DataTable, ByVal outputPath As String)
Dim xlApp As Application = CreateObject("Excel.Application")
Dim xlWorkbook As Workbook = xlApp.Workbooks.Add(Type.Missing)
Dim sheetIndex As Integer = 0
Dim col, row As Integer
Dim xlSheet As Worksheet
Dim rawData(dt.Rows.Count, dt.Columns.Count - 1) As Object
For col = 0 To dt.Columns.Count - 1
rawData(0, col) = dt.Columns(col).ColumnName
Next
For col = 0 To dt.Columns.Count - 1
For row = 0 To dt.Rows.Count - 1
rawData(row + 1, col) = dt.Rows(row).ItemArray(col).ToString
Next
Next
Dim finalColLetter As String = String.Empty
Dim colCharset As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim colCharsetLen As Integer = colCharset.Length
If dt.Columns.Count > colCharsetLen Then
finalColLetter = colCharset.Substring((dt.Columns.Count - 1) \ colCharsetLen - 1, 1)
End If
finalColLetter += colCharset.Substring((dt.Columns.Count - 1) Mod colCharsetLen, 1)
xlSheet = CType(xlWorkbook.Sheets.Add(xlWorkbook.Sheets(sheetIndex), Type.Missing, 1, XlSheetType.xlWorksheet), Worksheet)
xlSheet.Name = dt.TableName
Dim xlRange As String = String.Format("A1:{0}{1}", finalColLetter, dt.Rows.Count + 1)
xlSheet.Range(xlRange, Type.Missing).Value2 = rawData
Dim firstrow As Range = CType(xlSheet.Rows(1, Type.Missing), Range)
firstrow.Font.Bold = True
firstrow.Select()
firstrow.AutoFilter(1, Type.Missing, XlAutoFilterOperator.xlAnd, Type.Missing, True)
xlSheet.Application.ActiveWindow.SplitRow = 1
xlSheet.Application.ActiveWindow.FreezePanes = True
xlSheet.Columns.EntireColumn.AutoFit()
xlSheet.Range("A1").Select()
xlSheet.PageSetup.Orientation = XlPageOrientation.xlLandscape
With xlSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.BottomMargin = 0.25
.TopMargin = 0.25
.LeftMargin = 0.25
.RightMargin = 0.25
.HeaderMargin = 0
.FooterMargin = 0
End With
firstrow = Nothing
xlSheet = Nothing
For Each xls As Worksheet In xlWorkbook.Worksheets
If xls.Name.Contains("Sheet") = True Then xls.Delete()
Next
xlWorkbook.SaveAs(outputPath, XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
xlWorkbook.Close(True, Type.Missing, Type.Missing)
xlWorkbook = Nothing
xlApp.Quit()
xlApp = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
End Sub
非常感謝你這是excaly我被問了什麼,但是這個我會去在沒有安裝辦公室的服務器上,因爲我不能使用Microsoft.Office.Interop.Excel – user2615302
你可以下載互操作程序集來安裝(不需要辦公室): http://www.microsoft.com/en-us/download/details.aspx?id=3508 –