質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

Q&A

解決済

1回答

264閲覧

vbでClosedXMLライブラリを使用してExcelファイルを読み込む時に式が入ったセルでエラーになる

t20240712

総合スコア10

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

0グッド

0クリップ

投稿2025/04/15 09:10

実現したいこと

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"のようなストリングは問題なく取れる。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

utm.

2025/04/15 09:35

可能性ですが、ジェネリクスで型が間違ってると無限に型変換し続けるのでそれかもですね
t20240712

2025/04/16 01:02

GetTextも同じでした。 ウオッチリストにworksheet.Cell(1, 2).GetTextと書くとエラーにならずに中身が見れる事がある。 ちなみに式があるからダメなのではなく、 CHAR(10) が入ってるとダメっぽいです。
utm.

2025/04/16 03:42

その際にも同じエラーなのでしょうか?エラー情報だけが手がかりなので、質問を編集して補足してみてはいかがでしょう
t20240712

2025/04/16 06:13

エラーというよりフリーズです。待っても永遠に返ってきません。 キレイなエラーメッセージではなく、強制終了した時のメッセージやタイムアウトの類です。 なので、エラー情報を手掛かりにするのは困難です。
utm.

2025/04/16 08:40

はい。そういった情報を質問を編集し補足することをお勧めします
guest

回答1

0

ベストアンサー

.NET Framework 4.8 + 最新の ClosedXML(0.104.2) で試してみましたが、正常に値が取れました。
最新バージョンにしてみてください。

vb

1Imports ClosedXML.Excel 2 3Module Module1 4 5 Sub Main() 6 Using workbook As New XLWorkbook("d:\work\Book1.xlsx") 7 Dim worksheet = workbook.Worksheet(1) 8 Dim cell = worksheet.Cell("B1") 9 Console.WriteLine($"{cell.Value}") 10 End Using 11 Console.ReadKey() 12 End Sub 13 14End Module 15 16結果 17ORDER NO. 18319

イメージ説明

追記(4/17)

たしかに ClosedXML で計算式に影響のあるセルを書き換えた場合、計算式に反映されないですね。
SaveAs して開きなおすと反映されるようです。

vb

1Imports ClosedXML.Excel 2 3Module Module1 4 5 Sub Main() 6 Const template As String = "d:\work\Book1.xlsx" 7 Const newFile As String = "d:\work\Book2.xlsx" 8 9 Using workbook As New XLWorkbook(template) 10 Dim worksheet = workbook.Worksheet(1) 11 worksheet.Cell("B5").Value = "B5" 12 worksheet.Cell("B6").Value = "B6" 13 worksheet.Cell("B7").Value = "B7" 14 Dim cell = worksheet.Cell("B1") 15 Console.WriteLine($"{cell.Value}") 16 workbook.SaveAs(newFile) 17 End Using 18 19 Using workbook As New XLWorkbook(newFile) 20 Dim worksheet = workbook.Worksheet(1) 21 Dim cell = worksheet.Cell("B1") 22 Console.WriteLine($"{cell.Value}") 23 End Using 24 25 Console.ReadKey() 26 End Sub 27 28End Module 29 30結果 31ORDER NO. 32333ORDER NO. 346

投稿2025/04/16 10:45

編集2025/04/17 11:10
KOZ6.0

総合スコア2721

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t20240712

2025/04/17 06:01

バージョンを確認しました。最新の安定板 0.104.2 になっています。 ただ、 パッケージソースのマッピングがオフです。 になっています。 何か処置が必要でしょうか?
t20240712

2025/04/17 06:18

新規にWindowsApp1.slnを作成しました。 最新のClosedXMLを拡張しました。 Form1_Shownに組み込みました。 debugモードで再生しました。 症状変わらずです。 ===== Form1.vb ===== Imports ClosedXML.Excel Public Class Form1 Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown Using workbook As New XLWorkbook("d:\work\Book1.xlsx") Dim worksheet = workbook.Worksheet(1) Dim cell = worksheet.Cell("B1") Console.WriteLine($"{cell.Value}") End Using Console.ReadKey() End Sub End Class ===== Form1.vb ===== 'WindowsApp1.exe' (CLR v4.0.30319: DefaultDomain): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: DefaultDomain): 'D:\WindowsApp1\bin\Debug\WindowsApp1.exe' が読み込まれました。シンボルが読み込まれました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualBasic\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll' が読み込まれました。含める/除外するの設定でシンボルの読み込みが無効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\ClosedXML.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\netstandard\v4.0_2.0.0.0__cc7b13ffcd2ddd51\netstandard.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\DocumentFormat.OpenXml.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\System.Memory.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\Microsoft.Bcl.HashCode.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\SixLabors.Fonts.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\System.Numerics.Vectors.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\System.Buffers.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ValueTuple\v4.0_4.0.0.0__cc7b13ffcd2ddd51\System.ValueTuple.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\DocumentFormat.OpenXml.Framework.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\System.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.InteropServices.RuntimeInformation\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.InteropServices.RuntimeInformation.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\ClosedXML.Parser.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'WindowsApp1.exe' (CLR v4.0.30319: WindowsApp1.exe): 'D:\WindowsApp1\bin\Debug\RBush.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 Process is terminated due to StackOverflowException. 型 'System.StackOverflowException' のハンドルされていない例外が mscorlib.dll で発生しました 埋め込みドキュメント 'System.Globalization\CompareInfo.cs' を 'C:\Users\user1\AppData\Local\Temp\.vsdbgsrc\82f5c4d99137273f37e4fbe578de1a03843e6011bebc9ed0966c7a983ed26386\CompareInfo.cs' に抽出しました
t20240712

2025/04/17 07:52

ソースコードが原因ではなく、Excelの呪いでした。 当該のExcelファイルでは毎回エラーですが、テスト的に手打ちしたエクセルは問題なく動きます。 当該のExcelファイルを開き編集して保存すると、エラーが出なくなります。 当該のExcelファイルは156KBですが、内容が変わらない軽微な変更をして上書き保存すると、103KBに容量が減ります。 その状態だとエラーになりません。 Excelファイルの制御部分のバイナリー部分が悪さをしています。 ただ、めでたしめでたしではありません。 そのExcelファイルを抽出しているのが、他ならぬClosedXMLなのです。 vb内にExcelファイルがひな型として保存されています。 そこにデータを挿入して書き出しているのがClosedXMLです。 ひな型Excelファイルを今回の処理に直接食わせても今回のエラーにはなりません。 ひな型ExcelファイルをVB内でClosedXMLを使って出力したExcelファイルが今回の問題を引き起こします。 ClosedXMLがExcelファイルに呪いをかけています。 Excelでファイルを開き、Excelで保存すると呪いが解けます。 その呪いはExcelには効かず、自分自身にだけ効きます。大マヌケなマッチポンプです。 ClosedXMLの自作自演不具合ですが、何とかならないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問