IRONSOFTWAREHOME
IRONXLの使用

C# DataGridView から Excel へのエクスポート: 書式設定の完全ガイド | IronXL

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

C# DataGridViewをフォーマット付きでExcelにエクスポートする完全ガイド: Image 1 - C# DataGridViewをフォーマット付きでExcelにエクスポート

DataGridView データをExcelファイルにエクスポートすることは、Windows Forms開発において最も一般的なタスクの1つです。 売上レポート、在庫記録、顧客リストなど、表形式のデータを表示するビジネスアプリケーションを構築する場合、ユーザーはボタンをクリックするだけで、共有したりさらに分析したりできる適切な形式のExcelファイルを受け取ることを期待します。 課題は、すべてのエンドユーザーのマシンにMicrosoft Excelがインストールされていることを前提とせず、メモリリークを起こしたり、静かに動作しなくなったりするCOM相互運用クリーンアップコードに悩まされることなく、これをクリーンに実現することです。 このガイドでは、プロジェクトのセットアップから高度なセルフォーマットまで、IronXLを使用してC#でDataGridViewをExcelにエクスポートする完全なプロセスを案内し、実用的なコードを提供します。

最初のステップ:
arrow pointer

DataGridViewのエクスポート用にWindowsフォームプロジェクトを設定するにはどうすればよいですか?

従来のDataGridViewデータエクスポートアプローチはMicrosoft Interopに依存しており、Add Referenceを開いてCOMタブに移動し、Microsoft Excel Object Libraryを選択し、メモリリークを避けるためにMarshal.ReleaseComObjectを呼び出す脆弱なコードを書く必要がありました。 このパターンはアプリケーションが実行されるすべてのマシンにMicrosoft Excelがインストールされていることが必要で、大量のデータセットでは遅く動作し、Officeライセンスがないデプロイ環境でCOMExceptionエラーをしばしば発生させます。 マイクロソフト自身のオフィスオートメーションに関するガイダンスでは、サーバーサイドおよび自動化シナリオにおいて、サードパーティ製ライブラリの使用を明確に推奨している。

IronXLは、それらの依存関係をすべて取り除きます。 これは、Microsoft OfficeやCOM登録なしで.odsファイルを読み書きする純粋な.NETライブラリです。 NuGet経由でインストールすれば、すぐにコードを書き始めることができます。

NuGet経由でIronXLをインストールする

Visual Studioで.NET 10をターゲットにした新しいWindows Formsアプリプロジェクトを作成します。フォーム表面にButtonを追加します。 ボタンにbtnExportと名付け、ラベルを"Export to Excel"にします。 次に、 NuGetパッケージ マネージャー コンソールを開き、以下を実行します。

PM > Install-Package IronXL.Excel

フォームファイルの先頭に、必要な名前空間を追加してください。

using IronXL;
using System.Data;

これら2つの名前空間は、Excelワークブックの読み書きに必要なすべてのIronXL型をカバーし、DataGridViewをエクスポートパイプラインに接続するために利用します。

DataGridViewコントロールにサンプルデータを読み込むにはどうすればよいですか?

エクスポートロジックを構築する前に、あなたのDataGridViewを代表的なデータで埋めます。 DataTableをバインドするのに適しています。 実際のアプリケーションでは、データベースにクエリを送ったりサービスを呼び出したりしますが、ここではハードコードされたDataTableで構造を明確に示します。 Microsoft Docs の DataGridView コントロールの概要には、コントロールがデータソースをどのように管理するかについての詳細な情報が記載されています。

DataTableをDataGridViewにバインドする

void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ProductID", typeof(int));
    dt.Columns.Add("ProductName", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock", typeof(int));

    dt.Rows.Add(1, "Laptop", 999.99m, 50);
    dt.Rows.Add(2, "Mouse", 29.99m, 200);
    dt.Rows.Add(3, "Keyboard", 79.99m, 150);
    dt.Rows.Add(4, "Monitor", 349.99m, 75);
    dt.Rows.Add(5, "Webcam", 89.99m, 120);

    dataGridView1.DataSource = dt;
}

このコードは、イベントハンドラのシグネチャにトップレベルのステートメントスタイルを使用しています。 DataTableには4つの型付きカラムがあります - 整数、文字列、小数、整数 - これをIronXLがExcelワークブックに書き込む際にも保持します。 型付き列が重要なのは、 IronXLが数値列をテキストではなく数値セルとして書き込むため、ユーザーがExcelで値を再フォーマットすることなく並べ替えや合計を行うことができるからです。

C# DataGridViewをフォーマット付きでExcelにエクスポートする完全ガイド: Image 2 - フォームのUI

DataTableカラム名からカラムヘッダー行を自動的にレンダリングします。 エクスポート時には、ヘッダー行をExcelファイルに保持したいので、エクスポートコードではヘッダーをデータ行とは別に処理する必要があります。次のセクションでは、まさにその点について説明します。

実用的な使用では、Entity Framework、Dapper、ADO.NET、または他のいかなるデータアクセスレイヤーからDataTableが来る場合でも同じパターンが適用されます。 DataGridViewバインディングはエクスポートコードから切り離されているので、エクスポートロジックに触れずにデータソースを交換できます。

DataGridViewのデータをExcelファイルにエクスポートするにはどうすればよいですか?

コアとなるエクスポート処理は、ボタンクリックハンドラー内で実行されます。 IronXLはLoadFromDataTableメソッドを提供し、カラムからセルへのマッピングを自動的に処理します。 最もクリーンなアプローチは、DataTableを抽出して直接渡します。 Open XML SDKは.xlsxフォーマットの基礎となっており、Microsoftによって文書化されており、IronXLのような純粋な.NETソリューションがプログラムによる生成においてInteropを上回る理由を確認できます。

ボタンクリックエクスポートハンドラー

void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable dt = new DataTable();

        foreach (DataGridViewColumn column in dataGridView1.Columns)
            dt.Columns.Add(column.HeaderText);

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.IsNewRow) continue;

            DataRow dataRow = dt.NewRow();
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
                dataRow[i] = row.Cells[i].Value ?? DBNull.Value;

            dt.Rows.Add(dataRow);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        worksheet.Name = "Product Data";

        worksheet.LoadFromDataTable(dt, true);

        string outputPath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            "DataGridViewExport.xlsx"
        );

        workbook.SaveAs(outputPath);
        MessageBox.Show($"Exported successfully to:\n{outputPath}", "Export Complete",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Export failed: {ex.Message}", "Error",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

C# DataGridViewをフォーマット付きでExcelにエクスポートする完全ガイド: Image 3 - 生成されたExcelファイル

DataTableと、最初のExcel行としてカラム名を書き込むようにIronXLに指示するブールフラグを受け取ります。これらがヘッダーセルとなります。 ワークブックはハードコードされたパスの代わりにEnvironment.SpecialFolder.Desktopを使用してユーザーのデスクトップに保存され、コードがユーザーアカウント間で移植性を持ちます。

nullチェック (?? DBNull.Value) prevents a NullReferenceException は、セルに値がない場合の例外処理です。 これは、オプション項目が空欄になる可能性がある実世界のデータにとって重要です。 IronXLはDBNullを"DBNull"という文字列の代わりに空のセルとして書き込むので、出力がクリーンに保たれます。

ExcelファイルからデータをDataGridViewに読み戻す方法についてはIronXL DataTableのドキュメントを参照してください。このドキュメントには、逆方向の操作と、ExcelからDataSetへの変換がマルチシートワークブックのために記載されています。

エクスポートしたExcelファイルにProfessional書式設定を適用するにはどうすればよいですか?

Excelファイル内のプレーンなデータも機能的ではありますが、太字の見出し、内容に合わせた列幅、行の背景色を交互に使用するなど、プロフェッショナルな形式で出力されたデータであれば、ユーザーが信頼できるツールとなるか、エクスポート後にすぐに手作業で再フォーマットされるツールとなるかの違いが生じます。 IronXLは、フォント、色、枠線、数値形式、配置などを網羅する豊富なセルスタイル設定APIを提供しています。 スプレッドシートスタイルのOOXML仕様は、 IronXLが書き出す基本フォーマットを定義しており、準拠するアプリケーションであればどのアプリケーションでも出力が正しく開くことを保証しています。

ヘッダーのスタイルと行の交互の色を適用する

void ExportWithFormatting(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    worksheet.Name = "Formatted Export";

    string[] headers = { "ID", "Product Name", "Price", "Stock" };

    // Write and style header row
    for (int col = 0; col < headers.Length; col++)
    {
        char colLetter = (char)('A' + col);
        string cellAddress = $"{colLetter}1";

        worksheet.SetCellValue(0, col, headers[col]);
        worksheet[cellAddress].Style.Font.Bold = true;
        worksheet[cellAddress].Style.Font.Height = 12;
        worksheet[cellAddress].Style.SetBackgroundColor("#4472C4");
        worksheet[cellAddress].Style.Font.Color = "#FFFFFF";
        worksheet[cellAddress].Style.HorizontalAlignment =
            IronXL.Styles.HorizontalAlignment.Center;
    }

    // Write data rows with alternating background colors
    int rowIndex = 1;
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.IsNewRow) continue;

        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            worksheet.SetCellValue(rowIndex, col,
                row.Cells[col].Value?.ToString() ?? string.Empty);
        }

        if (rowIndex % 2 == 0)
        {
            string rangeAddress = $"A{rowIndex + 1}:D{rowIndex + 1}";
            worksheet[rangeAddress].Style.SetBackgroundColor("#D6DCE5");
        }

        rowIndex++;
    }

    // Format the Price column as currency
    worksheet["C2:C100"].Style.Format = "$#,##0.00";

    // Auto-fit column widths
    worksheet.AutoSizeColumn(0);
    worksheet.AutoSizeColumn(1);
    worksheet.AutoSizeColumn(2);
    worksheet.AutoSizeColumn(3);

    string outputPath = Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "FormattedExport.xlsx"
    );

    workbook.SaveAs(outputPath);
    MessageBox.Show("Formatted export complete.", "Done",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}

C# DataGridViewをフォーマット付きでExcelにエクスポートする完全ガイド: Image 4 - フォーマットされた生成物のExcelファイル出力

書式設定コードは、いくつかの手法を適用しています。 ヘッダー行は白いテキスト、12ポイントのボールドフォント、中央揃えの青背景(#4472C4)を持ちます。これは標準的なビジネススプレッドシートスタイルです。 データ行は奇数行と偶数行で交互に白色と薄い灰色(#D6DCE5)に色分けされており、ユーザーが広いテーブルを横断しても位置を失わないようにします。 価格のカラムはExcelの組み込み通貨フォーマット($#,##0.00)を使用しているため、スプレッドシートではドル記号と小数点以下2桁で表示され、基礎となる数値データが変更されることはありません。 AutoSizeColumnは、コンテンツが切り捨てられないように、各カラムを最長の値にフィットさせます。

セル境界スタイリング条件付き書式設定、およびデータ検証ルールを使用してこのパターンをさらに拡張できます。 企業テンプレートに合わせる必要があるレポートの場合は、ページレイアウトと印刷範囲を設定することで、エクスポートされたファイルを調整なしで印刷できる状態にすることもできます。

大規模データセットの処理とパフォーマンスチューニングはどのように行っていますか?

多数の行にDataGridViewがバインドされた場合、セルごとの反復は目に見えて遅くなります。 2つの最適化により、パフォーマンスが大幅に向上しました。 まず、セルごとのLoadFromDataTableを使用します。 第二に、データソースがDataGridView行を通じて値を抽出する代わりにIronXLに直接渡します。

void ExportLargeDataset(DataTable sourceTable)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    // Direct DataTable load -- fastest path for large data
    worksheet.LoadFromDataTable(sourceTable, true);

    // Apply header styling after load
    int colCount = sourceTable.Columns.Count;
    for (int col = 0; col < colCount; col++)
    {
        char colLetter = (char)('A' + col);
        worksheet[$"{colLetter}1"].Style.Font.Bold = true;
        worksheet[$"{colLetter}1"].Style.SetBackgroundColor("#4472C4");
        worksheet[$"{colLetter}1"].Style.Font.Color = "#FFFFFF";
    }

    workbook.SaveAs(Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "LargeExport.xlsx"
    ));
}

10,000を超える行を持つデータセットの場合、バックグラウンドスレッドでエクスポートを実行するとUIの応答が維持されます。エクスポートロジックをInvokeを使用します。 IronXLは、異なるWorkBookインスタンスでの書き込み操作に対してスレッドセーフです。必要に応じて複数のエクスポートを同時に実行できます。

追加のパフォーマンスリソース:

DataGridViewのエクスポートに関して、 IronXLとMicrosoft Interopを比較するとどうなりますか?

多くの開発者は、Microsoft Excel Interopから開発を始めます。なぜなら、これはOfficeに同梱されており、追加のパッケージを必要としないからです。 しかし、相互運用性には、実運用環境ではすぐに顕在化する現実的なコストが伴う。 以下の表は、主な相違点をまとめたものです。

IronXLとMicrosoft ExcelのDataGridViewエクスポートにおける相互運用性の比較
能力IronXLMicrosoft Interop
Microsoft Excelがインストールされている必要があります。なしはい
サーバー/クラウド環境で動作しますはいいいえ(マイクロソフトによるサポート対象外)
COMオブジェクトのクリーンアップが必要ですなしはい(Marshal.ReleaseComObject)
大規模データセットにおけるパフォーマンス高速(純粋な.NET)遅い(COMマーシャリングのオーバーヘッド)
インストール方法NuGetCOMリファレンス/オフィスインストール
サポートされている.NETバージョン.NET 4.6.2 -- .NET 10.NET Frameworkのみ(制限あり)
XLSX、CSV、ODSに対応はいExcel経由のXLSX/XLS形式のみ

マイクロソフト自身のドキュメントでも、安定性やライセンス上の懸念を理由に、サーバーやサービスアカウントでOffice Interopを使用しないよう警告している。 IronXLは、Azure App Service、Windowsサービスホスト、Dockerコンテナ、およびExcelのようなデスクトップアプリケーションの実行が現実的でないその他のヘッドレス環境において、正しく動作します。

Interopをすでに使用しているチームが移行を希望する場合、IronXLのAPIは十分にマッピングされており、多くのWorkSheet操作が直接変換されます。 IronXL移行ガイドでは、一般的な相互運用パターンと、それに対応するIronXLの実装について解説しています。

次のステップは何ですか?

IronXLを使用したExcelへのDataGridViewデータのエクスポートは、NuGetパッケージのインストールと数行のコードで可能で、脆弱なCOMインタープリマップローチを、あらゆるデプロイ環境で動作するきれいでメンテナンス可能なソリューションに置き換えます。 ここで説明するテクニック(基本的なエクスポート、フォーマット済み出力、大規模データセットの最適化、比較表)を使えば、この機能をWindows Formsアプリケーションに組み込んで出荷するために必要なすべてが揃います。

ここから、関連する以下の機能をご覧ください。

プロジェクトでIronXLの全機能をテストするには、無料のトライアルを開始してください。また、本番環境への導入準備が整ったら、 IronXLのライセンスオプションをご確認ください。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。