C# 開発では、DataSet はインメモリでデータを管理するためによく利用されます。通常はデータベースクエリの結果やシステム連携の処理結果として使われ、さまざまな場面で C# から DataSet を Excel に出力 するニーズがあります。例えば、レポートの生成、非エンジニアへのデータ共有、将来のためのアーカイブなどです。
本記事では、C# で DataSet を Excel にエクスポート する方法を Spire.XLS for .NET を使って解説します。Excel ファイルの作成、複数 DataTable のシート分割出力、書式設定、大量データの扱いまでステップごとに紹介します。
本記事の内容:
- DataSet の基礎と環境準備
- C# で DataSet から Excel ファイルを作成
- C# で Excel シートに書式を追加
- 大規模 DataSet のエクスポート対応
- C# で Excel を DataSet に読み込む
- まとめ
- FAQ
1. DataSet の基礎と Excel エクスポートの環境準備
DataSet とは?
C# の DataSet は、構造化データをインメモリで保持するためのオブジェクトです。複数の DataTable を格納でき、行・列・リレーションを含むため、データベースに直接接続せずにリレーショナルデータを扱うのに便利です。
なぜ DataSet を Excel に出力するのか?
- データ共有 – Excel は幅広く利用され、チーム間で簡単に共有可能。
- データ分析 – Excel の数式・ピボット・グラフを直接利用できる。
- アーカイブ – クエリ結果や加工データを可読性の高い形式で保存可能。
CSV やテキスト形式に比べ、Excel は リッチな書式、複数シート、高い可読性を提供します。
環境準備
C# で DataSet を Excel に出力するには、Spire.XLS for .NET を利用します。NuGet でインストール可能です。
Install-Package Spire.XLS
必要な名前空間を追加します。
using Spire.Xls;
using System.Data;
using System.Drawing; // 色指定用
2. C# で DataSet から Excel ファイルを作成
DataSet を Excel に出力する基本ステップは、データ準備と Excel への書き込みです。実際にはデータベースや API から取得することが多いですが、ここでは理解しやすいようサンプル DataSet を作成し、各 DataTable を個別シートに出力する例を示します。
2.1 サンプル DataSet の作成
以下は C# で作成するサンプル DataSet です。従業員・部署・プロジェクトの 3 テーブルを持ち、int, string, DateTime, decimal 型を含みます。
using System;
using System.Data;
class Program
{
static DataSet CreateSampleDataSet()
{
DataSet ds = new DataSet("CompanyData");
// 社員テーブル
DataTable employees = new DataTable("社員");
employees.Columns.Add("社員ID", typeof(int));
employees.Columns.Add("氏名", typeof(string));
employees.Columns.Add("部署ID", typeof(int));
employees.Columns.Add("入社日", typeof(DateTime));
employees.Columns.Add("給与", typeof(decimal));
employees.Rows.Add(1, "山田太郎", 101, new DateTime(2020, 5, 12), 5500.00m);
employees.Rows.Add(2, "佐藤花子", 102, new DateTime(2019, 3, 8), 7200.50m);
employees.Rows.Add(3, "鈴木一郎", 103, new DateTime(2021, 11, 2), 4800.75m);
// 部署テーブル
DataTable departments = new DataTable("部署");
departments.Columns.Add("部署ID", typeof(int));
departments.Columns.Add("部署名", typeof(string));
departments.Rows.Add(101, "人事");
departments.Rows.Add(102, "IT");
departments.Rows.Add(103, "経理");
// プロジェクトテーブル
DataTable projects = new DataTable("プロジェクト");
projects.Columns.Add("プロジェクトID", typeof(int));
projects.Columns.Add("プロジェクト名", typeof(string));
projects.Columns.Add("責任者ID", typeof(int));
projects.Columns.Add("開始日", typeof(DateTime));
projects.Rows.Add(1001, "採用システム", 1, new DateTime(2023, 1, 15));
projects.Rows.Add(1002, "ERPアップグレード", 2, new DateTime(2023, 4, 10));
projects.Rows.Add(1003, "予算計画", 3, new DateTime(2023, 7, 5));
ds.Tables.Add(employees);
ds.Tables.Add(departments);
ds.Tables.Add(projects);
return ds;
}
}
2.2 DataSet を Excel ファイルに出力
準備した DataSet を Excel ファイルに書き出す手順です。Workbook を作成し、各 DataTable をシートに挿入して保存します。
using Spire.Xls;
using System.Data;
class Program
{
static void Main()
{
DataSet ds = CreateSampleDataSet();
Workbook workbook = new Workbook();
workbook.Worksheets.Clear(); // 既存のシートを削除
// 各 DataTable を別シートとして出力
for (int i = 0; i < ds.Tables.Count; i++)
{
Worksheet sheet = workbook.Worksheets.Add(ds.Tables[i].TableName);
sheet.InsertDataTable(ds.Tables[i], true, 1, 1);
sheet.Name = ds.Tables[i].TableName; // シート名をテーブル名と一致させる
}
workbook.SaveToFile("DatasetToExcel.xlsx", ExcelVersion.Version2016);
}
}
エクスポートの仕組み
- 各 DataTable が個別のワークシートとして出力されます。
- InsertDataTable(DataTable table, bool columnHeaders, int row, int column) でデータの挿入開始セルを指定可能。
- SaveToFile() で Excel ファイルとして保存します。
また、開始行・列を調整すれば、複数の DataTable を同じシートに配置することも可能です。
出力結果プレビュー
以下は 3 つの DataTable がシートに出力された Excel のプレビューです。
データベースから直接 Excel に出力する例については C# でデータベースを Excel にエクスポートする方法 を参照してください。
3. C# で Excel シートに書式を追加
生データだけではレポートとして不十分な場合があります。見やすさやプロフェッショナルな仕上がりにするために書式設定を行います。Spire.XLS ではフォントや背景色、罫線、数値や日付のフォーマットを簡単に設定できます。
using System.Drawing;
using Spire.Xls;
// 「Employees」シートを取得
Worksheet sheet1 = workbook.Worksheets["Employees"];
// 1) ヘッダーのスタイル設定 (A1:E1)
CellRange header = sheet1.AllocatedRange.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.Size = 12;
header.Style.Font.Color = Color.White;
header.Style.Color = Color.SteelBlue;
// ヘッダー行の罫線
header.BorderAround(LineStyleType.Thin);
// 2) 列の数値フォーマット設定 (D列: HireDate, E列: Salary)
sheet1.AllocatedRange.Columns[3].Style.NumberFormat = "yyyy-mm-dd";
sheet1.AllocatedRange.Columns[4].Style.NumberFormat = "$#,##0.00";
// 3) データ部分にゼブラストライプ (A2:E4 を例示)
CellRange data = sheet1.Range["A2:E4"];
data.Style.Color = Color.FromArgb(245, 247, 250);
data.BorderAround(LineStyleType.Thin);
// フォント名を設定
sheet1.AllocatedRange.Style.Font.FontName = "Yu Gothic UI";
// 書式設定後に自動調整
sheet1.AllocatedRange.AutoFitColumns();
sheet1.AllocatedRange.AutoFitRows();
書式設定のポイント
- Style.Font — 太字、サイズ、色などフォント設定。
- Style.Color — セル背景色を指定。
- BorderAround — セル範囲に罫線を描画。
- NumberFormat — Excel の標準フォーマットを使用(日付・通貨など)。
- AutoFitColumns() / AutoFitRows() — 内容に合わせて行・列を自動調整。
さらに詳細な設定は CellRange と CellStyle の API を参照してください。
書式適用後のプレビュー
青背景・白文字のヘッダー、罫線、日付や通貨のフォーマットが反映されています。
4. 大規模 DataSet のエクスポート対応
大量データを扱う場合は、パフォーマンスやメモリ使用量に注意が必要です。対策として:
- シート分割 — 行数が制限に近づいた場合や論理的な区分がある場合に有効。
- バッチ書き込み — テーブル単位・範囲単位で分割挿入する。
- 軽量な書式 — 複雑なスタイル設定を減らし、ファイルサイズを抑制。
- ストリーミング処理 — 必要に応じて全件を一度に読み込まずに処理する。
5. ボーナス: C# で Excel を DataSet に読み込む
エクスポートだけでなく、逆に Excel データを DataSet に読み込むケースも重要です。外部レポートのインポート、アプリケーションとの連携、DB 登録前の前処理などに役立ちます。
using System.Data;
using Spire.Xls;
class Program
{
static DataSet ReadExcelIntoDataSet(string filePath)
{
DataSet ds = new DataSet();
Workbook workbook = new Workbook();
workbook.LoadFromFile(filePath);
foreach (Worksheet sheet in workbook.Worksheets)
{
DataTable dt = sheet.ExportDataTable();
dt.TableName = sheet.Name;
ds.Tables.Add(dt);
}
return ds;
}
}
ExportDataTable メソッドで各ワークシートを DataTable に変換し、シート名を TableName に割り当てて DataSet に追加します。これにより複数シートを一括でインメモリに統合できます。
Excel データをデータベースに保存する完全ワークフローについては C# で Excel を DB にインポートする方法 を参照してください。
まとめ
C# で DataSet を Excel にエクスポート することで、レポート作成・データ共有・分析が容易になります。Spire.XLS for .NET を使えば、DataSet から直接 Excel ファイルを生成し、書式設定、複数シート管理、大規模データ処理まで効率的に行えます。また、Excel から DataSet に読み込むことも可能で、アプリケーションやデータベースとの統合に役立ちます。
より高度な機能を試すには 無料一時ライセンスを申請 するか、小規模プロジェクト向けに Free Spire.XLS for .NET を利用できます。
FAQ: C# DataSet と Excel 連携
Q1: DataSet の複数 DataTable を Excel の別シートに出力できますか?
はい。ds.Tables をループし、それぞれに InsertDataTable を呼び出してシートを作成します。
Q2: 既存の Excel ファイルの特定シートに DataSet を出力できますか?
可能です。Workbook.LoadFromFile() でファイルを読み込み、対象シートに InsertDataTable を使って書き込みます。
Q3: DataSet から Excel にエクスポートする際、列のフォーマットやデータ型は保持されますか?
はい。DataSet のデータ型がそのまま出力されます。さらに日付や通貨などの書式を後から設定することもできます。
Q4: 10 万行以上の大規模 DataSet を扱うにはどうすればよいですか?
シート分割、バッチ挿入、複雑な書式を減らすことでパフォーマンスを改善できます。