使用VB.NET应用程序将HTML表格从剪贴板粘贴到Excel工作表中

我有一个有7000行和60列的DataTable ,我需要将它保存在Excel文件中。

DataTable循环需要很多时间,而ClosedXml库是引发了一个我无法解决的exception(几个星期)。 所以我决定从DataTable创build一个HTML表格,将其添加到剪贴板并粘贴到networking上的通用Excel文件中。

问题是所有的string都是用希伯来语写的,当应用程序粘贴数据时,所有的string都不能正确编码,而Excel将它们显示为问号。

注意:当我使用我的鼠标粘贴应用程序在剪贴板上设置的数据时,数据将被粘贴,而不会出现问号。 此外,我试图使用PasteSpecial()方法的所有枚举参数没有成功。 请参阅我添加的相关代码部分。

  Public Function LoadDataTableToDivisinReport(ByVal d As DataTable, ByVal pathAndFileNameToSave As String, ByVal DbsheetNameToReplaceData As String, Optional ByVal pathToSaveImages As String = "") As Boolean ........ Dim t As Threading.Thread t = New System.Threading.Thread(AddressOf createHtmlTableToClipBoard) t.SetApartmentState(Threading.ApartmentState.STA) t.Start() ws.Range("a1").PasteSpecial(Excel.XlPasteType.xlPasteFormats) ......... End Function Private Sub createHtmlTableToClipBoard() Dim b As New StringBuilder b.Append("<table>") b.Append("<tr>") For i = 0 To dd.Columns.Count - 1 b.Append("<th>" & dd.Columns(i).ColumnName & "</th>") Next b.Append("</tr>") For j = 0 To dd.Rows.Count - 1 b.Append("<tr>") For i = 0 To dd.Columns.Count - 1 b.Append("<td>") b.Append(dd.Rows(j).Item(i).ToString) b.Append("</td>") Next b.Append("</tr>") Next b.Append("</table>") Clipboard.SetText(b.ToString()) End Sub Private dd As DataTable 

更新:感谢@ClearLogic评论问题已经解决,在通用工作簿中的macros是该行为的原因。 请参阅下面的讨论@ClearLogic标记的答案。

我会推荐EPPlus 。 它可在nuget.Very易于使用。

这是一个在C#中工作的代码片段。 翻译成vb.net并不困难

 using (ExcelPackage excelFile = new ExcelPackage(new FileInfo(fileName))) { ExcelWorksheet ws = excelFile.Workbook.Worksheets.Add("Sheet1"); ws.Cells["A1"].LoadFromDataTable(datatable, true); for (int i = 1; i <= datatable.Columns.Count; i++) { ws.Column(i).Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Left; ws.Column(i).AutoFit(); } ws.Row(1).Style.Font.Bold = true; excelFile.Save(); } 

编辑 Vb.net代码

 Using excelFile As New ExcelPackage(New FileInfo(fileName)) Dim ws As ExcelWorksheet = excelFile.Workbook.Worksheets.Add("Sheet1") ws.Cells("A1").LoadFromDataTable(datatable, True) For i As Integer = 1 To datatable.Columns.Count ws.Column(i).Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Left ws.Column(i).AutoFit() Next ws.Row(1).Style.Font.Bold = True excelFile.Save() End Using