【发布时间】:2016-07-08 17:23:50
【问题描述】:
我有一个有 7000 行和 60 列的 DataTable,我需要将其保存在 Excel 文件中。
循环通过DataTable 需要很长时间,而ClosedXml 库引发了一个我无法解决的异常(好几个星期)。所以我决定从DataTable创建一个HTML表格,将它添加到剪贴板,然后粘贴到网络上的通用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 标记答案下方的讨论。
【问题讨论】:
标签: .net vb.net excel encoding