C# アプリケーションでは、Excel ファイルと DataTable 間でデータを効率よく変換することが、データの利用、分析、処理能力を向上させるために不可欠です。Excel から DataTable にデータを転送することで、.NET の機能を最大限に活用し、データの分析や変換、処理が可能になります。また、データを Excel に戻すことで、他のシステムと簡単に共有、報告、および統合できます。本記事では、C# コードを使用して Spire.XLS for .NET を活用し、Excel ファイルから DataTable にデータをエクスポートし、DataTable から Excel ファイルにデータをインポートする方法を説明します。 Excel ファイルから DataTable へのデータエクスポート DataTable から Excel ファイルへのデータインポート Spire.XLS for .NET をインストールします まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。 PM> Install-Package Spire.XLS Excel ファイルから DataTable へのデータエクスポート Spire.XLS for .NET は、Worksheet.ExportDataTable() メソッドを提供しており、Excel ワークシート全体のデータを DataTable オブジェクトにエクスポートできます。また、Worksheet.Range[].ExportDataTable() メソッドにより、特定のセル範囲から DataTable にエクスポートすることも可能です。ExportTableOptions クラスを使用すると、セル範囲からデータをエクスポートする際のオプションをカスタマイズできます。Excel データを DataTable にエクスポートする詳しい手順は以下の通りです: Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。 Workbook.Worksheets[] プロパティで、Excel ファイル内のワークシートにアクセスします。 Worksheet.ExportDataTable() メソッドで、ワークシート全体のデータを DataTable オブジェクトにエクスポートします。 または、ExportTableOptions のインスタンスを作成してエクスポートオプションを指定し、特定のセル範囲から DataTable にデータをエクスポートします。 C# using Spire.Xls; using System.Data; namespace ExcelToDataTable { class Program { static void Main(string[] args) { // Workbook インスタンスを作成 Workbook wb = new Workbook(); // Excel ファイルを読み込む wb.LoadFromFile("Sample.xlsx"); // ワークシートを取得 Worksheet sheet = wb.Worksheets[0]; // ワークシートのデータを DataTable にエクスポート //DataTable dataTable = sheet.ExportDataTable(); // または指定したセル範囲を DataTable にエクスポート ExportTableOptions options = new ExportTableOptions(); options.ComputedFormulaValue = true; options.ExportColumnNames = false; options.KeepDataFormat = true; options.RenameStrategy = RenameStrategy.Letter; DataTable dataTable = sheet.Range[2, 1, 6, 5].ExportDataTable(options); // DataTable の列名を出力 for (int i = 0; i < dataTable.Columns.Count; i++) { Console.Write(dataTable.Columns[i].ColumnName + "t"); } Console.WriteLine(); // DataTable のデータ行を出力 foreach (DataRow row in dataTable.Rows) { foreach (var item in row.ItemArray) { Console.Write(item + "t"); } Console.WriteLine(); } } } } DataTable から Excel ファイルへのデータインポート Spire.XLS for .NET は、DataTable オブジェクトのデータを Excel ワークシートに挿入するための Worksheet.InsertDataTable(DataTable, colHeaders: bool, firstRow: int, firstColumn: int) メソッドを提供しています。DataTable から Excel にデータをインポートする手順は以下の通りです: データを定義し、DataTable オブジェクトを作成します。 Workbook インスタンスを作成し、Workbook.Worksheets.Clear() メソッドでデフォルトのワークシートをクリアします。 Workbook.Worksheets.Add(sheetName: string) メソッドで、指定した名前の新しいワークシートを挿入します。 Worksheet.InsertDataTable() メソッドを使用して、DataTable オブジェクトからワークシートにデータを挿入します。 必要に応じて書式を調整します。 Workbook.SaveToFile() メソッドでワークブックを保存します。 C# using Spire.Xls; using System.Data; namespace DataTableToExcel { class Program { static void Main(string[] args) { // データセットを定義し、DataTableインスタンスを作成 // 新しい製品と数量でデータ配列を再定義 string[,] data = new string[,] { { "カテゴリ", "書名", "著者", "出版社", "価格(円)" }, { "小説", "ノルウェイの森", "村上春樹", "講談社", "1500" }, { "科学", "人工知能の基礎", "佐藤一郎", "技術評論社", "2500" }, { "歴史", "坂の上の雲", "司馬遼太郎", "文藝春秋", "1800" }, { "哲学", "善と悪の彼岸", "フリードリッヒ・ニーチェ", "岩波書店", "1300" }, { "芸術", "日本画入門", "横山大観", "美術出版社", "2000" }, { "教育", "子どもを伸ばす方法", "齋藤孝", "NHK出版", "1200" } }; DataTable dataTable = new DataTable(); // 列数を取得 int columnCount = data.GetLength(1); // DataTableに列を追加 for (int col = 0; col < columnCount; col++) { dataTable.Columns.Add(data[0, col]); } // DataTableに行を追加 for (int row = 1; row < data.GetLength(0); row++) { DataRow dataRow = dataTable.NewRow(); for (int col = 0; col < columnCount; col++) { dataRow[col] = data[row, col]; } dataTable.Rows.Add(dataRow); } // Workbookインスタンスを作成 Workbook workbook = new Workbook(); // デフォルトのワークシートをクリアし、新しいワークシートを追加 workbook.Worksheets.Clear(); Worksheet sheet = workbook.Worksheets.Add("書目"); // DataTableデータをワークシートに挿入 sheet.InsertDataTable(dataTable, true, 1, 1); // 必要に応じてフォーマットを調整 // フォントを調整 sheet.Rows[0].Style.Font.Size = 13; sheet.Rows[0].Style.Font.IsBold = true; sheet.Rows[0].Style.Font.FontName = "Yu Gothic UI"; for (int j = 1; j < sheet.AllocatedRange.RowCount; j++) { sheet.Rows[j].Style.Font.Size = 12; sheet.Rows[j].Style.Font.FontName = "Yu Gothic UI"; } // 列幅を自動調整 for (int i = 1; i