私はDataTable
に7000行と60列あり、Excelファイルに保存する必要があります。VB.NETアプリケーションでクリップボードからExcelワークシートにHTMLテーブルを貼り付け
DataTable
のルーピングには多くの時間がかかり、ClosedXmlライブラリの例外が発生しています(何週間も)解決できませんでした。だから、私はDataTable
からHTMLテーブルを作成し、それをクリップボードに追加し、ネットワーク上の汎用Excelファイルに貼り付けることに決めました。
問題はすべての文字列がヘブライ語で書かれていて、アプリケーションがデータを貼り付けるときにすべての文字列が正しくエンコードされず、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
UPDATE:@ClearLogicに おかげで問題にコメントを解決した、一般的なワークブック内のマクロは、その行動の原因でした。 @ClearLogicと答えたディスカッションをご覧ください。
困難
編集ではないでしょうについては、例えばどうもありがとうございました、私は後でそれを試してみて、あなたをできるようになります知っている。 – jonathana
私は答えとしてあなたの質問をマークしましたが、なぜこの行のコードが暗いのか理解できません。ExcelWorksheet = excelFile.Workbook.Worksheets( "UNITED_DB")はこの例外をスローします: "VBAモジュール名にはユニコード文字を含めることはできません"あなたは手がかりを持っているかもしれません? tnx – jonathana
私はあなたのコードでエラーを再現することができませんでした。これは、.NETコードに関連しているとは思わない。私の推測では、Excelを開いているときにデフォルトのワークシートとExcelでマクロが定義されているファイル。 – ClearLogic