C# アプリケーションでは、Excel ファイルと DataTable 間でデータを効率よく変換することが、データの利用、分析、処理能力を向上させるために不可欠です。Excel から DataTable にデータを転送することで、.NET の機能を最大限に活用し、データの分析や変換、処理が可能になります。また、データを Excel に戻すことで、他のシステムと簡単に共有、報告、および統合できます。本記事では、C# コードを使用して Spire.XLS for .NET を活用し、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 <= sheet.AllocatedRange.ColumnCount; i++)
{
sheet.AutoFitColumn(i);
}
// ワークブックをファイルに保存
workbook.SaveToFile("output/DataTableをExcelに挿入.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。