IRONSOFTWAREHOME
IRONXLの使用

C# で GridView を書式付きで Excel にエクスポートする方法

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

GridViewのデータをExcelにエクスポートする際に、色、フォント、行の背景色、境界線などを保持する必要があることは、ほぼすべてのデータ駆動型ASP.NETまたはWindows Formsアプリケーションで求められる要件です。 従来のアプローチ -- HtmlTextWriterStringWriter を使用してコントロールをHTMLとしてレンダリング -- は、Excelで形式警告を伴うファイルを生成し、ユーザーに対して静かに失敗します。 IronXLは、Microsoft Officeに依存せず、C#で完全にネイティブなXLSXファイルを生成することでこの問題を解決し、すべてのセルスタイルを正確に制御できるようにします。

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

エクスポートコードを記述する前に、 NuGetからIronXLをインストールしてください。 パッケージマネージャーコンソールを開いて次を実行します:

PM > Install-Package IronXL.Excel

IronXLは、.NET 8、 .NET 9、 .NET 10に加え、 .NET Framework 4.6.2以降をサポートしています。 インストール後、Excel操作を実行する任意のファイルに次の using ディレクティブを追加します。

using IronXL;
using IronXL.Styles;

追加のランタイムやOfficeとの相互運用機能は必要ありません。 このライブラリは、Microsoft Excel、LibreOffice Calc、およびGoogle Sheetsで問題なく開くことができるネイティブのXLSXバイナリファイルを作成します。

WindowsフォームのDataGridViewをセル書式設定付きでExcelにエクスポートするにはどうすればよいですか?

Windows Formsアプリケーションは、ウェブベースのDataGridViewコントロールを使用します。 エクスポートパターンは両方のケースで同じです: 行とセルから値を抽出し、IronXL ワークブックを作成してスタイルを適用し、その後結果を保存またはストリーミングします。

最も信頼性のあるアプローチは、コントロールのDataTableにキャストして、フィルタがかかっていたり、ページ分けされている可能性がある視覚的な行を反復しないようにすることです。

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

DataTable dt = (DataTable)dataGridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#4472C4");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
        sheet.SetCellValue(row + 1, col, value);

        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
}

// Save via dialog
using var saveDialog = new SaveFileDialog
{
    Filter = "Excel Files|*.xlsx",
    FileName = "GridViewExport.xlsx"
};

if (saveDialog.ShowDialog() == DialogResult.OK)
{
    workBook.SaveAs(saveDialog.FileName);
    MessageBox.Show("Export successful.", "Export",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}

WorkBook.Create は、XLSX形式の新しいインメモリワークブックを初期化します。 DefaultWorkSheet は最初のシートを返し、保存前にそのNameプロパティを介して名前を変更できます。 DateTime値を受け付けます—IronXLは適切なセルタイプを自動的に選択します。

交互の行色パターン -- #FFFFFFを選択 -- はExcelに組み込まれているバンド行テーブルスタイルを反映しています。 アプリケーションのデザインシステムに合致する、任意の6文字の16進数カラーコードで置き換えることができます。

出力画像

IronXLを使用したC#での書式付きGridViewのExcelエクスポート: 画像1 - GridView出力

IronXLを使用したC#での書式付きGridViewのExcelエクスポート: 画像2 - Excel出力

IronXLを使用したC#での書式付きGridViewのExcelエクスポート: 画像3 - メッセージ出力

ASP.NET GridViewをExcelにエクスポートして、そのファイルをブラウザにストリーミングするにはどうすればよいですか?

Webアプリケーションには、異なる配信メカニズムが必要です。 ファイルシステムに書き込む代わりに、ワークブックをMemoryStreamにシリアライズし、適切なヘッダーを付けてHTTPレスポンスに書き込むことで、ブラウザーがファイルダウンロードとして処理します。

ページングされたGridViewの重要な事前準備ステップ: ページングを無効にし(AllowPaging = false)、エクスポート前にデータソースを再バインドして、現在のページだけでなくすべてのレコードをキャプチャします。

using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;

// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();

DataTable dt = (DataTable)GridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#2E75B6");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
    cell.Style.BottomBorder.Type = BorderType.Medium;
}

// Data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
        cell.Style.LeftBorder.Type = BorderType.Thin;
        cell.Style.RightBorder.Type = BorderType.Thin;
    }
}

// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();

Response.AddHeadercontent-disposition: attachment を使用すると、すべての最新ブラウザでファイルダウンロードのダイアログが強制されます。 MIMEタイプ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet はXLSXファイルの登録タイプで、ブラウザがバイナリコンテンツをインラインで表示しようとするのを防ぎます。

ASP.NET Coreアプリケーションの場合、コントローラーのアクションでFile(fileBytes, contentType, fileName)に置き換えます -- ワークブックの作成ロジックは同じです。

セル値に基づいて条件付き書式を適用するにはどうすればよいですか?

条件付き書式設定は、特定の条件を満たすセルを強調表示します。たとえば、期限を過ぎた日付を赤色で表示したり、しきい値を下回る値をオレンジ色で表示したりできます。 IronXLは、ワークブック作成時にセルレベルで条件付き書式を適用します。

// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;

for (int row = 0; row < dt.Rows.Count; row++)
{
    // Highlight past-due dates
    if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
    {
        DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
        var dueDateCell = sheet.GetCellAt(row + 1, 3);
        if (dueDate < today)
        {
            dueDateCell.Style.SetBackgroundColor("#FF0000");
            dueDateCell.Style.Font.Color = "#FFFFFF";
            dueDateCell.Style.Font.Bold = true;
        }
    }

    // Highlight amounts below threshold
    if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
    {
        decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
        var amountCell = sheet.GetCellAt(row + 1, 4);
        if (amount < 100m)
        {
            amountCell.Style.SetBackgroundColor("#FFC000");
        }
    }
}

このパターンは組み合わせ可能です。レポート作成要件に応じて、条件チェックをいくつでも追加できます。 IronXLはセル単位で動作するため、基本行スタイルの後に条件付きスタイルを適用することで、条件付き書式と交互行色ロジックを組み合わせることができます。

列幅を設定してヘッダー行を固定するにはどうすればよいですか?

プロフェッショナルな形式でエクスポートされたExcelファイルには、適切な列幅と固定されたヘッダー行が含まれているため、ユーザーが大規模なデータセットをスクロールしても列名が常に表示されます。

IronXLはWorkSheet 列アクセサーを通じて列幅を、FreezeRows メソッドを通じてヘッダーフリーズを公開します。

// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
    // Set column width in character units (1 unit ≈ one default character width)
    sheet.SetColumnWidth(col, 20);
}

// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);

// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);

実運用においては、固定値を使用するのではなく、各列の最大文字数に基づいて幅を計算することを検討してください。 DataTable列の値を反復し、文字列の長さを測定し、選択したフォントサイズに適した文字幅係数を掛けます。

また、行のバンド分けロジックとは独立して、C# を使用して Excel セルに背景色を適用することで、よりきめ細かなスタイル設定を行うこともできます。

GridViewコントロールを使用せずにデータテーブルをExcelにエクスポートするにはどうすればよいですか?

多く for .NETアプリケーションは、サービスコールやデータベースクエリを通じてデータを取得し、UIコントロールにバインドせずにDataTableに保持します。 GridViewをインスタンス化せずにDataTableを直接Excelにエクスポートできます。

これは、バックグラウンドジョブ、スケジュールされたレポート、およびサーバー上でExcelファイルを生成する必要があるAPIエンドポイントにとって最も効率的な方法です。

using IronXL;
using IronXL.Styles;
using System.Data;

public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.CreateWorkSheet(sheetName);

    // Header
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    // Data
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    return workBook.ToByteArray();
}

このメソッドは、ディスクに書き込んだり、APIエンドポイントからストリーミングしたり、メールに添付したり、メモリにキャッシュしたりすることができるbyte[]を返します。 関連するテクニックについては、 DataTableをExcelにエクスポートする方法に関するガイドと、 DataTableをExcelにエクスポートする最速の方法に関するチュートリアルを参照してください。

大規模データセットとパフォーマンスをどのように処理していますか?

数万行ものデータをExcelにエクスポートする場合、メモリ割り当てに注意を払う必要がある。 大きなグリッド内の各セルに対して新しいセル型オブジェクトを作成することが、最も一般的なパフォーマンス上のボトルネックです。 スタイル定義は可能な限り再利用し、個々のセルではなく範囲オブジェクトにスタイルを設定してください。

データセットサイズ別のIronXLエクスポート方法
データセットのサイズ推奨されるアプローチ重要な考慮事項
最大5,000行細胞ごとのスタイリングループシンプルなコード、オーバーヘッドはごくわずか
5,000~50,000行レンジレベルスタイルのアプリケーションオブジェクト割り当てを大幅に削減します
50,000行以上データテーブルの直接エクスポート、最小限のスタイル設定セルごとの操作を最小限に抑え、可能であればストリーミングを使用する。

ページングされたGridViewの場合、常にAllowPaging = falseを設定し、エクスポート前に再バインドします。 ページングは​​コントロールに表示される行数を制限するため、ページングされたエクスポートではデータセット全体ではなく現在のページのみが取得されます。これは、エクスポートが不完全になるバグの頻繁な原因となります。

厳密に型指定されたコレクションと協調するパターンを学ぶためにC#でのオブジェクトリストのExcelへのエクスポートに関するガイドを確認することもできます。

ASP.NET CoreまたはBlazorでGridViewをエクスポートするにはどうすればよいですか?

ASP.NET CoreおよびBlazorアプリケーションにはWeb FormsGridViewコントロールがありませんが、基礎となるデータエクスポートの課題は同じです: オブジェクトのコレクションまたはDataTableを取得し、スタイルを施したワークブックを作成し、ファイルを提供します。ワークブック作成コードは同じです; 配送方法だけが変わる。

Blazorアプリケーションで、 JavaScript相互運用機能を使用してファイルダウンロードをトリガーする:

// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;

public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.DefaultWorkSheet;

    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    byte[] fileBytes = workBook.ToByteArray();
    string base64 = Convert.ToBase64String(fileBytes);
    await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}

Blazorのダウンロードパターンの詳細な手順については、 BlazorからExcelへのエクスポートチュートリアルを参照してください。 ASP.NET Coreコントローラーを使用したアプローチについては、 ASP.NET Core のExcel エクスポートチュートリアルを参照してください。

フォントスタイルと枠線オプション

IronXLは各セルのStyleオブジェクトを通じて微調整フォントとボーダーコントロールを公開します。 C# で利用できる Excel のフォントスタイルには、太字、斜体、下線、サイズ、色など、あらゆる種類が含まれています。 BorderTypeを通じて利用可能なボーダータイプには、細線、中線、太線、破線、点線、ダブル線、さらにはいくつかの細線のバリエーションがあります。

IronXLは、ヘッダー行やサマリーフッターを結合する場合、 C#を使用してExcelのセルを結合することもサポートしています。これは、データテーブルの上に複数の列にまたがる単一のタイトルセルを作成したい場合に便利です。

データ入力後に列幅を自動調整するには、推奨される方法について、 Excel で C# を使用してセルを自動調整する方法に関するガイドを参照してください。

なぜネイティブのExcelライブラリはHtmlTextWriterよりもきれいなエクスポートファイルを作成するのか?

従来のASP.NETエクスポート技術 -- HtmlTextWriterを作成し、レンダリングされたコントロールをレスポンスに書き込む -- は、.xls拡張子のHTMLドキュメントを生成します。 Microsoft Excel は、このようなファイルを開く際に互換性に関する警告を表示します。これは、ファイルが実際には Excel バイナリ形式または OOXML 形式ではないためです。 スタイルは、Excelが部分的に解釈するインラインCSSに限定されます。 条件付き書式設定は不可能です。 Windows以外のプラットフォームを使用しているユーザー、またはLibreOfficeを使用しているユーザーは、出力品質が低下します。

IronXLはOpen XMLスプレッドシート形式(OOXML)を直接出力します。 結果は正しい.xlsxファイルです -- Excel自体が作成するものと同一であり、Excel、LibreOffice、Google Sheets、およびmacOSのNumbersで警告なしで開きます。 書式設定はHTML属性ではなくスプレッドシートのスタイルとしてエンコードされるため、データの送受信や異なるプラットフォームでの表示でも維持されます。

ASP.NET GridViewのエクスポート方法の比較
方法ファイル形式書式に関する警告フルスタイルサポートオフィス必須
HtmlTextWriter + StringWriterXLSを装ったHTMLはいなしなし
Office Interop (COM)ネイティブXLS/XLSXなしはいはい
IronXLネイティブXLSX/XLSなしはいなし

Microsoftの公式ドキュメントであるOpen XML SDKには、 IronXLが生成する基本フォーマットについて説明されています。 ECMA Internationalが管理するOOXML仕様は、アプリケーション間の互換性を保証する標準を定義している。 Microsoft Docs のASP.NET GridView コントロールのドキュメントには、上記のエクスポート パターンが読み取るコントロール モデルについて説明されています。

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

これで、 IronXLを使用してGridViewおよびDataGridViewのデータを適切な形式のXLSXファイルにエクスポートするために必要なパターンが揃いました。Windows Forms、 ASP.NET Web Forms、 ASP.NET Core、およびBlazorの配信モデルに対応しています。

さらに詳しく知りたい場合は:

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