我有DataTable
7000行和60列,我需要将其保存在Excel文件中。
循环DataTable
花费大量时间,ClosedXml库引发了一个我无法解决的异常(持续了好几周)。因此,我决定从创建一个HTML表DataTable
,将其添加到剪贴板并将其粘贴到网络上的通用Excel文件中。
问题在于所有字符串都是用希伯来语编写的,并且当应用程序粘贴数据时,所有字符串均未正确编码,而Excel会将其显示为问号。
注意:当我使用鼠标将应用程序设置的数据粘贴到剪贴板上时,数据将按其应有的方式粘贴,没有问号。我也尝试使用该PasteSpecial()
方法的所有Enum参数都没有成功。请参阅我添加的相关代码部分。
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评论,此问题已解决,通用工作簿中的宏是导致此问题的原因。请参阅下面@ClearLogic标记为答案的讨论。
我会推荐EPPlus。它可以在nuget上使用。非常易于使用。
这是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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句