Excelはデータ整理やレポート作成に便利ですが、プログラムの中でデータを操作したい場合には、DataTableに読み込んで扱うのが効率的です。この記事では、Free Spire.XLS for .NET を使って、Excelワークシートの内容をDataTableに取り込む方法を紹介します。
ExcelをDataTableに変換する基本手順
Spire.XLSには ExportDataTable
メソッドが用意されており、これを使うと簡単にExcelの表をDataTableへ変換できます。以下のコードは、ワークシート全体をDataTableに読み込む例です。
using Spire.Xls;
using System.Data;
namespace ExcelToDataTableDemo
{
class Program
{
static void Main(string[] args)
{
// Excelファイルをロード
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
// 1つ目のワークシートを取得
Worksheet sheet = workbook.Worksheets[0];
// ワークシートをDataTableに変換
DataTable dataTable = sheet.ExportDataTable();
// DataTableを利用してデータ処理が可能
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row[0].ToString());
}
}
}
}
この方法を使えば、Excelの行と列がそのままDataTableに格納され、コード内で自由に処理できます。
サンプルExcelファイル:
DataTableへのインポート結果:
範囲を指定してDataTableに変換する
実際の業務では、ワークシート全体ではなく一部の範囲だけを扱いたいケースも多いです。
ExportDataTable(CellRange range, bool columnNames)
を利用すると、任意の範囲を指定できます。
// A1:D10の範囲をDataTableに変換(1行目を列名として利用)
CellRange range = sheet.Range["A1:D10"];
DataTable dataTable = sheet.ExportDataTable(range, true);
これにより、必要なデータだけを効率的に取り出せます。
数式セルの取り扱いに注意
Excelには数式セルが含まれている場合があります。ExportDataTable
を実行すると、数式はそのまま文字列として出力 されます。
例えば、セルに =SUM(A1:A3)
が入力されている場合、DataTableには =SUM(A1:A3)
という文字列が入ります。
もし数値結果を取得したい場合は、事前に数式セルを計算結果の値に置き換える必要 があります。
// 数式セルを値に変換してからDataTableにエクスポート
sheet.CalculateAllValue();
sheet.Range["A1:D10"].Value = sheet.Range["A1:D10"].FormulaValue.ToString();
DataTable dataTable = sheet.ExportDataTable(sheet.Range["A1:D10"], true);
こうしておけば、DataTableには計算済みの数値データが格納されます。
まとめ
-
ExportDataTable
を使えばExcelの内容を簡単にDataTableに取り込める - 範囲を指定して部分的に取り込むことも可能
- 数式セルはデフォルトでは数式そのものが出力されるため、数値を扱いたい場合は事前に計算結果へ変換しておく必要がある
これらを押さえておくことで、ExcelとC#の連携をスムーズに行えます。
Excelファイル操作に関するその他のチュートリアルについては、Spire.XLS for .NET公式チュートリアルをご参照ください。