IRONSOFTWAREHOME
IRONXLの使用

C# 列ヘッダー付きの DataGridView を Excel にエクスポートする

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

どうやってDataGridViewを列ヘッダーと共にExcelにエクスポートしますか?

Windows Forms DataGridView コントロールから Excel 形式にデータをエクスポートすることはよくある要件ですが、開発者はしばしば厄介な問題に直面します。それは、エクスポートされたファイルに列ヘッダーが欠落していることです。 DataGridViewを列ヘッダー付きでExcelにエクスポートする必要がある場合、ソリューションはすべてのデータと書式設定を確実に保持する必要があります。 Microsoft Office Interop を使用した従来のアプローチは、動作が遅く、不安定で、コードを実行するすべてのマシンに MS Excel をインストールする必要があるという問題がある。

IronXLはこの問題をきれいに解決します。 これは、Officeに依存することなくExcelファイルの読み込み、作成、書き込みを行う.NET Excelライブラリです。 このチュートリアルでは、列ヘッダー、データ型、NULLセル、そしてユーザーフレンドリーなファイル保存をわずか数行のコードで処理する、完全なエクスポートソリューションを解説します。

最終的には、すべての列ヘッダーを保持したままDataGridViewをXLSXファイルにエクスポートする、動作するWindowsフォームのボタンハンドラーが完成します。

始める前に必要なもの

コードを記述する前に、以下の点が満たされていることを確認してください。

  • Visual Studio 2022以降(どのエディションでも可)
  • .NET 10 SDK がインストールされています
  • .NET 10 をターゲットとする Windows フォーム アプリケーション プロジェクト
  • IronXLをインストールするためのNuGetアクセス

以下の例では、トップレベルステートメントと最新 for .NET 10プロジェクト構造を全体を通して使用しています。

.NETプロジェクトにライブラリをインストールするにはどうすればよいですか?

Visual Studio でNuGetパッケージ マネージャー コンソールを開き、次のいずれかのコマンドを実行します。 このパッケージはNuGetギャラリーに掲載されており、 .NET Standard 2.0以降を対象としているため、最新 for .NETプロジェクトであればどれでも動作します。

PM > Install-Package IronXL.Excel

dotnet add package IronXL.Excel

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

using IronXL;
using System;
using System.Data;
using System.Windows.Forms;

これらのインポートにより、IronXLのExcel機能、DataTable操作、およびエクスポート処理に必要なWindowsフォームコントロールにアクセスできるようになります。

サンプルデータを使用してDataGridViewを設定するにはどうすればよいですか?

まず、Visual StudioでWindowsフォームアプリケーションを作成します。 デザイナーを使用して、メインフォームにbtnExportという名前のボタンを追加します。 次に、フォーム読み込み時にグリッドにデータを入力します。

using System;
using System.Data;
using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();

        // Define columns -- these names become Excel headers
        dt.Columns.Add("Product ID", typeof(int));
        dt.Columns.Add("Product Name", typeof(string));
        dt.Columns.Add("Price", typeof(decimal));
        dt.Columns.Add("Stock Quantity", typeof(int));

        // Add sample rows
        dt.Rows.Add(1001, "Laptop", 999.99m, 15);
        dt.Rows.Add(1002, "Mouse", 29.99m, 50);
        dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
        dt.Rows.Add(1004, "Monitor", 299.99m, 12);
        dt.Rows.Add(1005, "Headphones", 89.99m, 25);

        // Bind data to the grid
        dataGridView1.DataSource = dt;
    }
}

dt.Columns.Add(...)呼び出しで定義された列名は、エクスポートされたExcelファイルのヘッダ行になります。ここでは、任意のデータソースを置き換えることができます。それは、データベースクエリの結果、CSVインポート、またはDataTableとして保存されているAPI応答でも構いません。後で示されるエクスポートコードと同様に機能します。 DataTableアプローチは特に便利です。なぜなら、DataGridViewはIBindingListを受け入れるため、すべてのバインディングシナリオ間で同じエクスポートコードが修正なしに一般化されます。

あなたのDataGridViewがSqlDataAdapterを使用してデータベースからポピュレートされている場合、DataTableはすでに型指定された列を含んでいます。 それらの型付きの値をToString()を呼び出す代わりに、それはExcel出力で数値列を数値のまま維持します。これは、下流のレポートやピボットテーブルの使用にとって重要です。

これにより、すべてのデータが入力されたDataGridViewが作成されます。

C# IronXLを使用して列ヘッダーと共にDataGridViewをExcelにエクスポートする: 画像1 - DataGridViewのサンプルデータ

より高度なデータバインディングのシナリオについては、Microsoft のDataGridView データバインディングに関するドキュメントに、追加の例が記載されています。

列ヘッダーを保持したまま、DataGridViewをExcelにエクスポートするにはどうすればよいですか?

エクスポートメソッドは各DataGridView列のHeaderTextプロパティから列ヘッダーを読み取り、ワークシートの行0に書き込みます。 データ行は1行目以降に続きます。 このメソッドをbtnExportクリックイベントにワイヤーします:

private void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");

        // Write column headers to row 0
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
        }

        // Write data rows starting at row 1
        for (int row = 0; row < dataGridView1.Rows.Count; row++)
        {
            // Skip the placeholder new-row at the bottom of the grid
            if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
                continue;

            for (int col = 0; col < dataGridView1.Columns.Count; col++)
            {
                var cellValue = dataGridView1.Rows[row].Cells[col].Value;
                if (cellValue != null)
                {
                    worksheet.SetCellValue(row + 1, col, cellValue.ToString());
                }
            }
        }

        // Prompt the user to choose a save location
        using SaveFileDialog saveFileDialog = new SaveFileDialog
        {
            Filter = "Excel Files|*.xlsx",
            FileName = "DataGridView_Export.xlsx"
        };

        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Export failed: {ex.Message}", "Error",
                       MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

エクスポート手順の詳細

この方法の各ステップには、それぞれ特定の目的があります。

  • WorkBook.Create : XLSX形式を使用して、メモリ上に新しいExcelファイルを初期化します。 ディスクにファイルが書き込まれるのは、SaveAsが呼び出されるまでありません。
  • CreateWorkSheet : エクスポートされたデータを格納するための名前付きシートを追加します。 Excelでは、タブのラベルとして"エクスポートされたデータ"という名前が表示されます。
  • 列ヘッダループ: 各列ごとにdataGridView1.Columns[col].HeaderTextを読み取り、行インデックス0に書き込みます。これはヘッダを保持するための重要なステップです。
  • データ行ループ: 入れ子のループが全ての行と列を反復し、row + 1をExcel行インデックスとして使用し、データが常にヘッダ行の下から始まるようにします。 -ヌル値チェック:セルに値が含まれていない場合に発生する例外を防ぎます。これは実際のデータではよくあることです。
  • SaveFileDialog : 実行時にパスをハードコーディングするのではなく、ユーザーがファイル名と保存先を選択できるようにします。

エクスポートされたファイルは次のようになります。

C# IronXLを使用して列ヘッダーと共にDataGridViewをExcelにエクスポートする: 画像2 - エクスポートされたサンプルデータのExcelファイル

エクスポート時に発生する一般的なエッジケースにはどのように対処しますか?

実際のデータは、サンプルデータセットのようにきれいに整理されていることはめったにない。 ここでは、遭遇する可能性が最も高いシナリオと、それらへの対処法をご紹介します。

空のセル

データループ内のnullチェック(if (cellValue != null))は例外を投げることなく空のセルを処理します。 Excelの出力では、空のセルは空白のままとなり、グリッド構造が維持されます。

混合データ型

IronXLは様々なデータ形式を自動的に処理します。 数値をToString()を介して文字列として渡すと、Excelは値に応じてそれを数値として認識する可能性があります。 正確な型制御を行うには、セル値を書き込む前に適切な型にキャストしてください。

if (cellValue is int intVal)
    worksheet.SetCellValue(row + 1, col, intVal);
else if (cellValue is decimal decVal)
    worksheet.SetCellValue(row + 1, col, (double)decVal);
else
    worksheet.SetCellValue(row + 1, col, cellValue?.ToString() ?? string.Empty);

この方法では、Excel の数値列は数値のまま保持されるため、後続の処理で数式や並べ替えが正しく機能します。

ヘッダー内の特殊文字

>、およびアクセント付き文字などの特別な文字を含む列ヘッダーは正しくエクスポートされます。 IronXLはエンコードを自動的に処理するため、ユーザー側でエスケープ処理を行う必要はありません。

大規模データセット

数万行を含むグリッドの場合、UIを応答性のある状態のままにしておくために、エクスポートロジックをバックグラウンドスレッドに移動することを検討してください。Task.Run呼び出しでラップし、完了したコールバックからUIを更新します。 MicrosoftのTaskを使用した非同期プログラミングに関するドキュメントでは、このパターンが詳細に説明されています。

セルのスタイル設定数式の保持、パスワード保護などのその他のシナリオについては、 IronXLのドキュメントでそれぞれ詳細に説明されています。

主な輸出手法を比較するとどう違うのか?

ライブラリを導入する前に、最も一般的な方法間のトレードオフを理解しておくと役立ちます。

C#におけるDataGridViewとExcelのエクスポート方法の比較
方法オフィス必須列ヘッダーパフォーマンスサーバーセーフ
Microsoft Office Interopはいマニュアル遅いなし
OpenXml SDKなしマニュアル速いはい
ClosedXMLなしマニュアル良いはい
IronXLなし自動翻訳速いはい

相互運用性に基づくソリューションでは、サーバーにExcelをインストールする必要がありますが、これはライセンス上の問題と導入の複雑さの両方につながります。 OpenXml SDKは強力だが低レベルであり、ヘッダー行を書き込むにはXML構造を手動で構築する必要がある。 IronXL と ClosedXML の両方が高レベルの API を提供していますが、IronXL の WorkBook と WorkSheet モデル は、開発者がすでにスプレッドシートについて考えている方法に密接に対応しています。

XLSXではなくCSV形式でエクスポートするにはどうすればよいですか?

Excel ワークブックの代わりに CSV ファイル が必要な場合も、同じエクスポートパターンを適用します。 ファイル形式と拡張子を変更します。

WorkBook csvWorkbook = WorkBook.Create(ExcelFileFormat.CSV);
WorkSheet csvSheet = csvWorkbook.CreateWorkSheet("Data");

// Headers and data loops remain identical

using SaveFileDialog dialog = new SaveFileDialog
{
    Filter = "CSV Files|*.csv",
    FileName = "DataGridView_Export.csv"
};

if (dialog.ShowDialog() == DialogResult.OK)
    csvWorkbook.SaveAs(dialog.FileName);

CSVエクスポートは、受信側のシステムがXLSXをサポートしていない場合や、非常に大きなデータセットの場合にファイルサイズが問題となる場合に便利です。

エクスポートしたファイルのヘッダー行のスタイルを設定するにはどうすればよいですか?

ヘッダー行が視覚的に区別できると、エクスポートされたデータはより読みやすくなります。 IronXL は、ヘッダー値を書き込んだ後に太字のテキスト、背景色、およびフォントサイズを適用することができるセルスタイリングオプションを提供します。

// Write headers and apply bold styling
for (int col = 0; col < dataGridView1.Columns.Count; col++)
{
    string cellAddress = worksheet.GetCellAddress(0, col);
    worksheet[cellAddress].Value = dataGridView1.Columns[col].HeaderText;
    worksheet[cellAddress].Style.Font.Bold = true;
    worksheet[cellAddress].Style.SetBackgroundColor("#4472C4");
    worksheet[cellAddress].Style.Font.FontColor = "#FFFFFF";
}

スタイルが適用されたヘッダー行により、エクスポートされたファイルは受信者が手動で書式設定を行う必要なく、すぐにレポート作成に使用できます。 スタイルプロパティの完全なリストについては、 IronXL のセル スタイル設定リファレンスを参照してください。

無料トライアルを始めるにはどうすればいいですか?

IronXLは、この記事で紹介されているエクスポートワークフローを含むすべての機能を試せる無料トライアルを提供しています。 上記に示したいずれかのNuGetコマンドを使用してパッケージをインストールし、 IronXL のライセンス ページで試用版キーを生成し、最初のライブラリ呼び出しの前にアプリケーションにそのキーを設定してください。

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

この試用版では、完全に機能するExcelファイルが生成され、利用可能な機能に制限はありません。 本番環境への導入に関しては、ライセンスオプションとして、個人開発者向け、チーム向け、およびロイヤリティフリーの再配布が利用可能です。

関連するエクスポートシナリオについては、IronXL が DataTables を直接 Excel にエクスポートExcel ファイルを DataGridViews に読み込む、およびエクスポートされたデータからチャートを作成する方法を探ります。

ユースケースに最適なエクスポート戦略を選択する

このチュートリアル全体を通して紹介する、セルごとの簡単なエクスポート方法は、ほとんどのWindowsフォームアプリケーションに適しています。 DataGridView が DataTable にバインドされている場合、DataTable を IronXL のDataTable to worksheet converter に直接渡すことができ、それが自動的にヘッダー行を処理します。 列のレイアウトが固定されていて、コードパスを最短にしたい場合は、DataTableを直接使用する方法を選択してください。 セルごとに条件付きロジックが必要な場合は、セルごとに手動で処理する方法を選択してください。たとえば、値が許容範囲外のセルを強調表示したり、書き込み前にnull許容型を明示的にマッピングしたりする場合などです。

ダウンロード可能なExcelレポートを生成するASP.NET Coreコントローラーなどのサーバーサイドシナリオにも、同じIronXL APIが適用されます。 唯一の違いは保存先です。application/vnd.openxmlformats-officedocument.spreadsheetml.sheetのコンテンツタイプでHTTP応答にバイトを書き込みます。 出力先がファイルであろうとストリームであろうと、列ヘッダーは同じように転送されます。

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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。