IRONSOFTWAREHOME
IRONXLの使用

IronXLを使用して C# で DataGridView を Excel にエクスポートする方法

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

Excelファイルへのデータをエクスポートするには、IronXLを使用すると、数行のC#コードで実行できます。 .xlsxファイルを作成します。Microsoft Officeのインストールは不要です。

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

Windows Formsは、 .NETエコシステムにおける基礎的なGUIライブラリであり、デスクトップアプリケーションの構築に広く利用されています。 DataTable、データベースクエリの結果、またはメモリ内リストなどの任意のバインダブルなソースから、表形式のデータを表示、編集、管理します。

そのグリッドデータをExcelにエクスポートすることで、関係者へのレポート送信、監査用のスナップショットのアーカイブ、下流の分析ツールへのデータ供給など、日常的なさまざまなニーズに対応できます。 従来のアプローチとしては、Microsoft オフィス相互運用とサードパーティ製ライブラリの2つが挙げられる。 相互運用性を実現するには、アプリケーションを実行するすべてのマシンにExcelがインストールされている必要があり、COMオブジェクトのライフサイクルに関する問題が発生し、サーバーやクラウド環境でのパフォーマンスが低下します。 IronXL 、ClosedXML、 Syncfusionなどのライブラリは、Officeに依存することなくOpen XMLファイル形式に直接書き込むことで、これらの問題を回避します。

このガイドでは、 .NET 10 を対象とした C# でのIronXL のアプローチを説明しますが、 IronXL は.NET Framework 4.6.2 およびすべての最新 for .NETバージョンをサポートしています。

前提条件

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

  • Visual Studio 2022以降
  • .NET 10 SDK がインストールされています
  • DataGridViewコントロールを含むWindows Forms Appプロジェクト
  • IronXLをインストールするためのNuGetアクセス

IronXLのインストール方法を教えてください

Visual Studio のパッケージ マネージャー コンソールを開き、以下のいずれかのコマンドを実行します。

PM > Install-Package IronXL.Excel

または、Solution Explorerでプロジェクトを右クリックし、Manage NuGet Packagesを選択し、IronXL.Excelを検索してインストールをクリックします。

VB .NET 2010でIronXLを使用してDataGridViewからExcelへのデータエクスポート: 画像1 - インストール

インストール後、Excelの機能を使用するすべてのファイルの先頭にIronXLのusingディレクティブを追加してください。

using IronXL;
using System.Data;

IronXLは、XLSX、XLS、CSV、TSVなど、一般的なスプレッドシート形式をすべてサポートしています。 このガイドでは、最新のExcelバージョンのデフォルト形式であるXLSX形式を全体を通して使用しています。

DataGridViewにサンプルデータを入力するにはどうすればよいですか?

このウォークスルーでは、btnExportという名前のボタンをフォームに含めます。 グリッドは、フォームのDataTableに保存されている従業員の記録で満たされます。

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

    // Define columns with the appropriate .NET type
    dt.Columns.Add("EmployeeID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Department", typeof(string));
    dt.Columns.Add("Salary", typeof(decimal));

    // Add sample rows
    dt.Rows.Add(101, "Sarah Johnson", "Engineering", 85000m);
    dt.Rows.Add(102, "Michael Chen", "Marketing", 72000m);
    dt.Rows.Add(103, "Emily Davis", "Finance", 91000m);
    dt.Rows.Add(104, "James Wilson", "Engineering", 78000m);

    DataGridView1.DataSource = dt;
}

各列は特定 for .NET型で定義されているため、後で数値比較や書式設定が正しく機能します。 DataGridViewに直接バインドし、フォームが開かれるとグリッドはすべての行を自動的にレンダリングします。 本番環境では、このデータは通常、ハードコードされた値ではなく、データベースクエリ、ORMの結果セット、またはREST APIのレスポンスから取得されます。

VB .NET 2010でIronXLを使用してDataGridViewからExcelへのデータエクスポート: 画像2 - DataGridView出力

DataGridViewデータモデルの理解

Rows(実際のデータセル用)の2つのコレクションを通じて公開します。 各Cellsコレクションが含まれています。 各セルのValueプロパティは、Excelのセルに書き込む前にキャストまたは変換する必要があるボックス化されたオブジェクトを返します。 この階層構造を理解することは、信頼性の高いエクスポートループを作成する上で不可欠です。

バックグラウンドではDataTableが型付きの値を保存するため、IronXLワークシートに書き込む前に小数の給与を文字列に変換する必要はありません。 IronXLのDateTimeのオーバーロードを受け入れ、出力ファイル内で元のデータタイプを保持できるようにします。

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

エクスポート処理は、ボタンのクリックハンドラー内に記述されています。 コードは新しいWorkBookを作成し、デフォルトのワークシートを取得し、列ヘッダーを最初の行に書き込み、次にそれらの下に各データ行を書き込みます。

void btnExport_Click(object sender, EventArgs e)
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

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

    // Write data rows starting at row index 1
    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cellValue = DataGridView1.Rows[row].Cells[col].Value;
            if (cellValue is not null)
            {
                sheet.SetCellValue(row + 1, col, cellValue.ToString()!);
            }
        }
    }

    string outputPath = "EmployeeData.xlsx";
    workbook.SaveAs(outputPath);
    MessageBox.Show("Export complete. File saved to: " + outputPath, "Success");
}

WorkBookオブジェクトは、メモリ内のExcelファイル全体を表します。 DefaultWorkSheetは、明示的に作成しなくても最初のシートを返します。 外側のループはHeaderTextからのヘッダーテキストを行0に書き込みます。 ネストされたループは、各データ行を繰り返し処理し、セル値を文字列に変換する前にnull値をチェックします。 row + 1オフセットは、データをヘッダー行の下にシフトします。 SaveAsは完成したブックをOpen XML XLSXファイルとして指定されたパスに書き込みます。

VB .NET 2010でIronXLを使用してDataGridViewからExcelへのデータエクスポート: 画像3 - Excel出力

生成されたファイルは、Excel、Googleスプレッドシート、またはXLSX形式を読み込める任意のアプリケーションで開くことができます。 列ヘッダーは最初の行に表示され、DataGridViewに現れたのと同じ順序で全データ行が続きます。

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

単純なデータダンプは機能的には問題ありませんが、プレゼンテーションには適していません。 IronXLのスタイリングAPIを使用すると、保存前に任意のセル範囲に太字フォント、背景色、テキスト色、数値形式を適用できます。

void ExportWithFormatting()
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

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

    // Style the header row: bold white text on blue background
    var headerRange = sheet.GetRange("A1:D1");
    headerRange.Style.Font.Bold = true;
    headerRange.Style.SetBackgroundColor("#4472C4");
    headerRange.Style.Font.SetColor("#FFFFFF");

    // Locate the Salary column index
    int salaryColIndex = -1;
    for (int i = 0; i < DataGridView1.Columns.Count; i++)
    {
        if (string.Equals(DataGridView1.Columns[i].HeaderText, "Salary",
            StringComparison.OrdinalIgnoreCase))
        {
            salaryColIndex = i;
            break;
        }
    }

    // Write data rows, preserving numeric types
    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        if (DataGridView1.Rows[row].IsNewRow) continue;

        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cellValue = DataGridView1.Rows[row].Cells[col].Value;
            if (cellValue is null) continue;

            int targetRow = row + 1;

            if (col == salaryColIndex)
            {
                // Write salary as a true numeric decimal
                if (decimal.TryParse(cellValue.ToString(),
                    System.Globalization.NumberStyles.Number,
                    System.Globalization.CultureInfo.InvariantCulture,
                    out decimal decValue))
                {
                    sheet.SetCellValue(targetRow, col, decValue);
                }
                else
                {
                    sheet.SetCellValue(targetRow, col, cellValue.ToString()!);
                }
            }
            else
            {
                sheet.SetCellValue(targetRow, col, cellValue.ToString()!);
            }
        }
    }

    // Apply currency format to the salary column data range
    var salaryRange = sheet.GetRange("D2:D5");
    salaryRange.FormatString = "$#,##0";

    workbook.SaveAs("FormattedEmployeeData.xlsx");
}

A1:D1)を受け入れます。 Style.Font.SetColorを設定すると、選択した範囲のすべてのセルにそれらのフォーマットが適用されます。 数値列の場合、値を文字列ではなく$#,##0などの数値フォーマットを正しく適用できます。 文字列として保存されたセルは、数値書式コードに対応していません。

VB .NET 2010でIronXLを使用してDataGridViewからExcelへのデータエクスポート: 画像4 - フォーマットされたExcel出力

IronXLスタイリングドキュメントを参照することで、交互の行のシェーディング、カラム幅の自動フィット、またはウィンドウ枠の固定を適用するためにこのパターンを拡張することができます。

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

一部のワークフローでは、レガシーシステムとの互換性や軽量データパイプラインのために、CSV出力が必要となります。 IronXLは、メインコードに追加の設定変更を加えることなく、CSVエクスポートを処理します。

void ExportToCsv()
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

    for (int col = 0; col < DataGridView1.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText);
    }

    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        if (DataGridView1.Rows[row].IsNewRow) continue;

        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cell = DataGridView1.Rows[row].Cells[col].Value;
            if (cell is not null)
                sheet.SetCellValue(row + 1, col, cell.ToString()!);
        }
    }

    // Saving with a .csv extension produces a comma-separated file
    workbook.SaveAs("EmployeeData.csv");
}

XLSXエクスポートから唯一の変更は、SaveAsに渡されるファイル拡張子です。 IronXLは拡張子を検出し、ワークブックを正しい形式に自動的にシリアル化します。 この一貫性により、出力形式に関係なくデータ書き込みロジックは同一のまま維持されます。これは、形式ごとに個別のコードパスを必要とするライブラリに比べて大きな利点です。

CSVエクスポートは、下流の処理対象がPythonのpandasスクリプト、データベースの一括インポートツール、またはバイナリXLSXファイルを読み取ることができない分析プラットフォームである場合に特に役立ちます。

大規模なDataGridViewデータセットを効率的に処理するにはどうすればよいですか?

数万行を含むグリッドの場合、パフォーマンスが考慮事項となる。 以下のパターンは、データセット全体を一度の処理で構築することで、メモリ負荷を軽減します。

大規模データセットにおけるIronXLのエクスポート方法の比較
アプローチ処理された行数オフィス勤務必須タイプの保存
Microsoft.Office.Interop.Excel最大約65k(低速)はい部分的
IronXL (ストリングセル)100万行以上なしいいえ(全文)
IronXL (入力済みセル)100万行以上なしはい
データテーブルからのIronXL100万行以上なしはい(自動)

DataTableにバインドされている場合、セルごとの反復を完全にバイパスして、WorkSheet.LoadDataTableメソッドを使用してテーブルを直接IronXLにロードできます。 この方法はより高速で、すべての列の型を自動的に保持します。

バックにDataTableがないグリッドの場合、前に示したセルごとのパターンが標準のアプローチとして残ります。 UIを大規模なエクスポート中に応答状態に保つために非同期でエクスポートする必要がある場合は、エクスポートロジックをawaitします。 結果をUIスレッドにマーシャリングする際のパターンについては、非同期ファイル操作のドキュメントを参照してください。

IronXLがDataGridViewのエクスポートにおいてオフィス相互運用よりも優れている理由は?

従来 for .NETソリューションは、実行中のExcelプロセスを駆動するためにMicrosoft.Office.Interop.Excelを使用していました。 そのアプローチは、導入と信頼性に関していくつかの問題を引き起こす。

アプリケーションを実行するすべてのマシンには、Microsoft Excel のライセンス版がインストールされている必要があります。

  • 通常、サーバー環境やクラウドコンテナではOfficeをインストールできません COM相互運用では、メモリリークやゾンビExcelプロセスを回避するために、すべてのオブジェクトを明示的に解放する必要があります。 COM境界を越えたエラー処理は冗長で脆弱である。 行数が増えるにつれてパフォーマンスが急速に低下する

IronXLは、外部プロセスを起動することなく、 OOXMLファイル形式に直接書き込みます。 アプリケーションは自己完結型のユニットとしてデプロイされます。 ライブラリのAPIは完全に管理された.NETのため、ガベージコレクションがメモリを自動的に処理するのでMarshal.ReleaseComObject呼び出しは必要ありません。 プロセス間通信が発生しないため、処理速度が大幅に向上します。

代替案を検討しているチームにとって、 ClosedXMLは人気の高いオープンソースの選択肢の一つです。 IronXLは、PDF変換グラフ生成、および商用サポートを含む広範な機能セットを提供しており、企業の調達決定の要素となるかもしれません。 IronXLのライセンスオプションを確認し、チームの規模と導入シナリオに最適なプランを選択してください。

機能比較: IronXL vs オフィス相互運用
特徴IronXLオフィス相互運用
オフィスへのインストールが必要ですなしはい
サーバー/クラウド展開はいいいえ(サポート対象外)
マネージドメモリモデルはいいいえ(COMクリーンアップは不要です)
XLSX / CSV / XLS形式3人全員インストールされているExcelによって異なります
スプレッドシートからのPDFエクスポートはい追加のライブラリが必要です

IronXLのチュートリアルセクションでは、既存のExcelファイルの読み込み、テンプレートの変更、グラフの生成、条件付き書式の適用などについて解説しています。これらはすべて、ここで紹介するDataGridViewのエクスポートパターンから自然に拡張できる機能です。

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

IronXLを使用してDataGridViewをフォーマットされたExcelファイルにエクスポートする動作するC#コードができました。 ここからは、以下の方向性を検討してください。

  • エラーハンドリングを追加: エクスポートコードをtry/catchブロックでラップし、ファイルがロックされている場合やパスが無効な場合にユーザーフレンドリーなメッセージを表示します。
  • ファイルパス選択をサポート: SaveFileDialogを使用して、ユーザーが実行時に出力場所とファイル名を選択できるようにします。
  • 実データをロード: サンプルDataTableADO.NETまたはEntity Frameworkを使用したデータベースクエリに置き換えます。
  • 既存のファイルを読む: 既存のスプレッドシートを開き、新しいものを常に作成するのではなく、更新するためにWorkBook.Loadを使用します
  • 複数シートにエクスポート: 関連するデータセットを整理するために、同じWorkSheetオブジェクトを作成します。 -条件付き書式を適用する:IronXLの条件付き書式APIを使用して、しきい値を超えるセルを強調表示する -ライセンスオプションを確認してください無料トライアルが利用可能です。 ライセンス階層は、個人開発者からEnterprise規模での導入までをカバーしています。 -完全なAPIリファレンスを参照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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。