フッターコンテンツにスキップ
IRONXLの使用

C# DataGridView書式付きExcelへのエクスポート:完全ガイド

C# DataGridView Export to Excel with Formatting:完全ガイド:画像1 - C#のDataGridViewからExcelへの書式設定付きエクスポート

DataGridViewのデータをExcelファイルにエクスポートすることは、Windows Formsアプリケーションでは一般的な要件です。 レポートを作成するにしても、分析のためにデータを転送するにしても、開発者はフォーマットを保持しながら DataGridView のコンテンツをエクスポートする信頼できる方法を必要としています。 この記事では、Microsoft Excelをインストールすることなく完璧に動作する最新のアプローチであるIronXLを使用して、DataGridViewをExcelにエクスポートする方法を紹介します。

今IronXLを始めましょう。
green arrow pointer

DataGridViewエクスポートのためのWindowsフォームプロジェクトのセットアップ方法

従来のアプローチでは、Microsoft Excel Object LibraryのCOMタブを通じて参照を追加する必要がありました。 しかし、この方法には大きな欠点があります。すべてのマシンにMicrosoft Excelがインストールされている必要があり、private void releaseobjectメソッドによる複雑なオブジェクトの解放パターンが含まれ、大きなExcelファイルではうまく動作しません。

IronXLはこのような問題を完全に解決します。 Visual Studioでは、NuGetパッケージマネージャ経由でインストールするだけで、リファレンスの追加メニューを選択したり、COMタブに移動したりする必要はありません。 このライブラリは、Microsoft Officeに依存することなく、すべてのデータエクスポート操作を処理します。

まず、Visual Studio で新しい Windows Forms プロジェクトを作成し、次の名前空間をフォームに追加します:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

フォームにDataGridViewコントロールとボタンを追加します。 DataGridViewコントロールはエクスポート前にデータを表示し、ボタンはエクスポートDataGridView操作をトリガーします。

どのように DataGridView コントロールにデータをロードできますか?

Form Load イベントは、DataGridView にデータを入力するのに理想的です。 次のコードサンプルは、DataTableDataGridViewコントロールにバインドするデモです:

private void Form1_Load(object sender, EventArgs e)
{
    // Create DataTable with sample data
    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));
    // Add rows with values
    dt.Rows.Add(1, "Laptop", 999.99, 50);
    dt.Rows.Add(2, "Mouse", 29.99, 200);
    dt.Rows.Add(3, "Keyboard", 79.99, 150);
    dt.Rows.Add(4, "Monitor", 349.99, 75);
    dataGridView1.DataSource = dt;
}
private void Form1_Load(object sender, EventArgs e)
{
    // Create DataTable with sample data
    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));
    // Add rows with values
    dt.Rows.Add(1, "Laptop", 999.99, 50);
    dt.Rows.Add(2, "Mouse", 29.99, 200);
    dt.Rows.Add(3, "Keyboard", 79.99, 150);
    dt.Rows.Add(4, "Monitor", 349.99, 75);
    dataGridView1.DataSource = dt;
}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Create DataTable with sample data
    Dim dt As New DataTable()
    dt.Columns.Add("ProductID", GetType(Integer))
    dt.Columns.Add("ProductName", GetType(String))
    dt.Columns.Add("Price", GetType(Decimal))
    dt.Columns.Add("Stock", GetType(Integer))
    ' Add rows with values
    dt.Rows.Add(1, "Laptop", 999.99D, 50)
    dt.Rows.Add(2, "Mouse", 29.99D, 200)
    dt.Rows.Add(3, "Keyboard", 79.99D, 150)
    dt.Rows.Add(4, "Monitor", 349.99D, 75)
    dataGridView1.DataSource = dt
End Sub
$vbLabelText   $csharpLabel

入力可能なデータテーブル

C# DataGridView Export to Excel with Formatting:完全ガイド:画像2 - 私たちのフォームのUI

このコードでは、4 つの列を持つ DataTable dt を作成し、Add メソッドを使用して DataGridView の行にサンプルの値を入力しています。 DataGridViewコントロールは、DataTableをデータソースとして受け入れ、データを表形式で表示します。 最初の列には整数のIDが、他の列には文字列と10進数の値が格納されています。

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

ボタンのクリック・イベント・ハンドラには、中核となるエクスポート・ロジックが含まれています。 XLのアプローチは従来の方法とは異なります; DataGridViewのコンテンツは、DataTableの中間ステップを経由してExcelファイルに直接エクスポートできます:

private void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        // Convert DataGridView to DataTable
        DataTable dt = new DataTable();
        foreach (DataGridViewColumn column in dataGridView1.Columns)
            dt.Columns.Add(column.HeaderText);
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (!row.IsNewRow)
            {
                DataRow dataRow = dt.NewRow();
                for (int i = 0; i < dataGridView1.Columns.Count; i++)
                    dataRow[i] = row.Cells[i].Value;
                dt.Rows.Add(dataRow);
            }
        }
        // Create workbook and export
        WorkBook workbook = WorkBook.Create();
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        worksheet.LoadFromDataTable(dt, true);
        workbook.SaveAs("C:\\Reports\\Export.xlsx");
        MessageBox.Show("Export complete!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Error: {ex.Message}");
    }
}
private void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        // Convert DataGridView to DataTable
        DataTable dt = new DataTable();
        foreach (DataGridViewColumn column in dataGridView1.Columns)
            dt.Columns.Add(column.HeaderText);
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (!row.IsNewRow)
            {
                DataRow dataRow = dt.NewRow();
                for (int i = 0; i < dataGridView1.Columns.Count; i++)
                    dataRow[i] = row.Cells[i].Value;
                dt.Rows.Add(dataRow);
            }
        }
        // Create workbook and export
        WorkBook workbook = WorkBook.Create();
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        worksheet.LoadFromDataTable(dt, true);
        workbook.SaveAs("C:\\Reports\\Export.xlsx");
        MessageBox.Show("Export complete!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Error: {ex.Message}");
    }
}
Private Sub btnExport_Click(sender As Object, e As EventArgs)
    Try
        ' Convert DataGridView to DataTable
        Dim dt As New DataTable()
        For Each column As DataGridViewColumn In dataGridView1.Columns
            dt.Columns.Add(column.HeaderText)
        Next
        For Each row As DataGridViewRow In dataGridView1.Rows
            If Not row.IsNewRow Then
                Dim dataRow As DataRow = dt.NewRow()
                For i As Integer = 0 To dataGridView1.Columns.Count - 1
                    dataRow(i) = row.Cells(i).Value
                Next
                dt.Rows.Add(dataRow)
            End If
        Next
        ' Create workbook and export
        Dim workbook As WorkBook = WorkBook.Create()
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
        worksheet.LoadFromDataTable(dt, True)
        workbook.SaveAs("C:\Reports\Export.xlsx")
        MessageBox.Show("Export complete!")
    Catch ex As Exception
        MessageBox.Show($"Error: {ex.Message}")
    End Try
End Sub
$vbLabelText   $csharpLabel

DataGridViewからExcelへの出力

C# DataGridView Export to Excel with Formatting:完全ガイド:画像3 - 生成されたExcelファイル

object sender, EventArgs e パラメータを持つこのボタンクリックイベントハンドラは、DataGridView の行と列のすべてのデータを繰り返し処理し、DataTable を構築します。 LoadFromDataTableメソッドは、DataTableを受け取り、ワークシートに入力します。 ワークブックオブジェクトは、指定された場所に保存されます。 IronXLはまた、Microsoft Interopで一般的なメモリの問題なしに、大きなExcelファイルを効率的にエクスポートすることができます。

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

フォーマットされたExcelファイルを作成するには、ヘッダー行とセルにスタイルを設定する必要があります。 この例では、ヘッダー行の背景色と交互行のスタイリングを適用しています:

private void ExportWithFormatting(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create();
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Add header row
    string[] headers = { "ID", "Name", "Price", "Stock" };
    for (int col = 0; col < headers.Length; col++)
    {
        worksheet.SetCellValue(0, col, headers[col]);
        worksheet[$"{(char)('A' + col)}1"].Style.Font.Bold = true;
        worksheet[$"{(char)('A' + col)}1"].Style.SetBackgroundColor("#4472C4");
    }
    // Add data with alternating row 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());
        }
        // Apply alternating background colors
        if (rowIndex % 2 == 0)
        {
            var range = worksheet[$"A{rowIndex + 1}:D{rowIndex + 1}"];
            range.Style.SetBackgroundColor("#D6DCE5");
        }
        rowIndex++;
    }
    workbook.SaveAs("C:\\Reports\\FormattedExport.xlsx");
}
private void ExportWithFormatting(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create();
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Add header row
    string[] headers = { "ID", "Name", "Price", "Stock" };
    for (int col = 0; col < headers.Length; col++)
    {
        worksheet.SetCellValue(0, col, headers[col]);
        worksheet[$"{(char)('A' + col)}1"].Style.Font.Bold = true;
        worksheet[$"{(char)('A' + col)}1"].Style.SetBackgroundColor("#4472C4");
    }
    // Add data with alternating row 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());
        }
        // Apply alternating background colors
        if (rowIndex % 2 == 0)
        {
            var range = worksheet[$"A{rowIndex + 1}:D{rowIndex + 1}"];
            range.Style.SetBackgroundColor("#D6DCE5");
        }
        rowIndex++;
    }
    workbook.SaveAs("C:\\Reports\\FormattedExport.xlsx");
}
Private Sub ExportWithFormatting(sender As Object, e As EventArgs)
    Dim workbook As WorkBook = WorkBook.Create()
    Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
    ' Add header row
    Dim headers As String() = {"ID", "Name", "Price", "Stock"}
    For col As Integer = 0 To headers.Length - 1
        worksheet.SetCellValue(0, col, headers(col))
        worksheet($"{ChrW(AscW("A"c) + col)}1").Style.Font.Bold = True
        worksheet($"{ChrW(AscW("A"c) + col)}1").Style.SetBackgroundColor("#4472C4")
    Next
    ' Add data with alternating row colors
    Dim rowIndex As Integer = 1
    For Each row As DataGridViewRow In dataGridView1.Rows
        If row.IsNewRow Then Continue For
        For col As Integer = 0 To dataGridView1.Columns.Count - 1
            worksheet.SetCellValue(rowIndex, col, If(row.Cells(col).Value?.ToString(), String.Empty))
        Next
        ' Apply alternating background colors
        If rowIndex Mod 2 = 0 Then
            Dim range = worksheet($"A{rowIndex + 1}:D{rowIndex + 1}")
            range.Style.SetBackgroundColor("#D6DCE5")
        End If
        rowIndex += 1
    Next
    workbook.SaveAs("C:\Reports\FormattedExport.xlsx")
End Sub
$vbLabelText   $csharpLabel

フォーマットされたエクセルファイルの出力

C# DataGridView Export to Excel with Formatting:完全ガイド:画像4 - 生成されたフォーマットされたExcelファイルの出力

この C# DataGridView から Excel へのエクスポート (書式設定付き) の例では、最初の行を太字フォントと背景色でスタイル付きヘッダー行として設定します。 コードは、読みやすさを向上させるために、交互に並ぶスタイルを適用しています。 IronXLの包括的なスタイル設定APIを使用して、異なるフォントスタイル、塗りつぶしパターン、ボーダー設定でセルをカスタマイズすることができます。

結論

Windowsフォーム・アプリケーションのDataGridViewからExcelへのエクスポートは、IronXLで簡単になります。 COMタブ参照や複雑なオブジェクトのクリーンアップコードを必要とする従来のMicrosoft Excel Object Libraryのアプローチとは異なり、IronXLは書式付きExcelファイルを作成するためのクリーンでモダンなAPIを提供します。

このライブラリは、基本的なデータからExcelへのエクスポート、ヘッダー行の背景色のスタイリングや交互の行を含む洗練されたフォーマットされたExcelファイルの生成まで、すべてを処理します。 大きなExcelファイルを処理するアプリケーションでは、IronXLはMicrosoft Excelをインストールすることなく優れたパフォーマンスを発揮します。

DataGridViewからExcelへのワークフローを効率化する準備はできましたか? 無料トライアルを今すぐ開始するか、IronXLライセンスオプションをご検討ください。

よくある質問

DataGridViewデータをC#でExcelにエクスポートするにはどうしたらいいですか?

IronXLを使用すると、データ操作とエクスポートのための強力な機能を活用して、C#でDataGridViewのデータをExcelファイルに簡単にエクスポートできます。

DataGridViewをExcelにエクスポートする際、どのようなフォーマットオプションがありますか?

IronXLでは、DataGridViewをExcelにエクスポートする際に、ヘッダーのスタイルや行の色の変更など、さまざまなフォーマットオプションを適用することができます。

Windows FormsアプリケーションでDataGridViewのデータをExcelにエクスポートすることは可能ですか?

DataGridViewのデータをWindows FormsアプリケーションのIronXL.Excelにエクスポートすることができます。

DataGridViewをExcelにエクスポートするときに、ヘッダーのスタイルを設定できますか?

IronXLでは、DataGridViewのデータをExcelにエクスポートする際に、カスタムフォント、カラー、その他のフォーマットオプションでヘッダをスタイルすることができます。

DataGridViewからエクスポートする際、Excelで行の色を交互に適用するにはどうすればよいですか?

IronXLを使用すると、DataGridViewからデータをエクスポートする際に、Excelシートに行の色を交互に適用することができます。

C#でDataGridViewをExcelにエクスポートするには、特別なライブラリが必要ですか?

IronXLのようなライブラリを使用することで、C#でDataGridViewをExcelにエクスポートするプロセスが簡素化され、データハンドリングとフォーマットのための堅牢なツールが提供されます。

DataGridViewからExcelへのエクスポートにIronXLを使用する利点は何ですか?

IronXLは使いやすさ、包括的なフォーマットオプション、Windowsフォームとの互換性などの利点を提供し、DataGridViewをExcelにエクスポートするのに理想的です。

カーティス・チャウ
テクニカルライター

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

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。