チュートリアル

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

チュートリアル»xlsnetdataimportexport

Displaying items by tag: xlsnetdataimportexport

C# で Interop を使わずに List を Excel にエクスポートするチュートリアル

C# を使用してリストデータを Excel にエクスポートすることは、現代の .NET アプリケーションにおいて一般的な要件です。デスクトップアプリケーション、Web システム、バックグラウンドサービスのいずれを開発する場合でも、開発者はメモリ上のコレクション、特に List<T> を、ユーザーがダウンロード・分析・共有できる構造化された Excel ファイルに変換する必要があります。

本チュートリアルでは、Spire.XLS for .NET を使用し、Excel Interop を使わずに C# でオブジェクトのリストを Excel にエクスポートする方法を解説します。本ソリューションは .NET Core および最新の .NET バージョンに完全対応しており、一般的な業務データモデルで利用でき、Microsoft Excel のインストールも不要です。

目次

なぜ Excel Interop を使用せずに C# で List を Excel にエクスポートするのか

リストデータを Excel にエクスポートすることは、構造化された情報を、広く利用されている分かりやすい形式で提供する有効な方法です。実際の業務では、次のような場面でよく利用されます。

  • 業務レポートや財務レポートの作成
  • Web アプリケーションで検索結果をダウンロード可能にする
  • 非技術系の関係者とデータを共有する
  • Excel を使用したオフライン分析や監査

従来、多くの開発者は Excel ファイルの生成に Excel Interop を使用してきました。しかし、Interop には以下のような制約があります。

  • 実行環境に Microsoft Excel がインストールされている必要がある
  • サーバーサイドや ASP.NET Core アプリケーションでの利用は推奨されない
  • 単純なエクスポート処理に対して依存関係が重い

このため、近年の .NET アプリケーションでは、Interop を使用しない Excel エクスポートが主流となっています。Spire.XLS for .NET のようなライブラリを使用すれば、Microsoft Office に依存することなく、List<T> を直接 Excel ファイルとして安全かつ確実に出力できます。

C# でオブジェクトの List を Excel にエクスポートする

実際のアプリケーションでは、単純な値ではなく、業務オブジェクトのリストとしてデータを扱うことがほとんどです。本セクションでは、現実的な帳票出力シナリオを想定し、再利用可能で Interop に依存しない方法で List<T> を Excel にエクスポートする手順を説明します。

事前準備

リストを Excel にエクスポートする前に、プロジェクトに Spire.XLS for .NET をインストールしてください。

NuGet から次のコマンドでインストールできます。

Install-Package Spire.XLS

インストール後、追加の設定なしで List<T> の Excel 出力を開始できます。

エクスポート処理の流れ

オブジェクトのリストを Excel にエクスポートする基本的な流れは、次のとおりです。

  1. 業務データを List<T> として準備する
  2. Excel のワークブックとワークシートを作成する
  3. オブジェクトのプロパティから列見出しを動的に生成する
  4. リストデータを行として書き込む
  5. Excel ファイルを保存する

以下のサンプルでは、これらの処理をすべて含めた実装例を示します。

完全なサンプル:List を Excel にエクスポート

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 ファイルのプレビューは次のとおりです。

Spire.XLS for .NET を使用した C# の List から Excel への出力例

技術的なポイントと実装の補足

  • Workbook を生成し、workbook.Worksheets[0] で最初のワークシートを取得します
  • リフレクション(Type.GetProperties)を使用して列見出しを動的に生成し、ハードコードを回避します
  • 見出し行は Range.Text を使用して、1 行目に文字列として出力します
  • 各オブジェクトの値は Range.Value2 を使用し、Excel 本来のデータ型を保持したまま書き込みます
  • Workbook.SaveToFile を使用してExcelファイルを生成します

この実装パターンは、再利用可能なエクスポート処理や帳票生成機能の構築に適しています。

なお、List<T> ではなく DataTable としてデータを取得する場合も、Spire.XLS for .NET には効率的なエクスポート手段が用意されています。詳細は C# で DataTable を Excel にエクスポートする方法 を参照してください。

エクスポートした 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 シートのプレビューは以下のとおりです。

Spire.XLS for .NET を使用した C# の Excel 書式設定例

書式を適用することで、生成された Excel ファイルはより業務向けで、そのまま利用可能な品質になります。

スタイル設定、セル結合、条件付き書式、数式など、より高度な操作については、C# で Excel ワークシートを作成・書式設定する方法 を参照してください。

.NET Core およびサーバーサイドでの互換性

Spire.XLS for .NET は .NET Core および最新の .NET バージョンに完全対応しており、以下のような環境で利用できます。

  • ASP.NET Core Web アプリケーション
  • Web API
  • クラウド環境やコンテナ環境
  • バックグラウンドサービスや定期実行ジョブ

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 日間の一時ライセンス を利用できます。


よくある質問

Q1. 大量の List データも効率的にエクスポートできますか?

はい。Spire.XLS for .NET はサーバーサイド利用を前提として設計されており、大規模な List<T> データも効率的に処理できます。さらに大量の場合は、バッチ処理や分割出力によってパフォーマンスを向上させることが可能です。

Q2. Microsoft Excel のインストールは必要ですか?

いいえ。Spire.XLS for .NET は Microsoft Excel に依存せず、Excel Interop も使用しないため、サーバー環境やクラウド環境でも利用できます。

Q3. 列見出しや表示形式をカスタマイズできますか?

はい。列見出しは手動でカスタマイズでき、日付・数値・スタイルなどの書式もプログラムから指定できます。高度な書式設定については、C# Excel 書式設定ガイド を参照してください。

Q4. ASP.NET Core や Web API でも利用できますか?

はい。本エクスポート処理は ASP.NET Core、Web API、バックグラウンドサービスなど、あらゆるサーバーサイドの .NET 環境で問題なく動作します。

Tagged under

C# による DataGrid / GridView の Excel エクスポート

C# アプリケーションにおいて、UI コントロールに表示されている表形式データを Excel にエクスポートすることは、非常に一般的な要件です。WinForms や ASP.NET プロジェクトでは、DataGridDataGridViewGridView に現在表示されているデータを、レポート作成や共有、後続処理のために Excel ファイルとして出力したいケースが多くあります。

実際の業務では、エクスポートされた Excel ファイルは単なる生データとして使われることはほとんどありません。読みやすいレイアウト、表ヘッダーの書式、適切な列幅、数値や日付の表示形式などが求められるのが一般的です。

本記事では、Spire.XLS for .NET を使用し、Microsoft Office Interop を使用せずに、C# で DataGridView および GridView / DataGrid のデータを Excel にエクスポートする方法を解説します。表示中のデータを正確に出力しつつ、実装をシンプルに保ち、Excel 側で一貫した書式設定を行うことに重点を置いています。

目次


C# でプログラムから Excel をエクスポートするメリット

Microsoft Office Interop を使用して Excel ファイルを生成することも可能ですが、DataGrid、DataGridView、GridView からデータを出力する場合、プログラムによるエクスポートには以下のような明確な利点があります。

  • 実行環境に Microsoft Excel をインストールする必要がない
  • サーバー環境やクラウド環境に適している
  • 大量データを扱っても高いパフォーマンスを維持できる
  • 自動処理やバックグラウンドでのエクスポートに向いている

コードベースで直接 Excel を生成することで、安定性・保守性・拡張性に優れたエクスポート機能を、さまざまなアプリケーションで一貫して提供できます。


基本コンセプト:表示データを DataTable 経由でエクスポートする

DataGrid、DataGridView、GridView はいずれも UI コントロールですが、本質的には行と列で構成された構造化データを表示するためのものです。これらのコントロールを直接エクスポートしようとすると、UI に依存したロジックになりやすく、保守性が低下します。

そこで推奨されるのが、次のようなワークフローです。

画面表示データ → DataTable → Excel ファイル

この設計では、

  • DataTable がユーザーに表示されている内容を正確に表現する
  • Excel 出力処理を UI レイヤーから分離できる
  • WinForms と ASP.NET の両方で同じ実装を利用できる
  • 書式やレイアウトは Excel 側で一元管理できる

DataTable は最終的な出力先ではなく、中間データ構造として機能します。Spire.XLS for .NET を使用すれば、DataTable を書式付きの Excel ファイルとして簡単にエクスポートできます。


手順 1:表示中のデータを DataTable に変換する

最初のステップでは、UI コントロールに 現在表示されているデータ を取得し、DataTable に変換します。ここでは元のデータソースを再構築するのではなく、表示内容そのものを取得することが重要です。

DataGridView(WinForms)から表示データを取得する

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 にエクスポートできます。

GridView(ASP.NET)から表示データを取得する

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 にエクスポートする方法


手順 2:C# で DataTable を Excel にエクスポートする

表示データを DataTable に変換できたら、あとは UI に依存しない形で Excel ファイルを生成するだけです。

ここでは Spire.XLS for .NET を使用し、Microsoft Excel をインストールせずに Excel ファイルを作成します。

Spire.XLS for .NET のインストール

NuGet を使用してインストールできます。

Install-Package Spire.XLS

または、Spire.XLS for .NET をダウンロードして、手動でプロジェクトに追加することも可能です。

基本的な Excel エクスポート例

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 ファイルは以下のようになります。

C# による DataGridView の基本的な Excel 出力

このエクスポート処理は、DataGrid、DataGridView、GridView のいずれにもそのまま再利用できます。


手順 3:エクスポートした Excel ファイルに書式を適用する

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 ファイルの例は以下のとおりです。

書式付きで DataGridView を Excel に出力(C#)

これらの書式設定は、レポート要件に応じて自由に組み合わせたり拡張したりできますが、データ抽出ロジックを変更する必要はありません。

Spire.XLS for .NET は、条件付き書式やグラフなど、さらに高度な Excel 機能にも対応しています。詳しくは、C# で Excel ファイルを作成する方法をご参照ください。


パフォーマンスおよび実運用上の注意点

大量の DataGrid または GridView データをエクスポートする場合は、以下の点に注意するとよいでしょう。

  • デスクトップアプリでは非同期処理でエクスポートを実行する
  • Excel 生成中に UI スレッドをブロックしない
  • 必要な列、または表示中の列のみをエクスポートする
  • ASP.NET アプリケーションではサーバー側で Excel ファイルを生成する

エクスポート処理は UI コントロールではなく DataTable を基盤としているため、データ量が増えても保守性・拡張性を維持できます。


まとめ

C# で DataGrid、DataGridView、GridView のデータを Excel にエクスポートする際、Microsoft Office Interop は必須ではありません。表示中のデータを DataTable に変換し、プログラムから Excel ファイルを生成することで、安定性と再利用性の高いエクスポート機能を実装できます。

UI とエクスポート処理を明確に分離し、書式設定にも柔軟に対応できるこの方法は、デスクトップアプリケーションおよび Web アプリケーションの実務的なレポート作成に適しています。ライブラリの評価や動作確認を行う場合は、一時ライセンスを申請することも可能です。


FAQ

Q1:C# で DataGridView のデータを Excel にエクスポートするにはどうすればよいですか?

A1:表示中の DataGridView データを DataTable に変換し、Spire.XLS for .NET を使用してプログラムから Excel ファイルを生成すれば、Microsoft Excel に依存せずにエクスポートできます。

Q2:GridView を Excel にエクスポートする際に書式を設定できますか?

A2:はい。Spire.XLS を使用すれば、スタイルの適用、列幅の調整、数値書式の設定などを行い、読みやすく実用的な Excel レポートを作成できます。

Q3:C# で DataGrid や GridView を Excel にエクスポートするには Microsoft Excel のインストールが必要ですか?

A3:いいえ。Spire.XLS のようなライブラリを使用すれば、DataTable から直接 Excel ファイルを生成できるため、Excel をインストールする必要はありません。サーバー環境やクラウド環境にも適しています。

Tagged under

C# DataSet を Excel にエクスポートするイメージ(オフィスシーン)

C# 開発では、DataSet はインメモリでデータを管理するためによく利用されます。通常はデータベースクエリの結果やシステム連携の処理結果として使われ、さまざまな場面で C# から DataSet を Excel に出力 するニーズがあります。例えば、レポートの生成、非エンジニアへのデータ共有、将来のためのアーカイブなどです。

本記事では、C# で DataSet を Excel にエクスポート する方法を Spire.XLS for .NET を使って解説します。Excel ファイルの作成、複数 DataTable のシート分割出力、書式設定、大量データの扱いまでステップごとに紹介します。

本記事の内容:

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 のプレビューです。

Employees・Departments・Projects シートを含む 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() — 内容に合わせて行・列を自動調整。

さらに詳細な設定は CellRangeCellStyle の API を参照してください。

書式適用後のプレビュー

青背景・白文字のヘッダー、罫線、日付や通貨のフォーマットが反映されています。

書式適用済みの Excel シートプレビュー

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 を扱うにはどうすればよいですか?

シート分割、バッチ挿入、複雑な書式を減らすことでパフォーマンスを改善できます。

Tagged under

C#でデータベースからExcelにエクスポートする例

企業向けアプリケーション開発では、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認証も可)

  • 必要なライブラリ

サンプルデータベース

以下の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構文や接続文字列を変更するだけで、エクスポートの基本ロジックは変わりません。

C#でデータベースデータをExcelにエクスポートする手順

1. データベース接続を確立する

SQL Server Expressの場合、SqlConnectionを使って接続します。

string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True;";
  • Windows認証Integrated Security=True
  • SQL認証User ID=yourUsername;Password=yourPassword;Encrypt=True;TrustServerCertificate=True

2. DataTableにデータを読み込む

SqlDataAdapterを利用してクエリを実行し、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);
    }
}

3. Spire.XLSでExcelにエクスポートする

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などの形式で保存可能。ストリームへの保存も対応

SQLデータをExcelにエクスポート

Excelの書式を整える(任意だが推奨)

エクスポート後、見やすくするために以下のように書式設定が可能です。

// ヘッダー行のスタイル
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();

書式設定後のExcel

数値フォーマットの詳細は: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.SqliteMySql.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でも基本機能を利用可能です。

FAQ

Q:C#でSQLデータをExcelにエクスポートする方法は?

A:SqlConnectionでデータをDataTableに読み込み、Spire.XLSのInsertDataTable()を呼び出します。

Q:SQLiteやMySQLのデータもエクスポートできますか?

A:可能です。データベースドライバと接続文字列を変更してください。

Q:Excelのインストールは必要ですか?

A:不要です。Spire.XLSは独立したExcel処理ライブラリです。

Q:複数のテーブルを1つのExcelに出力できますか?

A:できます。ワークシートを複数作成し、それぞれにデータを挿入してください。

Tagged under

Spire.XLS を使用して DataTable を Excel にエクスポートする例

C# で DataTable を Excel ファイルにエクスポートする 作業は、レポートの生成、ログの出力、システム間のデータ共有など、.NET 開発において非常によくあるニーズです。スタンドアロン型のライブラリを使用することで、複雑なセットアップや外部依存を必要とせず、DataTable のデータを迅速かつ柔軟に Excel ファイルに出力できます。

この記事では、Spire.XLS for .NET を使用して、C# で DataTable を Excel(.xlsx / .xls)にエクスポートし、書式設定を適用して見やすいファイルに仕上げる方法を段階的に解説します。

目次:

Spire.XLS のインストールと設定

まずは、プロジェクトに Spire.XLS for .NET を追加してください。

NuGet でインストールするには以下のコマンドを使用します:

Install-Package Spire.XLS

Spire.XLS は、.NET Framework、.NET Core、.NET 6/7+、ASP.NET に対応しており、Microsoft Office のインストールは不要です。

手順解説:C# で DataTable を Excel に出力する

以下の手順では、Spire.XLS を用いて DataTable を Excel ファイルに変換するプロセスを、データ準備から保存、Web 出力、書式設定まで順を追って紹介します。

ステップ1:サンプル DataTable を作成

まず、以下のようなカラムを持つ 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 をバインドできます。

ステップ2:DataTable をインポートして Excel ファイルとして保存

次に、ワークブックを初期化し、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);

補足:

  • Workbook は Excel 全体のコンテナです。
  • InsertDataTable() は DataTable の内容をセルにマッピングします。
  • SaveToFile() で Excel ファイルとして出力できます。

出力結果のイメージ:

DataTable をエクスポートした Excel 例

ASP.NET で Excel をストリームとして出力

Web アプリケーションでは、ファイルをディスクに保存せず直接ダウンロードさせたい場合があります。

MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;

この MemoryStream を ASP.NET のコントローラで返すことで、ブラウザで Excel ファイルのダウンロードが開始されます。

関連記事C# で Excel ファイルを作成・操作する方法

出力された 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();

主要プロパティとメソッド:

  • Style: フォントや色、罫線、数値形式などを設定
  • AutoFitColumns(): 列幅を自動調整
  • NumberFormat: 日付や数値の表示形式を設定
  • BorderInside(): 表の読みやすさを高める内部罫線を追加

書式設定後のイメージ:

スタイル付きで DataTable を Excel にエクスポート

詳細な数値フォーマット設定はこちら:
Spire.XLS で Excel の数値フォーマットを C# で設定する方法

よくある問題と対処法

問題 解決方法
ファイルが開けない/破損エラーが出る ストリームの正しいクローズと拡張子の整合性を確認
特殊文字や日本語が文字化けする UTF-8 エンコードの使用と対応フォントの設定を確認
列幅が狭すぎる AutoFitColumns() で自動調整、または ColumnWidth を手動設定

まとめ

C# で DataTable を Excel にエクスポートする作業は、Spire.XLS を使えば非常に簡単です。.xls / .xlsx 形式のファイルを生成でき、Office のインストールも不要。デスクトップ/Web アプリを問わず、実用的で見栄えのよい Excel 出力が実現できます。

すべての機能を試したい場合は、無料の一時ライセンス を申請してください。

よくある質問(FAQ)

Q1:C# で DataTable を Excel に変換するには?

Spire.XLS の InsertDataTable() を使用してワークシートに読み込み、SaveToFile() でファイルとして保存できます。

Q2:無料で使える Excel エクスポートライブラリはありますか?

はい。Free Spire.XLS for .NET は、Microsoft Office をインストールせずに、Excel ファイルの作成と出力ができる無料ライブラリです。

Q3:ASP.NET で Excel を出力できますか?

可能です。コントローラで Workbook を生成し、MemoryStream として返すことで、ブラウザで直接ダウンロード可能です。

Q4:.xlsx と .xls の違いは?

.xlsx は Office 2007 以降対応の新形式で、.xls は古い Excel 97〜2003 用の形式です(最大行数に制限あり)。

Tagged under

システム間でデータを効率的に統合することは、生産性を向上させ、情報に基づいた意思決定を行う上で非常に重要です。この分野で一般的なタスクの 1 つは、Excel とデータベース間でデータを転送することです。Excel ファイルをデータベースにインポートすることで、Excel にはない効率的なクエリ、トランザクションサポート、並行処理管理などの強力な機能を活用できます。一方、データベースのデータを Excel にエクスポートすることで、広く使用されている馴染みのある形式で、詳細な分析、レポート作成、および共有が可能になります。

この記事では、Spire.XLS for .NET と C# を使用して、Excel データをデータベースにインポートする方法と、データベースのデータを Excel ファイルにエクスポートする方法を解説します。

Spire.XLS for .NET をインストールします

まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.XLS

Excel データをデータベースにインポートする

Spire.XLS for .NET を使うと、Workbook.LoadFromFile() メソッドで Excel ファイルをロードし、CellRange.Value プロパティを利用してセルデータを取得できます。その後、System.Data.SQLite モジュールなどを使用してデータベース操作を行い、データをデータベースに書き込むことが可能です。

以下の手順とコードでは、SQLite を例にして、C# を使って Excel データをデータベースにインポートする方法を示します。

  • Excel ファイルと出力先データベースのパスを定義します。
  • Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() で Excel ファイルを読み込みます。
  • SQLite データベースを作成するか、既存のデータベースに接続します。
  • ワークブック内の各ワークシートを繰り返し処理し、各ワークシートごとにデータベーステーブルを作成します。
  • ワークシートの最初の行を取得し、列名として使用します。
  • 残りの行とセルを繰り返し処理して、データをデータベースに挿入します。
  • C#
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データベースに書き込まれました!");
        }
    }
}

Excel データをデータベースにインポートする

データベースのデータを Excel ファイルにエクスポートする

SQLite データベースからデータを読み取り、Workbook オブジェクトを使用して新しい Excel ファイルを生成する方法を説明します。

  • データベースと出力 Excel ファイルのパスを定義します。
  • Workbook インスタンスを作成し、デフォルトのワークシートを削除します。
  • データベースに接続し、すべてのテーブル名を取得します。
  • 各テーブルごとにワークシートを作成し、テーブル名をシート名として設定します。
  • テーブルの列名を取得し、ワークシートの最初の行に書き込みます。
  • テーブル内のデータを順次ワークシートに書き込みます。
  • C#
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ファイルにエクスポートされました!");
        }
    }
}

データベースのデータを Excel ファイルにエクスポートする

一時ライセンスを申請する

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

Tagged under

C# Excel を DataTable に変換する例

.NET 開発では、Excel データを扱うニーズが非常に多くあります。その際、Excel ファイルを DataTable に変換することで、データを表形式で管理でき、LINQ クエリの実行、UI コントロールへのバインド、データベースへの一括インポートなどが容易になります。

一方で、C# で Excel を DataTable に変換する処理 は必ずしもシンプルではありません。従来は OLEDB ドライバーに依存する方法や、複雑な OpenXML コードの記述が必要でしたが、どちらも外部依存や実装の煩雑さという問題を抱えています。そこで本記事では、Spire.XLS for .NET を用いて、より直感的かつ効率的に Excel データを C# で DataTable に取り込む方法 を紹介します。このライブラリを使えば、ワークシート全体や任意の範囲を直接 DataTable に変換することが可能です。

クイックナビゲーション

DataTableとは?その利点

C# の DataTable は、メモリ上で構造化データを保持できる表形式のデータ構造です。主な利点は次のとおりです:

  • Excel データを表形式で保持できる。
  • フィルタリング・ソート・LINQ クエリに対応。
  • DataGridView などの UI コントロールに直接バインド可能。
  • データベースへの一括挿入に適している。

DataSet と比べると軽量で、特に単一のワークシートや範囲データを扱うのに最適です。

環境準備

作業を始める前に、プロジェクトに Spire.XLS for .NET を導入します。NuGet を利用するのが最も簡単です:

Install-Package Spire.XLS

その後、必要な名前空間をコードに追加します:

using Spire.Xls;
using System.Data;

C#でExcelをDataTableに変換する方法

ここでは、Excel ファイルを読み込み、その内容を DataTable に変換する手順を解説します。Spire.XLS は OLEDB に依存せず、Microsoft Office のインストールも不要なため、デスクトップ・サーバーアプリケーションの両方で安定して利用できます。

Excelファイルを読み込む

Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");

このコードは、指定した Excel ファイルを読み込み Workbook オブジェクトを生成します。その後、ワークシートにアクセスできます。

ワークシート全体をDataTableに変換

Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);

このコードでは、最初のワークシート全体を DataTable に変換します。

  • sheet.AllocatedRange は使用されているセル範囲を取得。
  • true を指定すると、最初の行を列名として扱います。

シート全体を DataTable に取り込みたい場合、例えば DataGridView へのバインドやデータベースへの一括挿入に適しています。

指定範囲をDataTableに変換

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 に変換した結果

セル単位での読み取りが必要な場合は、こちらを参照してください:C#でExcelファイルを読み取る方法

応用:DataTableを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処理とパフォーマンス最適化

大きな Excel ファイルを扱う場合、次の最適化を推奨します:

  • 必要なワークシートだけ読み込む(全シートを読み込まない)。
  • 指定範囲のみをエクスポートし、無駄なデータを避ける。
  • LoadFromStream を使い、ファイルロックを回避。
  • 非常に大きな DataTable は逐次処理してメモリ使用量を抑える。

Spire.XLS は .xls.xlsx.csv に対応し、多様なケースで活用可能です。

ベストプラクティス

Excel ⇔ DataTable 処理の際に注意すべきポイント:

  • データ型の変換:Excel は既定で文字列として保存されるため、必要に応じて intdecimalDateTime に変換する。
  • 空セル処理:欠損値を考慮し、実行時エラーを回避する。
  • データベース連携:DataTable を DB に一括挿入する前に、必ず検証・整形を行う。

まとめ

Excel データを DataTable に変換する処理は .NET 開発で非常に重要です。Spire.XLS for .NET を使えば、OLEDB や OpenXML の複雑さを避け、シンプルかつ効率的に実装できます。

  • ワークシート全体の変換
  • 指定範囲の抽出
  • DataTable から Excel への書き戻し

といった操作を直感的に行えるため、C# アプリと Excel の連携がよりスムーズになります。

全機能を利用したい場合は 無料の一時ライセンス申請 を、軽量なプロジェクトには Free Spire.XLS for .NET をご利用ください。


FAQ

Q: C#でExcelをDataTableにインポートする方法は?

Worksheet.ExportDataTable() メソッドを使うことで直接変換できます。

Q: OLEDBを使わずにExcelをDataTableに読み込めますか?

はい。Spire.XLS は OLEDB や Microsoft Office に依存しません。

Q: 特定のワークシートや範囲だけをDataTableに変換できますか?

はい。対象の Worksheet または RangeExportDataTable() に渡してください。

Q: DataTableをExcelにエクスポートできますか?

可能です。Worksheet.InsertDataTable() を使用し、SaveToFile() で保存できます。

Tagged under