.NETフレームワークでは、C#を使ってExcelデータとDataTableの間でデータを変換することは、データ分析、レポート生成、データ移行などにおいて非常に一般的なニーズです。このプロセスでは、ExcelファイルからDataTableにデータを読み込み、.NETが提供する豊富なデータ処理機能を活用できるようにすること、またDataTableのデータをExcelにエクスポートしてデータの視覚化や共有を可能にすることが含まれます。この記事では、C#でExcelデータとDataTable間の効率的な変換方法を紹介します。
ここで紹介する方法では、無料のFree Spire.XLS for .NETを使用します。NuGetコマンドは次の通りです:PM> Install-Package FreeSpire.XLS
。
ExcelファイルからDataTableへデータを書き出す
ライブラリのExportDataTable
メソッドを使用すると、指定したExcelワークシートまたはワークシート内の特定のセル範囲のデータを簡単にDataTableオブジェクトにインポートできます。特定のセル範囲をDataTable
にエクスポートする際、ExportTableOptions
オブジェクトを引数として使用してエクスポートオプションを設定することも可能です。例えば、数式の計算結果をエクスポートするかどうか、列名をエクスポートするかどうかを指定できます。以下は操作手順の例です:
- 必要なモジュールをインポートします。
-
Workbook
オブジェクトを作成し、Workbook.LoadFromFile()
メソッドでExcelファイルを読み込みます。 -
Workbook.Worksheets[]
プロパティを使用して対象のワークシートを取得します。 -
ExportTableOptions
オブジェクトを作成し、プロパティを設定してエクスポートオプションを指定します。その後、Worksheet.Range[].ExportDataTable()
メソッドを使用して指定したセル範囲をDataTableインスタンスとしてエクスポートします。または、Worksheet.Range[].ExportDataTable()
メソッドを直接使用して、ワークシート全体をDataTableインスタンスとしてエクスポートすることもできます。 - 結果を出力します。
コード例
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 = false;
options.RenameStrategy = RenameStrategy.Letter;
DataTable dataTable = sheet.Range[1, 1, 3, 3].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ファイルにデータを書き込む
Worksheet.InsertDataTable(DataTable, insertHeaders: bool, firstRow: int, firstColumn: int)
メソッドを使用すると、DataTableデータを直接Excelワークシートに書き込むことができます。以下は操作手順の例です:
- 必要なモジュールをインポートします。
- データを定義し、それを使用して
DataTable
オブジェクトを構築します。 -
Workbook
インスタンスを作成します。 -
Workbook.Worksheets.Clear()
メソッドでデフォルトのワークシートを削除し、Workbook.Worksheets.Add()
メソッドで新しいワークシートを追加します。 -
Worksheet.InsertDataTable()
メソッドを使用してDataTableデータをワークシートに書き込みます。 - 必要に応じてセルの書式を設定します。
-
Workbook.SaveToFile()
メソッドを使用してExcelファイルを保存します。 - リソースを解放します。
コード例
using Spire.Xls;
using System.Data;
namespace DataTableToExcel
{
class Program
{
static void Main(string[] args)
{
// データ配列を定義し、DataTableのインスタンスを作成
string[,] data = new string[,]
{
{ "Product", "Quantity", "SalesAmount" },
{ "Product A", "100", "5000.0" },
{ "Product B", "150", "7500.0" },
{ "Product C", "200", "10000.0" },
{ "Product D", "120", "6000.0" },
{ "Product E", "180", "9000.0" }
};
DataTable dataTable = new DataTable();
// 列数を取得
int columnCount = data.GetLength(1);
// 列を追加
for (int col = 0; col < columnCount; col++)
{
dataTable.Columns.Add(data[0, col]);
}
// データ行を追加
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("SalesReport");
// DataTableのデータをワークシートに挿入
sheet.InsertDataTable(dataTable, true, 1, 1);
// 列幅を自動調整
for (int i = 1; i < sheet.AllocatedRange.ColumnCount; i++)
{
sheet.AutoFitColumn(i);
}
// ファイルに保存
workbook.SaveToFile("output/DataTableToExcel.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}
この記事では、C#コードを使用して.NETプログラム内でExcelファイルのデータをDataTableにインポートし、またDataTableのデータをExcelファイルにエクスポートする方法について説明しました。