チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.XLS for .NET»データのインポート/エクスポート»C#でExcelをDataTableに変換:ワークシート・範囲・応用編
2024-11-13

C#でExcelをDataTableに変換:ワークシート・範囲・応用編

C# Excel を DataTable に変換する例

.NET 開発では、Excel データを扱うニーズが非常に多くあります。その際、Excel ファイルを DataTable に変換することで、データを表形式で管理でき、LINQ クエリの実行、UI コントロールへのバインド、データベースへの一括インポートなどが容易になります。

一方で、C# で Excel を DataTable に変換する処理 は必ずしもシンプルではありません。従来は OLEDB ドライバーに依存する方法や、複雑な OpenXML コードの記述が必要でしたが、どちらも外部依存や実装の煩雑さという問題を抱えています。そこで本記事では、Spire.XLS for .NET を用いて、より直感的かつ効率的に Excel データを C# で DataTable に取り込む方法 を紹介します。このライブラリを使えば、ワークシート全体や任意の範囲を直接 DataTable に変換することが可能です。

クイックナビゲーション

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 に変換した結果

セル単位での読み取りが必要な場合は、こちらを参照してください: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 は既定で文字列として保存されるため、必要に応じて intdecimalDateTime に変換する。
  • 空セル処理:欠損値を考慮し、実行時エラーを回避する。
  • データベース連携: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 または RangeExportDataTable() に渡してください。

Q: DataTableをExcelにエクスポートできますか?

可能です。Worksheet.InsertDataTable() を使用し、SaveToFile() で保存できます。

Read 1178 times