.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() で保存できます。