.NET 開発では、Excel データを扱うニーズが非常に多くあります。その際、Excel ファイルを DataTable に変換することで、データを表形式で管理でき、LINQ クエリの実行、UI コントロールへのバインド、データベースへの一括インポートなどが容易になります。 一方で、C# で Excel を DataTable に変換する処理 は必ずしもシンプルではありません。従来は OLEDB ドライバーに依存する方法や、複雑な OpenXML コードの記述が必要でしたが、どちらも外部依存や実装の煩雑さという問題を抱えています。そこで本記事では、Spire.XLS for .NET を用いて、より直感的かつ効率的に Excel データを C# で DataTable に取り込む方法 を紹介します。このライブラリを使えば、ワークシート全体や任意の範囲を直接 DataTable に変換することが可能です。 クイックナビゲーション DataTableとは?その利点 環境準備 C#でExcelをDataTableに変換する方法 応用:DataTableをExcelにエクスポート 大規模Excel処理とパフォーマンス最適化 ベストプラクティス まとめ FAQ DataTableとは?その利点 C# の DataTable は、メモリ上で構造化データを保持できる表形式のデータ構造です。主な利点は次のとおりです: Excel データを表形式で保持できる。 フィルタリング・ソート・LINQ クエリに対応。 DataGridView などの UI コントロールに直接バインド可能。 データベースへの一括挿入に適している。 DataSet と比べると軽量で、特に単一のワークシートや範囲データを扱うのに最適です。 環境準備 作業を始める前に、プロジェクトに Spire.XLS for .NET を導入します。NuGet を利用するのが最も簡単です: Install-Package Spire.XLS その後、必要な名前空間をコードに追加します: using Spire.Xls; using System.Data; C#でExcelをDataTableに変換する方法 ここでは、Excel ファイルを読み込み、その内容を DataTable に変換する手順を解説します。Spire.XLS は OLEDB に依存せず、Microsoft Office のインストールも不要なため、デスクトップ・サーバーアプリケーションの両方で安定して利用できます。 Excelファイルを読み込む Workbook workbook = new Workbook(); workbook.LoadFromFile("Sample.xlsx"); このコードは、指定した Excel ファイルを読み込み Workbook オブジェクトを生成します。その後、ワークシートにアクセスできます。 ワークシート全体をDataTableに変換 Worksheet sheet = workbook.Worksheets[0]; DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true); このコードでは、最初のワークシート全体を DataTable に変換します。 sheet.AllocatedRange は使用されているセル範囲を取得。 true を指定すると、最初の行を列名として扱います。 シート全体を DataTable に取り込みたい場合、例えば DataGridView へのバインドやデータベースへの一括挿入に適しています。 指定範囲をDataTableに変換 DataTable partialTable = sheet.ExportDataTable(sheet.Range["A1:C10"], true); この例では、セル範囲 A1:C10 のデータだけを DataTable に変換します。 大規模ファイルを処理する際に、一部データのみを抽出する用途に便利です。 完全なサンプルコード 以下は、Excel ファイルの読み込みから DataTable への変換、コンソール出力までの流れを示した完全な例です: using Spire.Xls; using System.Data; class Program { static void Main() { // Excel ファイルを読み込み Workbook workbook = new Workbook(); workbook.LoadFromFile("Sample.xlsx"); // 最初のワークシートを DataTable に変換 Worksheet sheet = workbook.Worksheets[0]; DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true); // 行数を出力 Console.WriteLine("Rows imported: " + dataTable.Rows.Count); // 列名を出力 foreach (DataColumn col in dataTable.Columns) { Console.Write(col.ColumnName + "t"); } Console.WriteLine(); // 全データを出力 foreach (DataRow row in dataTable.Rows) { foreach (var item in row.ItemArray) { Console.Write(item + "t"); } Console.WriteLine(); } } } このコードは最初のワークシートを DataTable に変換し、結果をコンソールに出力します。 実行結果は次のようになります: セル単位での読み取りが必要な場合は、こちらを参照してください:C#でExcelファイルを読み取る方法。 応用:DataTableをExcelにエクスポート 変更後の DataTable を Excel に書き戻す必要がある場合は、次のように実装できます: Workbook wb = new Workbook(); Worksheet ws = wb.Worksheets[0]; // dataTable にデータが入っている前提 ws.InsertDataTable(dataTable, true, 1, 1); wb.SaveToFile("Output.xlsx", ExcelVersion.Version2016); このコードは A1 セルから DataTable を挿入し、新しいファイルとして保存します。 Excel ⇔ DataTable 間の双方向データ処理を実現できます。詳細は C#でDataTableをExcelにエクスポートする方法 を参照してください。 大規模Excel処理とパフォーマンス最適化 大きな Excel ファイルを扱う場合、次の最適化を推奨します: 必要なワークシートだけ読み込む(全シートを読み込まない)。 指定範囲のみをエクスポートし、無駄なデータを避ける。 LoadFromStream を使い、ファイルロックを回避。 非常に大きな DataTable は逐次処理してメモリ使用量を抑える。 Spire.XLS は .xls、.xlsx、.csv に対応し、多様なケースで活用可能です。 ベストプラクティス Excel ⇔ DataTable 処理の際に注意すべきポイント: データ型の変換:Excel は既定で文字列として保存されるため、必要に応じて int、decimal、DateTime に変換する。 空セル処理:欠損値を考慮し、実行時エラーを回避する。 データベース連携:DataTable を DB に一括挿入する前に、必ず検証・整形を行う。 まとめ Excel データを DataTable に変換する処理は .NET 開発で非常に重要です。Spire.XLS for .NET を使えば、OLEDB や OpenXML の複雑さを避け、シンプルかつ効率的に実装できます。 ワークシート全体の変換 指定範囲の抽出 DataTable から Excel への書き戻し といった操作を直感的に行えるため、C# アプリと Excel の連携がよりスムーズになります。 全機能を利用したい場合は 無料の一時ライセンス申請 を、軽量なプロジェクトには Free Spire.XLS for .NET をご利用ください。 FAQ Q: C#でExcelをDataTableにインポートする方法は? Worksheet.ExportDataTable() メソッドを使うことで直接変換できます。 Q: OLEDBを使わずにExcelをDataTableに読み込めますか? はい。Spire.XLS は OLEDB や Microsoft Office に依存しません。 Q: 特定のワークシートや範囲だけをDataTableに変換できますか? はい。対象の Worksheet または Range を ExportDataTable() に渡してください。 Q: DataTableをExcelにエクスポートできますか? 可能です。Worksheet.InsertDataTable() を使用し、SaveToFile() で保存できます。