Excel は強力なツールですが、大量のデータや複雑なデータロジックを扱う際にはパフォーマンスの制限が生じることがあります。Excel を DataTable に変換することで、プログラミング言語の機能や様々なデータ処理ライブラリを活用して、より効率的かつ柔軟にデータを処理および分析することができます。
一方で、ソート、フィルタリング、計算などの Microsoft Excel の高度な機能を活用するために、DataTable を Excel に変換する必要がある場合もあります。この記事では、無料の.NET ライブラリを使用して、C# でプログラム的に Excel と DataTable の間で変換する方法を紹介します。
無料の.NETライブラリをインストールする
始める前に、Free Spire.XLS for .NET ライブラリをインストールする必要があります。 このライブラリは、無料でExcelファイルを作成、編集、変換することができますが、ページ数の制限があります。
それをインストールする方法は 2 つあります。
方法1. Free Spire.XLS for .NET パッケージをダウンロードし、それを解凍してから、.NET プログラムに dll を手動で参照設定します。
方法2. Nuget を介して直接無料のライブラリをインストールします。
C#でExcelデータをDataTableにインポートする
手順:
-
LoadFromFile()
メソッドを使用してExcelファイルを読み込みます。 -
Worksheets[]
プロパティを通じて指定のワークシートを取得します。 -
ExportTableOptions
オブジェクトを作成し、そのプロパティを使ってオプションをカスタマイズします。 -
Worksheet.Range[].ExportDataTable()
メソッドを呼び出して、セル範囲をDataTable
に変換します。(または、Worksheet.ExportDataTable()
メソッドを使用して、Excelのワークシート全体のデータを直接DataTable
オブジェクトにインポートすることもできます。) - 結果を出力します。
C#のコード:
using Spire.Xls;
using System.Data;
namespace ExcelToDataTable
{
class Program
{
static void Main(string[] args)
{
// Excelファイルを読み込む
Workbook wb = new Workbook();
wb.LoadFromFile("Sample.xlsx");
// ワークシートを取得する
Worksheet sheet = wb.Worksheets[0];
// ExcelのワークシートをDataTableに変換する
//DataTable dataTable = sheet.ExportDataTable();
// 指定されたセル範囲をDataTableに変換する
ExportTableOptions options = new ExportTableOptions();
options.ComputedFormulaValue = true;
options.ExportColumnNames = false;
options.KeepDataFormat = false;
options.RenameStrategy = RenameStrategy.Letter;
DataTable dataTable = sheet.Range[5, 1, 7, 6].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();
}
}
}
}
C#でDataTableをExcelにエクスポートする
手順:
- DataTable のデータを定義します。
- Excel ワークブックを作成し、ワークシートを追加します。
-
InsertDataTable()
メソッドを使用して、DataTable のデータを Excel のワークシートに書き込みます。 -
SaveToFile()
メソッドを使用して、Excel ファイルを保存します。
C#のコード:
using Spire.Xls;
using System.Data;
namespace DataTableToExcel
{
class Program
{
static void Main(string[] args)
{
// データセットを定義する
string[,] data = new string[,]
{
{"SKU", "説明", "Price ($)"},
{"11060015", "品目 1", "2000"},
{"11060037", "品目 2", "1500"},
{"11060021", "品目 3", "3980"},
{"11060029", "品目 4", "1190"},
};
// DataTableオブジェクトを作成する
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();
// 新しいワークシートを追加する
Worksheet sheet = workbook.Worksheets.Add("SalesReport");
// DataTableのデータをワークシートにインポートする
sheet.InsertDataTable(dataTable, true, 1, 1);
// 列幅を自動調整する
for (int i = 1; i <= sheet.AllocatedRange.ColumnCount; i++)
{
sheet.AutoFitColumn(i);
}
// ファイルを保存する
workbook.SaveToFile("DataTableToExcel.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}
もし何か質問があれば、フォーラムに投稿することができます。