実現したいこと
vbでClosedXMLライブラリを使用してExcelファイルを読み込み
datatableにセットしたい
発生している問題・分からないこと
式が入ったセルでエラーになる(ループ状態?)
エクセルの式
="ORDER NO." & CHAR(10) & COUNTA(B2:B285) & "件"
エクセルのセルの内容
"ORDER NO.
284件"
式が入っている。改行が入っている。
datatableには、式ではなく結果をセット。
エラーメッセージ
error
1Process is terminated due to StackOverflowException. 2型 'System.StackOverflowException' のハンドルされていない例外が mscorlib.dll で発生しました 3
該当のソースコード
Public Function GF_ExcelToDataTable2(ByRef RefDataTable As DataTable, ByVal filePath As String, Optional ByVal sheetNameParam As String = "Sheet1") As Boolean Debug.WriteLine("開始|" & System.Reflection.MethodBase.GetCurrentMethod().Name) Try Debug.WriteLine($"ファイルパス: {filePath}, シート名: {sheetNameParam}") RefDataTable = New DataTable ' ClosedXMLライブラリを使用してExcelファイルを開く Using workbook As New XLWorkbook(filePath) Dim worksheet As IXLWorksheet = workbook.Worksheet(sheetNameParam) If worksheet Is Nothing Then Throw New Exception($"指定されたシート名 '{sheetNameParam}' が見つかりません。") End If ' ヘッダー行をDataTableに追加 Dim lastColumn As Integer = worksheet.LastColumnUsed().ColumnNumber() Debug.WriteLine($"最終列番号: {lastColumn}") For col As Integer = 1 To lastColumn Dim cell As IXLCell = worksheet.Cell(1, col) Dim headerValue As String = If(cell.IsEmpty(), String.Empty, cell.GetValue(Of String)()) Debug.WriteLine($"列 {col} のヘッダー: {headerValue}") RefDataTable.Columns.Add(headerValue) Next Debug.WriteLine($"取得したデータ行数: {RefDataTable.Rows.Count}") End Using Return True Catch ex As Exception GS_ShowErrorMessage(ex) Return False Finally Debug.WriteLine("終了|" & System.Reflection.MethodBase.GetCurrentMethod().Name) End Try End Function
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
場所は、worksheet.Cell(1, col)から取得する場所
copilotに質問すると、GetValue(Of String)とValue.Tostring()の繰り返しになる。
Dim test1 as string = worksheet.Cell(1, col).GetValue(Of String)
Dim test2 as string = worksheet.Cell(1, col).Value.Tostring()
ウオッチリストにworksheet.Cell(1, 2).Value.Tostring()と書くとエラーにならずに中身が見れる事がある。
単純な値"例1"のようなストリングは問題なく取れる。
補足
特になし

回答1件
あなたの回答
tips
プレビュー