チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション

C# を使用してリストデータを Excel にエクスポートすることは、現代の .NET アプリケーションにおいて一般的な要件です。デスクトップアプリケーション、Web システム、バックグラウンドサービスのいずれを開発する場合でも、開発者はメモリ上のコレクション、特に List<T> を、ユーザーがダウンロード・分析・共有できる構造化された Excel ファイルに変換する必要があります。
本チュートリアルでは、Spire.XLS for .NET を使用し、Excel Interop を使わずに C# でオブジェクトのリストを Excel にエクスポートする方法を解説します。本ソリューションは .NET Core および最新の .NET バージョンに完全対応しており、一般的な業務データモデルで利用でき、Microsoft Excel のインストールも不要です。
目次
リストデータを Excel にエクスポートすることは、構造化された情報を、広く利用されている分かりやすい形式で提供する有効な方法です。実際の業務では、次のような場面でよく利用されます。
従来、多くの開発者は Excel ファイルの生成に Excel Interop を使用してきました。しかし、Interop には以下のような制約があります。
このため、近年の .NET アプリケーションでは、Interop を使用しない Excel エクスポートが主流となっています。Spire.XLS for .NET のようなライブラリを使用すれば、Microsoft Office に依存することなく、List<T> を直接 Excel ファイルとして安全かつ確実に出力できます。
実際のアプリケーションでは、単純な値ではなく、業務オブジェクトのリストとしてデータを扱うことがほとんどです。本セクションでは、現実的な帳票出力シナリオを想定し、再利用可能で Interop に依存しない方法で List<T> を Excel にエクスポートする手順を説明します。
リストを Excel にエクスポートする前に、プロジェクトに Spire.XLS for .NET をインストールしてください。
NuGet から次のコマンドでインストールできます。
Install-Package Spire.XLS
インストール後、追加の設定なしで List<T> の Excel 出力を開始できます。
オブジェクトのリストを Excel にエクスポートする基本的な流れは、次のとおりです。
List<T> として準備する以下のサンプルでは、これらの処理をすべて含めた実装例を示します。
using Spire.Xls;
using System;
using System.Collections.Generic;
using System.Reflection;
public class OrderReport
{
public int OrderId { get; set; }
public string CustomerName { get; set; }
public DateTime OrderDate { get; set; }
public decimal TotalAmount { get; set; }
public string Status { get; set; }
}
class Program
{
static void Main()
{
// サンプル業務データの準備
List<OrderReport> orders = new List<OrderReport>
{
new OrderReport { OrderId = 20240101, CustomerName = "サンプル株式会社A", OrderDate = new DateTime(2024, 1, 5), TotalAmount = 1250000m, Status = "完了" },
new OrderReport { OrderId = 20240102, CustomerName = "テスト法人B", OrderDate = new DateTime(2024, 1, 8), TotalAmount = 860000m, Status = "処理中" },
new OrderReport { OrderId = 20240103, CustomerName = "デモ企業C", OrderDate = new DateTime(2024, 1, 12), TotalAmount = 430500m, Status = "キャンセル" }
};
// ワークブックとワークシートを作成
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// リフレクションでプロパティ情報を取得
PropertyInfo[] properties = typeof(OrderReport).GetProperties();
// 列見出しを書き込み
for (int i = 0; i < properties.Length; i++)
{
sheet.Range[1, i + 1].Text = properties[i].Name;
}
// データ行を書き込み
for (int row = 0; row < orders.Count; row++)
{
for (int col = 0; col < properties.Length; col++)
{
object value = properties[col].GetValue(orders[row]);
sheet.Range[row + 2, col + 1].Value2 = value;
}
}
// Excel ファイルを保存
workbook.SaveToFile("OrderReport.xlsx", ExcelVersion.Version2016);
}
}
生成された Excel ファイルのプレビューは次のとおりです。

この実装パターンは、再利用可能なエクスポート処理や帳票生成機能の構築に適しています。
なお、List<T> ではなく DataTable としてデータを取得する場合も、Spire.XLS for .NET には効率的なエクスポート手段が用意されています。詳細は C# で DataTable を Excel にエクスポートする方法 を参照してください。
Spire.XLS for .NET では、基本的なデータ出力に加えて、Excel ファイルの可読性や実用性を高めるための書式設定も行えます。
代表的な書式設定には、次のようなものがあります。
using System.Drawing;
// 見出し行の書式設定
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Font.FontName = "Yu Gothic UI";
headerStyle.Font.Size = 12f;
headerStyle.Font.IsBold = true;
headerStyle.Color = Color.LightGray;
headerStyle.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Range[1, 1, 1, sheet.LastColumn].Style = headerStyle;
// 日付列と金額列の表示形式を設定
sheet.Range[2, 3, orders.Count + 1, 3].NumberFormat = "yyyy-mm-dd";
sheet.Range[2, 4, orders.Count + 1, 4].NumberFormat = "#,##0.00";
// 行の高さと列幅を自動調整
sheet.AllocatedRange.AutoFitRows();
sheet.AllocatedRange.AutoFitColumns();
書式設定後の Excel シートのプレビューは以下のとおりです。

書式を適用することで、生成された Excel ファイルはより業務向けで、そのまま利用可能な品質になります。
スタイル設定、セル結合、条件付き書式、数式など、より高度な操作については、C# で Excel ワークシートを作成・書式設定する方法 を参照してください。
Spire.XLS for .NET は .NET Core および最新の .NET バージョンに完全対応しており、以下のような環境で利用できます。
Excel Interop に依存しないため、サーバーサイドや本番環境でも安全に利用できます。
ASP.NET Core や Web API プロジェクトで Excel ファイルを生成し、クライアントへ返却する方法については、次の記事を参照してください。 C# を使用して ASP.NET Core で Excel ファイルをエクスポートする
C# で List を Excel にエクスポートする処理は、Excel Interop に依存する必要はありません。Spire.XLS for .NET を使用すれば、List<T> を構造化された Excel ファイルへ効率的に変換でき、.NET Framework と .NET Core の両環境で安定して動作します。
Interop を使用しないことで、デプロイの複雑さを軽減し、アプリケーションの安定性を向上させ、業務データのエクスポートにおける柔軟性も高まります。
複雑な帳票からシンプルなリスト出力まで、Spire.XLS は現代的な C# アプリケーションに適した、信頼性と拡張性の高いソリューションです。評価目的や試用制限の解除には、30 日間の一時ライセンス を利用できます。
はい。Spire.XLS for .NET はサーバーサイド利用を前提として設計されており、大規模な List<T> データも効率的に処理できます。さらに大量の場合は、バッチ処理や分割出力によってパフォーマンスを向上させることが可能です。
いいえ。Spire.XLS for .NET は Microsoft Excel に依存せず、Excel Interop も使用しないため、サーバー環境やクラウド環境でも利用できます。
はい。列見出しは手動でカスタマイズでき、日付・数値・スタイルなどの書式もプログラムから指定できます。高度な書式設定については、C# Excel 書式設定ガイド を参照してください。
はい。本エクスポート処理は ASP.NET Core、Web API、バックグラウンドサービスなど、あらゆるサーバーサイドの .NET 環境で問題なく動作します。

C# アプリケーションにおいて、UI コントロールに表示されている表形式データを Excel にエクスポートすることは、非常に一般的な要件です。WinForms や ASP.NET プロジェクトでは、DataGrid、DataGridView、GridView に現在表示されているデータを、レポート作成や共有、後続処理のために Excel ファイルとして出力したいケースが多くあります。
実際の業務では、エクスポートされた Excel ファイルは単なる生データとして使われることはほとんどありません。読みやすいレイアウト、表ヘッダーの書式、適切な列幅、数値や日付の表示形式などが求められるのが一般的です。
本記事では、Spire.XLS for .NET を使用し、Microsoft Office Interop を使用せずに、C# で DataGridView および GridView / DataGrid のデータを Excel にエクスポートする方法を解説します。表示中のデータを正確に出力しつつ、実装をシンプルに保ち、Excel 側で一貫した書式設定を行うことに重点を置いています。
目次
Microsoft Office Interop を使用して Excel ファイルを生成することも可能ですが、DataGrid、DataGridView、GridView からデータを出力する場合、プログラムによるエクスポートには以下のような明確な利点があります。
コードベースで直接 Excel を生成することで、安定性・保守性・拡張性に優れたエクスポート機能を、さまざまなアプリケーションで一貫して提供できます。
DataGrid、DataGridView、GridView はいずれも UI コントロールですが、本質的には行と列で構成された構造化データを表示するためのものです。これらのコントロールを直接エクスポートしようとすると、UI に依存したロジックになりやすく、保守性が低下します。
そこで推奨されるのが、次のようなワークフローです。
画面表示データ → DataTable → Excel ファイル
この設計では、
DataTable は最終的な出力先ではなく、中間データ構造として機能します。Spire.XLS for .NET を使用すれば、DataTable を書式付きの Excel ファイルとして簡単にエクスポートできます。
最初のステップでは、UI コントロールに 現在表示されているデータ を取得し、DataTable に変換します。ここでは元のデータソースを再構築するのではなく、表示内容そのものを取得することが重要です。
WinForms アプリケーションでは、ユーザーは画面に表示されている DataGridView の内容と同じデータがエクスポートされることを期待します。以下のメソッドは、表示中の DataGridView データを DataTable に変換します。
DataTable ConvertDataGridViewToDataTable(DataGridView dgv)
{
DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dgv.Columns)
{
dt.Columns.Add(column.HeaderText, column.ValueType ?? typeof(string));
}
foreach (DataGridViewRow row in dgv.Rows)
{
if (row.IsNewRow) continue;
DataRow dr = dt.NewRow();
for (int i = 0; i < dgv.Columns.Count; i++)
{
dr[i] = row.Cells[i].Value ?? DBNull.Value;
}
dt.Rows.Add(dr);
}
return dt;
}
この方法により、列ヘッダー、列順、表示されている値を保持したまま、DataGridView のデータを Excel にエクスポートできます。
ASP.NET アプリケーションでは、GridView コントロールが表形式データの表示に使用されます。表示中の GridView データをエクスポートする場合、以下のようにレンダリングされた行を DataTable に変換できます。
DataTable ConvertGridViewToDataTable(GridView gv)
{
DataTable dt = new DataTable();
foreach (TableCell cell in gv.HeaderRow.Cells)
{
dt.Columns.Add(cell.Text);
}
foreach (GridViewRow row in gv.Rows)
{
DataRow dr = dt.NewRow();
for (int i = 0; i < row.Cells.Count; i++)
{
dr[i] = row.Cells[i].Text;
}
dt.Rows.Add(dr);
}
return dt;
}
この方法を使えば、UI に依存した処理を増やすことなく、C# で GridView のデータを Excel にエクスポートするための共通データ構造を用意できます。
なお、データベースから直接 Excel に出力したい場合は、こちらの記事も参考にしてください: C# でデータベースを Excel にエクスポートする方法
表示データを DataTable に変換できたら、あとは UI に依存しない形で Excel ファイルを生成するだけです。
ここでは Spire.XLS for .NET を使用し、Microsoft Excel をインストールせずに Excel ファイルを作成します。
NuGet を使用してインストールできます。
Install-Package Spire.XLS
または、Spire.XLS for .NET をダウンロードして、手動でプロジェクトに追加することも可能です。
using Spire.Xls;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
// 列ヘッダーを含めて DataTable を Excel に挿入
worksheet.InsertDataTable(exportTable, true, 1, 1);
// Excel ファイルを保存
workbook.SaveToFile("ExportedData.xlsx", ExcelVersion.Version2016);
エクスポート結果の Excel ファイルは以下のようになります。

このエクスポート処理は、DataGrid、DataGridView、GridView のいずれにもそのまま再利用できます。
Excel へのエクスポートでは、データの出所に関わらず、書式設定が重要になります。スタイルの適用、列幅の調整、数値書式の設定により、ファイルの可読性と実用性が大きく向上します。
以下は、エクスポートしたワークシートに対して適用できる代表的な書式設定の例です。
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Font.IsBold = true;
headerStyle.Font.FontName = "Yu Gothic UI";
headerStyle.Font.Size = 12f;
headerStyle.HorizontalAlignment = HorizontalAlignType.Center;
headerStyle.VerticalAlignment = VerticalAlignType.Center;
CellStyle dataStyle = workbook.Styles.Add("DataStyle");
dataStyle.Font.FontName = "Yu Gothic UI";
dataStyle.Font.Size = 11f;
// ヘッダーのスタイルを適用
CellRange headerRange = worksheet.Range[1, 1, 1, ordersTable.Columns.Count];
headerRange.Style = headerStyle;
// データ行のスタイルを適用
worksheet.Range[2, 1, worksheet.LastRow, worksheet.LastColumn].Style = dataStyle;
// 列幅と行高を自動調整
worksheet.AllocatedRange.AutoFitColumns();
worksheet.AllocatedRange.AutoFitRows();
// 日付と通貨の書式を設定
worksheet.Range[$"D2:D{worksheet.LastRow}"].NumberFormat = "#,##0";
worksheet.Range[$"E2:E{worksheet.LastRow}"].NumberFormat = "¥#,##0.00";
worksheet.Range[$"F2:G{worksheet.LastRow}"].NumberFormat = "yyyy-mm-dd";
書式適用後の Excel ファイルの例は以下のとおりです。

これらの書式設定は、レポート要件に応じて自由に組み合わせたり拡張したりできますが、データ抽出ロジックを変更する必要はありません。
Spire.XLS for .NET は、条件付き書式やグラフなど、さらに高度な Excel 機能にも対応しています。詳しくは、C# で Excel ファイルを作成する方法をご参照ください。
大量の DataGrid または GridView データをエクスポートする場合は、以下の点に注意するとよいでしょう。
エクスポート処理は UI コントロールではなく DataTable を基盤としているため、データ量が増えても保守性・拡張性を維持できます。
C# で DataGrid、DataGridView、GridView のデータを Excel にエクスポートする際、Microsoft Office Interop は必須ではありません。表示中のデータを DataTable に変換し、プログラムから Excel ファイルを生成することで、安定性と再利用性の高いエクスポート機能を実装できます。
UI とエクスポート処理を明確に分離し、書式設定にも柔軟に対応できるこの方法は、デスクトップアプリケーションおよび Web アプリケーションの実務的なレポート作成に適しています。ライブラリの評価や動作確認を行う場合は、一時ライセンスを申請することも可能です。
A1:表示中の DataGridView データを DataTable に変換し、Spire.XLS for .NET を使用してプログラムから Excel ファイルを生成すれば、Microsoft Excel に依存せずにエクスポートできます。
A2:はい。Spire.XLS を使用すれば、スタイルの適用、列幅の調整、数値書式の設定などを行い、読みやすく実用的な Excel レポートを作成できます。
A3:いいえ。Spire.XLS のようなライブラリを使用すれば、DataTable から直接 Excel ファイルを生成できるため、Excel をインストールする必要はありません。サーバー環境やクラウド環境にも適しています。

C# 開発では、DataSet はインメモリでデータを管理するためによく利用されます。通常はデータベースクエリの結果やシステム連携の処理結果として使われ、さまざまな場面で C# から DataSet を Excel に出力 するニーズがあります。例えば、レポートの生成、非エンジニアへのデータ共有、将来のためのアーカイブなどです。
本記事では、C# で DataSet を Excel にエクスポート する方法を Spire.XLS for .NET を使って解説します。Excel ファイルの作成、複数 DataTable のシート分割出力、書式設定、大量データの扱いまでステップごとに紹介します。
本記事の内容:
DataSet とは?
C# の DataSet は、構造化データをインメモリで保持するためのオブジェクトです。複数の DataTable を格納でき、行・列・リレーションを含むため、データベースに直接接続せずにリレーショナルデータを扱うのに便利です。
なぜ DataSet を Excel に出力するのか?
CSV やテキスト形式に比べ、Excel は リッチな書式、複数シート、高い可読性を提供します。
C# で DataSet を Excel に出力するには、Spire.XLS for .NET を利用します。NuGet でインストール可能です。
Install-Package Spire.XLS
必要な名前空間を追加します。
using Spire.Xls;
using System.Data;
using System.Drawing; // 色指定用
DataSet を Excel に出力する基本ステップは、データ準備と Excel への書き込みです。実際にはデータベースや API から取得することが多いですが、ここでは理解しやすいようサンプル DataSet を作成し、各 DataTable を個別シートに出力する例を示します。
以下は 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;
}
}
準備した 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 を同じシートに配置することも可能です。
出力結果プレビュー
以下は 3 つの DataTable がシートに出力された Excel のプレビューです。

データベースから直接 Excel に出力する例については 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();
書式設定のポイント
さらに詳細な設定は CellRange と CellStyle の API を参照してください。
書式適用後のプレビュー
青背景・白文字のヘッダー、罫線、日付や通貨のフォーマットが反映されています。

大量データを扱う場合は、パフォーマンスやメモリ使用量に注意が必要です。対策として:
エクスポートだけでなく、逆に 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 を利用できます。
はい。ds.Tables をループし、それぞれに InsertDataTable を呼び出してシートを作成します。
可能です。Workbook.LoadFromFile() でファイルを読み込み、対象シートに InsertDataTable を使って書き込みます。
はい。DataSet のデータ型がそのまま出力されます。さらに日付や通貨などの書式を後から設定することもできます。
シート分割、バッチ挿入、複雑な書式を減らすことでパフォーマンスを改善できます。

企業向けアプリケーション開発では、Excelは技術者と業務担当者の間で構造化データをやり取りするための橋渡しとしてよく利用されます。柔軟なフォーマット、共有の容易さ、そして利用者に馴染みがある点から、データベースのデータをExcelファイルにエクスポートする処理は、レポート作成、監査履歴の管理、データ移行、臨時分析などの場面で頻繁に行われます。
本記事では、Spire.XLS for .NET を使用して C#からデータベースのレコードを効率的にExcelファイルへエクスポートする方法を解説します。サンプルはSQL Serverデータベースを使用していますが、SQLite、MySQL、Oracleなどの他のリレーショナルデータベースにも、接続方法を変更するだけで同様の手順が適用できます。
目次
コーディングを始める前に、開発環境を整えてください。
.NETバージョン:.NET Framework、.NET Core、.NET 6、.NET 8に対応
IDE:Visual Studio(Community Edition以上)
データベース:本記事では SQL Server Express を使用(Windows認証を利用。SQL認証も可)
必要なライブラリ:
Install-Package Spire.XLSをインストール)サンプルデータベース
以下のSQLスクリプトをSQL Server Expressで実行すると、Employeesテーブルが作成され、テストデータが挿入されます。
CREATE TABLE Employees (
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(100) NOT NULL,
Department NVARCHAR(50) NOT NULL,
Position NVARCHAR(50),
HireDate DATE NOT NULL,
Salary DECIMAL(10, 2) NOT NULL,
IsFullTime BIT NOT NULL
);
INSERT INTO Employees (Name, Department, Position, HireDate, Salary, IsFullTime) VALUES
(N'佐藤太郎', N'人事部', N'人事マネージャー', '2018-05-01', 5500.00, 1),
(N'鈴木一郎', N'情報技術部', N'ソフトウェアエンジニア', '2020-09-15', 7200.50, 1),
(N'高橋花子', N'経理部', N'会計士', '2019-11-20', 6300.75, 0),
(N'田中美咲', N'マーケティング部', N'コンテンツスペシャリスト', '2021-02-10', 4800.00, 1);
MySQLやSQLiteを使用する場合は、SQL構文や接続文字列を変更するだけで、エクスポートの基本ロジックは変わりません。
SQL Server Expressの場合、SqlConnectionを使って接続します。
string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True;";
Integrated Security=TrueUser ID=yourUsername;Password=yourPassword;Encrypt=True;TrustServerCertificate=TrueSqlDataAdapterを利用してクエリを実行し、DataTableに結果を格納します。
using System.Data;
using Microsoft.Data.SqlClient;
DataTable dataTable = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string query = "SELECT * FROM Employees";
using (SqlDataAdapter adapter = new SqlDataAdapter(query, conn))
{
adapter.Fill(dataTable);
}
}
using Spire.Xls;
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("Employees");
// 1行1列目からDataTableのデータを挿入(列名も含む)
sheet.InsertDataTable(dataTable, true, 1, 1);
// Excel xlsx形式で保存
workbook.SaveToFile("Employees.xlsx", ExcelVersion.Version2013);
主なメソッド:
InsertDataTable(DataTable table, bool columnHeaders, int firstRow, int firstColumn)
columnHeaders=true:列名を1行目に出力firstRow / firstColumn:データの開始位置(1ベース)SaveToFile:.xlsx、.xls、.csvなどの形式で保存可能。ストリームへの保存も対応

エクスポート後、見やすくするために以下のように書式設定が可能です。
// ヘッダー行のスタイル
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 14;
sheet.Rows[0].Style.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Rows[0].Style.Color = System.Drawing.Color.LightGray;
// データ行のスタイル
for (int i = 1; i < sheet.Rows.Count(); i++)
{
var dataRow = sheet.Rows[i];
dataRow.Style.Font.Size = 12;
dataRow.Style.HorizontalAlignment = HorizontalAlignType.Left;
}
// 全体のフォント設定
sheet.AllocatedRange.Style.Font.FontName = "Microsoft YaHei";
// 枠線追加
sheet.AllocatedRange.BorderAround(LineStyleType.Thin, System.Drawing.Color.Black);
sheet.AllocatedRange.BorderInside(LineStyleType.Medium, System.Drawing.Color.Black);
// 列幅自動調整
sheet.AllocatedRange.AutoFitColumns();

数値フォーマットの詳細は:C#でExcelの数値フォーマットを設定する方法を参照してください。
DataTable以外にも、以下の方法でデータを取得できます。
Entity Frameworkの利用
var employees = dbContext.Employees.ToList();
その後、コレクションをDataTableに変換するか、1行ずつExcelに書き込みます。
ストアドプロシージャの呼び出し
SqlCommand cmd = new SqlCommand("GetEmployees", conn);
cmd.CommandType = CommandType.StoredProcedure;
SQLite / MySQL / Oracleの利用
接続タイプとドライバ(Microsoft.Data.Sqlite、MySql.Dataなど)を変更するだけで、他は同じロジックでエクスポート可能。
Excelからデータベースへのインポートが必要な場合は、Excelとデータベース間のデータインポート/エクスポートを参照してください。
| 問題 | 主な原因と解決策 |
|---|---|
| Excelファイルが空 | エクスポート前にDataTableに正しくデータが格納されているか確認 |
| ファイルが保存できない | 保存先のパスが存在し、書き込み権限があるか確認 |
| データベースに接続できない | サーバーが起動しているか、接続文字列が正しいか確認 |
| 特殊文字が文字化けする | データベースの列型をNVARCHARにし、ExcelではUnicode対応フォントを使用 |
| 認証エラー | Windows認証はIntegrated Security=True、SQL認証はユーザー名とパスワードを指定 |
Spire.XLS for .NETを使えば、C#からデータベースのデータを迅速にExcelにエクスポートできます。Microsoft Officeのインストールは不要で、大量データ、書式設定、複数形式のファイル出力にも対応しています。
この方法は、スケジュール実行、バックグラウンドサービス、Webアプリケーションなどで、自動的なデータエクスポートや配信に活用できます。
全機能を試したい場合は無料の一時ライセンス申請をご利用ください。小規模プロジェクトにはFree Spire.XLS for .NETでも基本機能を利用可能です。
A:SqlConnectionでデータをDataTableに読み込み、Spire.XLSのInsertDataTable()を呼び出します。
A:可能です。データベースドライバと接続文字列を変更してください。
A:不要です。Spire.XLSは独立したExcel処理ライブラリです。
A:できます。ワークシートを複数作成し、それぞれにデータを挿入してください。

C# で DataTable を Excel ファイルにエクスポートする 作業は、レポートの生成、ログの出力、システム間のデータ共有など、.NET 開発において非常によくあるニーズです。スタンドアロン型のライブラリを使用することで、複雑なセットアップや外部依存を必要とせず、DataTable のデータを迅速かつ柔軟に Excel ファイルに出力できます。
この記事では、Spire.XLS for .NET を使用して、C# で DataTable を Excel(.xlsx / .xls)にエクスポートし、書式設定を適用して見やすいファイルに仕上げる方法を段階的に解説します。
目次:
まずは、プロジェクトに Spire.XLS for .NET を追加してください。
NuGet でインストールするには以下のコマンドを使用します:
Install-Package Spire.XLS
Spire.XLS は、.NET Framework、.NET Core、.NET 6/7+、ASP.NET に対応しており、Microsoft Office のインストールは不要です。
以下の手順では、Spire.XLS を用いて DataTable を Excel ファイルに変換するプロセスを、データ準備から保存、Web 出力、書式設定まで順を追って紹介します。
まず、以下のようなカラムを持つ DataTable を用意します:
// データテーブルを作成
DataTable dt = new DataTable("社員情報");
// 列を追加
dt.Columns.Add("社員番号", typeof(int));
dt.Columns.Add("氏名", typeof(string));
dt.Columns.Add("部署", typeof(string));
dt.Columns.Add("入社日", typeof(DateTime));
dt.Columns.Add("給与", typeof(double));
dt.Columns.Add("正社員", typeof(bool));
dt.Columns.Add("賞与率", typeof(decimal));
// データ行を追加
dt.Rows.Add(1001, "佐藤 大輔", "人事部", new DateTime(2021, 5, 10), 55000.5, true, 0.05m);
dt.Rows.Add(1002, "鈴木 美咲", "技術部", new DateTime(2020, 11, 23), 72000.0, false, 0.03m);
dt.Rows.Add(1003, "高橋 健太", "経理部", new DateTime(2019, 8, 15), 63000.75, true, 0.07m);
dt.Rows.Add(1004, "田中 優子", "マーケティング部", new DateTime(2022, 3, 8), 48800.0, true, 0.06m);
ここではサンプルデータを使用していますが、実際には任意の DataTable をバインドできます。
次に、ワークブックを初期化し、DataTable をワークシートに挿入し、ファイルを保存します。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);
// A1 セルからデータを挿入
sheet.InsertDataTable(dt, true, 1, 1);
// XLSX 形式で保存(推奨)
workbook.SaveToFile(dt.TableName + ".xlsx", FileFormat.Version2016);
// 旧形式(.xls)で保存
workbook.SaveToFile(dt.TableName + ".xls", FileFormat.Version97to2003);
補足:
出力結果のイメージ:

Web アプリケーションでは、ファイルをディスクに保存せず直接ダウンロードさせたい場合があります。
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;
この MemoryStream を ASP.NET のコントローラで返すことで、ブラウザで Excel ファイルのダウンロードが開始されます。
関連記事:C# で Excel ファイルを作成・操作する方法
より見やすくプロフェッショナルな Excel ファイルを作るために、書式設定を施すことをおすすめします。
// ヘッダー行のスタイル
CellRange header = sheet.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.FontName = "Yu Gothic";
header.Style.Font.Size = 13;
header.Style.Color = Color.LightGray;
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thick;
// データ行のスタイル
for (int i = 1; i < sheet.Rows.Length; i++)
{
CellRange dataRow = sheet.Rows[i];
dataRow.Style.Font.FontName = "Yu Mincho";
dataRow.Style.Font.Size = 11;
}
sheet.Range.BorderInside(LineStyleType.Thin, Color.Black);
// 日付列の書式設定
CellRange dateColumn = sheet.Range[2, 4, sheet.Rows.Length + 1, 4];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";
// 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns();
主要プロパティとメソッド:
書式設定後のイメージ:

詳細な数値フォーマット設定はこちら:
Spire.XLS で Excel の数値フォーマットを C# で設定する方法
| 問題 | 解決方法 |
|---|---|
| ファイルが開けない/破損エラーが出る | ストリームの正しいクローズと拡張子の整合性を確認 |
| 特殊文字や日本語が文字化けする | UTF-8 エンコードの使用と対応フォントの設定を確認 |
| 列幅が狭すぎる | AutoFitColumns() で自動調整、または ColumnWidth を手動設定 |
C# で DataTable を Excel にエクスポートする作業は、Spire.XLS を使えば非常に簡単です。.xls / .xlsx 形式のファイルを生成でき、Office のインストールも不要。デスクトップ/Web アプリを問わず、実用的で見栄えのよい Excel 出力が実現できます。
すべての機能を試したい場合は、無料の一時ライセンス を申請してください。
Spire.XLS の InsertDataTable() を使用してワークシートに読み込み、SaveToFile() でファイルとして保存できます。
はい。Free Spire.XLS for .NET は、Microsoft Office をインストールせずに、Excel ファイルの作成と出力ができる無料ライブラリです。
可能です。コントローラで Workbook を生成し、MemoryStream として返すことで、ブラウザで直接ダウンロード可能です。
.xlsx は Office 2007 以降対応の新形式で、.xls は古い Excel 97〜2003 用の形式です(最大行数に制限あり)。
システム間でデータを効率的に統合することは、生産性を向上させ、情報に基づいた意思決定を行う上で非常に重要です。この分野で一般的なタスクの 1 つは、Excel とデータベース間でデータを転送することです。Excel ファイルをデータベースにインポートすることで、Excel にはない効率的なクエリ、トランザクションサポート、並行処理管理などの強力な機能を活用できます。一方、データベースのデータを Excel にエクスポートすることで、広く使用されている馴染みのある形式で、詳細な分析、レポート作成、および共有が可能になります。
この記事では、Spire.XLS for .NET と C# を使用して、Excel データをデータベースにインポートする方法と、データベースのデータを Excel ファイルにエクスポートする方法を解説します。
まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.XLS
Spire.XLS for .NET を使うと、Workbook.LoadFromFile() メソッドで Excel ファイルをロードし、CellRange.Value プロパティを利用してセルデータを取得できます。その後、System.Data.SQLite モジュールなどを使用してデータベース操作を行い、データをデータベースに書き込むことが可能です。
以下の手順とコードでは、SQLite を例にして、C# を使って Excel データをデータベースにインポートする方法を示します。
using System.Data.SQLite;
using Spire.Xls;
namespace ExcelToSQLite
{
class Program
{
static void Main(string[] args)
{
// Excelファイルのパス
string excelFilePath = "Sample.xlsx";
// SQLiteデータベースのパス
string sqliteFilePath = "output/Database.db";
// Excelファイルを開く
Workbook workbook = new Workbook();
workbook.LoadFromFile(excelFilePath);
// データベースファイルが存在しない場合、新規作成する
if (!File.Exists(sqliteFilePath))
{
SQLiteConnection.CreateFile(sqliteFilePath);
Console.WriteLine("新しいSQLiteデータベースファイルが作成されました: output.db");
}
// SQLite接続を作成
using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
{
connection.Open();
// 各ワークシートを繰り返し処理
foreach (Worksheet sheet in workbook.Worksheets)
{
string tableName = sheet.Name;
// 最初の行を列名として取得
var columns = sheet.Rows[0].CellList;
string createTableQuery = $"CREATE TABLE IF NOT EXISTS [{tableName}] (";
foreach (var column in columns)
{
createTableQuery += $"[{column.Value}] TEXT,";
}
createTableQuery = createTableQuery.TrimEnd(',') + ");";
// テーブルを作成
using (SQLiteCommand createTableCommand = new SQLiteCommand(createTableQuery, connection))
{
createTableCommand.ExecuteNonQuery();
}
// データを挿入
for (int i = 1; i < sheet.Rows.Length; i++) // 最初の行をスキップ
{
var row = sheet.Rows[i];
string insertQuery = $"INSERT INTO [{tableName}] VALUES (";
foreach (var cell in row.CellList)
{
insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // SQLインジェクション対策
}
insertQuery = insertQuery.TrimEnd(',') + ");";
using (SQLiteCommand insertCommand = new SQLiteCommand(insertQuery, connection))
{
insertCommand.ExecuteNonQuery();
}
}
}
connection.Close();
workbook.Dispose();
}
Console.WriteLine("Excelのデータは正常に新しいSQLiteデータベースに書き込まれました!");
}
}
}

SQLite データベースからデータを読み取り、Workbook オブジェクトを使用して新しい Excel ファイルを生成する方法を説明します。
using System.Data;
using System.Data.SQLite;
using Spire.Xls;
namespace SQLiteToExcel
{
class Program
{
static void Main(string[] args)
{
// SQLiteデータベースのパス
string sqliteFilePath = "Database.db";
// Excelファイルのパス
string excelFilePath = "output/DatabaseToExcel.xlsx";
// 新しいWorkbookインスタンスを作成
Workbook workbook = new Workbook();
// デフォルトのワークシートをクリア
workbook.Worksheets.Clear();
// SQLite接続を作成
using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
{
connection.Open();
// すべてのテーブル名を取得
DataTable tables = connection.GetSchema("Tables");
// 各テーブルを繰り返し処理
foreach (DataRow tableRow in tables.Rows)
{
string tableName = tableRow["TABLE_NAME"].ToString();
// 新しいワークシートを作成
Worksheet sheet = workbook.Worksheets.Add(tableName);
// テーブルデータを取得
string selectQuery = $"SELECT * FROM [{tableName}]";
using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection))
{
using (SQLiteDataReader reader = command.ExecuteReader())
{
// 列名を取得して、最初の行に書き込む
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[1, col + 1].Value = reader.GetName(col);
}
// ヘッダーのフォントスタイルを設定
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 12;
// データ行を挿入
int rowIndex = 2;
while (reader.Read())
{
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString();
// 列幅を自動調整
sheet.AutoFitColumn(col + 1);
}
// データ行のフォントスタイルを設定
sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
rowIndex++;
}
}
}
}
connection.Close();
}
// Excelファイルを保存
workbook.SaveToFile(excelFilePath);
workbook.Dispose();
Console.WriteLine("データは正常にExcelファイルにエクスポートされました!");
}
}
}

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

.NET 開発では、Excel データを扱うニーズが非常に多くあります。その際、Excel ファイルを DataTable に変換することで、データを表形式で管理でき、LINQ クエリの実行、UI コントロールへのバインド、データベースへの一括インポートなどが容易になります。
一方で、C# で Excel を DataTable に変換する処理 は必ずしもシンプルではありません。従来は OLEDB ドライバーに依存する方法や、複雑な OpenXML コードの記述が必要でしたが、どちらも外部依存や実装の煩雑さという問題を抱えています。そこで本記事では、Spire.XLS for .NET を用いて、より直感的かつ効率的に Excel データを C# で DataTable に取り込む方法 を紹介します。このライブラリを使えば、ワークシート全体や任意の範囲を直接 DataTable に変換することが可能です。
クイックナビゲーション
C# の DataTable は、メモリ上で構造化データを保持できる表形式のデータ構造です。主な利点は次のとおりです:
DataSet と比べると軽量で、特に単一のワークシートや範囲データを扱うのに最適です。
作業を始める前に、プロジェクトに Spire.XLS for .NET を導入します。NuGet を利用するのが最も簡単です:
Install-Package Spire.XLS
その後、必要な名前空間をコードに追加します:
using Spire.Xls;
using System.Data;
ここでは、Excel ファイルを読み込み、その内容を DataTable に変換する手順を解説します。Spire.XLS は OLEDB に依存せず、Microsoft Office のインストールも不要なため、デスクトップ・サーバーアプリケーションの両方で安定して利用できます。
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
このコードは、指定した Excel ファイルを読み込み Workbook オブジェクトを生成します。その後、ワークシートにアクセスできます。
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);
このコードでは、最初のワークシート全体を DataTable に変換します。
シート全体を DataTable に取り込みたい場合、例えば DataGridView へのバインドやデータベースへの一括挿入に適しています。
DataTable partialTable = sheet.ExportDataTable(sheet.Range["A1:C10"], true);
この例では、セル範囲 A1:C10 のデータだけを DataTable に変換します。 大規模ファイルを処理する際に、一部データのみを抽出する用途に便利です。
以下は、Excel ファイルの読み込みから DataTable への変換、コンソール出力までの流れを示した完全な例です:
using Spire.Xls;
using System.Data;
class Program
{
static void Main()
{
// Excel ファイルを読み込み
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
// 最初のワークシートを DataTable に変換
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);
// 行数を出力
Console.WriteLine("Rows imported: " + dataTable.Rows.Count);
// 列名を出力
foreach (DataColumn col in dataTable.Columns)
{
Console.Write(col.ColumnName + "\t");
}
Console.WriteLine();
// 全データを出力
foreach (DataRow row in dataTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
}
}
このコードは最初のワークシートを DataTable に変換し、結果をコンソールに出力します。
実行結果は次のようになります:

セル単位での読み取りが必要な場合は、こちらを参照してください:C#でExcelファイルを読み取る方法。
変更後の DataTable を Excel に書き戻す必要がある場合は、次のように実装できます:
Workbook wb = new Workbook();
Worksheet ws = wb.Worksheets[0];
// dataTable にデータが入っている前提
ws.InsertDataTable(dataTable, true, 1, 1);
wb.SaveToFile("Output.xlsx", ExcelVersion.Version2016);
このコードは A1 セルから DataTable を挿入し、新しいファイルとして保存します。 Excel ⇔ DataTable 間の双方向データ処理を実現できます。詳細は C#でDataTableをExcelにエクスポートする方法 を参照してください。
大きな Excel ファイルを扱う場合、次の最適化を推奨します:
Spire.XLS は .xls、.xlsx、.csv に対応し、多様なケースで活用可能です。
Excel ⇔ DataTable 処理の際に注意すべきポイント:
Excel データを DataTable に変換する処理は .NET 開発で非常に重要です。Spire.XLS for .NET を使えば、OLEDB や OpenXML の複雑さを避け、シンプルかつ効率的に実装できます。
といった操作を直感的に行えるため、C# アプリと Excel の連携がよりスムーズになります。
全機能を利用したい場合は 無料の一時ライセンス申請 を、軽量なプロジェクトには Free Spire.XLS for .NET をご利用ください。
Worksheet.ExportDataTable() メソッドを使うことで直接変換できます。
はい。Spire.XLS は OLEDB や Microsoft Office に依存しません。
はい。対象の Worksheet または Range を ExportDataTable() に渡してください。
可能です。Worksheet.InsertDataTable() を使用し、SaveToFile() で保存できます。