フッターコンテンツにスキップ
IRONXLの使用
C#でDataGridViewをExcelにエクスポートする方法

C#でDataGridViewをExcelにエクスポートする方法

This tutorial provides a comprehensive guide on how to export data from a DataGridView control in a Windows Forms Application to an Excel file using the IronXL library in C#. 私たちの焦点は、C#プロジェクトにMicrosoft Excel機能を統合したい初心者にシームレスな体験を提供することにあります。

DataGridViewからExcelへのC#でのエクスポート方法

  1. Visual StudioでC# Windows Formsプロジェクトを作成します。
  2. NuGetパッケージマネージャを使用してExcelライブラリをインストールします。
  3. Windows FormのUIにDataGridViewとボタンを作成します。
  4. DataGridViewにデータソースをアタッチします。
  5. ボタンのクリックイベントハンドラにデータエクスポートロジックを適用します。

IronXL の旅を始めるには、ほんの数ステップが必要です。

IronXLは、.NET FrameworkアプリケーションでExcel文書を扱うプロセスを簡素化する強力なライブラリです。 これにより、大きなExcelファイルをエクスポートし、複雑なデータソースを処理し、Microsoft Excel Object Libraryを使用せずに.NET Excelファイル操作を広範にサポートすることができます。 プロジェクトをセットアップしましょう。

プロジェクトのセットアップ

1. 新しいWindows Formsアプリケーションの作成

Visual Studioを開き、新しいWindows Formsアプリケーションを作成します。 これは、DataGridViewデータをExcelファイルにエクスポートする機能を実装するためのプロジェクトの基盤となります。

C#でDataGridViewをExcelにエクスポートする方法: 図1 - Visual Studioで新しいWindows Formsアプリケーションを作成

2. IronXLのインストール

IronXLはプロジェクトに簡単に追加できます。 Visual Studioで、「NuGetパッケージの管理」オプションに移動し、IronXLを検索してインストールします。 この操作により、C#でDataGridViewをExcelにエクスポートするために必要な依存関係が全て処理されます。

C#でDataGridViewをExcelにエクスポートする方法: 図2 - NuGetパッケージマネージャを通じてIronXLライブラリをインストールする

3. ユーザーインターフェイスの準備

フォームにDataGridViewコントロールを追加します。 このコントロールは、エクスポートしようとするデータを保持します。 さらに、エクスポートプロセスをトリガーするボタンを追加します。 「Excelへのエクスポート」などのラベルを付けることができます。

エクスポート機能の実装

このセクションでは、IronXLを使用してWindows FormsアプリケーションのDataGridViewからExcelドキュメントにデータをエクスポートする機能をプログラムする方法について詳しく説明します。

アプリケーションの構築

まず、フォームにDataGridViewコントロールを追加する必要があります。 このコントロールは、エクスポートする前にデータが表示される主なコンポーネントです。 Visual StudioのツールボックスからフォームにDataGridViewをドラッグすることで簡単に追加できます。 また、ExcelファイルにDataGridViewデータをエクスポートするためのボタンを追加できます。

C#でDataGridViewをExcelにエクスポートする方法: 図3 - DataGridViewデータをExcelファイルにエクスポートするためのボタンを追加する

次のステップは、データをDataGridViewにロードすることです。 このデータは、DataTableDataSetなど、さまざまなソースから取得できます。 始めたばかりの方は、プログラムで新しいDataSetDataTableを作成し、サンプルデータでそれを埋めることでどう動作するかを確認することもできます。 また、外部ソースからデータをインポートすることもできます。 ここでの重要なポイントは、DataGridViewにデータソースをバインドすることであり、これは実質的にデータをグリッドにリンクします。 データがDataGridViewにバインドされると、フォーム上のグリッドに表示されます。

private void BindDataToDataGridView()
{
    // Create a new DataTable.
    DataTable dataTable = new DataTable();
    // Define columns for the DataTable.
    dataTable.Columns.Add("Employee ID", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Department", typeof(string));
    dataTable.Columns.Add("Joining Date", typeof(DateTime));
    // Add sample data to the DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    // Bind the DataTable to the DataGridView.
    dataGridView1.DataSource = dataTable;
}
private void BindDataToDataGridView()
{
    // Create a new DataTable.
    DataTable dataTable = new DataTable();
    // Define columns for the DataTable.
    dataTable.Columns.Add("Employee ID", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Department", typeof(string));
    dataTable.Columns.Add("Joining Date", typeof(DateTime));
    // Add sample data to the DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    // Bind the DataTable to the DataGridView.
    dataGridView1.DataSource = dataTable;
}
Private Sub BindDataToDataGridView()
	' Create a new DataTable.
	Dim dataTable As New DataTable()
	' Define columns for the DataTable.
	dataTable.Columns.Add("Employee ID", GetType(Integer))
	dataTable.Columns.Add("Name", GetType(String))
	dataTable.Columns.Add("Department", GetType(String))
	dataTable.Columns.Add("Joining Date", GetType(DateTime))
	' Add sample data to the DataTable.
	For i As Integer = 1 To 25
		dataTable.Rows.Add(i, "Employee " & i, "Department " & (i Mod 5 + 1), DateTime.Now.AddDays(-i * 15))
	Next i
	' Bind the DataTable to the DataGridView.
	dataGridView1.DataSource = dataTable
End Sub
$vbLabelText   $csharpLabel

ボタンクリックイベントの処理

ユーザーとの主なやり取りポイントは、Windowsフォーム内のボタンになります。 このボタンは、クリックされたときにエクスポートプロセスを開始します。 このやり取りを設定する方法は次のとおりです:

  • Windowsフォームでは、DataGridViewデータをエクスポートする専用のボタンが必要です。
  • このボタンにはC#コード内でイベントハンドラメソッドがあります。 このメソッドは、ユーザーがボタンをクリックしたときにトリガされます。
private void btnExport_Click(object sender, EventArgs e)
{
    // Code to export data will go here
}
private void btnExport_Click(object sender, EventArgs e)
{
    // Code to export data will go here
}
Private Sub btnExport_Click(ByVal sender As Object, ByVal e As EventArgs)
	' Code to export data will go here
End Sub
$vbLabelText   $csharpLabel

DataGridViewからのデータエクスポート

DataGridViewのデータをエクスポートするには、まずIronXL名前空間を参照する必要があります:

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

イベントハンドラ内では、最初のステップとして新しいワークブックとワークシートをIronXLを使って初期化します。 ここにDataGridViewからのデータが転送されます。

  • WorkBookオブジェクトは、Excelファイル全体を表します。
  • ワークブック内のWorkSheetは、Excelファイルの個々のページまたはタブのようなものです。

ここでは、ワークブックを作成し、それにワークシートを追加します。 ワークシートには「ExportedData」という名前が付けられていますが、アプリケーションのコンテキストに応じた任意の名前を選ぶことができます。

WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("ExportedData");
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("ExportedData");
Dim workbook As WorkBook = WorkBook.Create()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("ExportedData")
$vbLabelText   $csharpLabel

Excelシートのデータ入力

次のステップでは、DataGridViewの行と列を通じて繰り返し処理し、それぞれのセルのデータを対応するExcelワークシートのセルにコピーすることが含まれます。

  • 外部ループは各行を進行し、内部ループはそれぞれの行内のすべての列を通過します。
  • DataGridViewの各セルの値をExcelワークシートの対応するセルに割り当てます。 これは、行用のインデックスiと列用のインデックスjを使用して行います。
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        // Convert row and column index to Excel cell address format
        string cellAddress = ConvertToCellAddress(i, j);
        worksheet[cellAddress].Value = dataGridView1.Rows[i].Cells[j].Value.ToString();
    }
}
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        // Convert row and column index to Excel cell address format
        string cellAddress = ConvertToCellAddress(i, j);
        worksheet[cellAddress].Value = dataGridView1.Rows[i].Cells[j].Value.ToString();
    }
}
For i As Integer = 0 To dataGridView1.Rows.Count - 1
	For j As Integer = 0 To dataGridView1.Columns.Count - 1
		' Convert row and column index to Excel cell address format
		Dim cellAddress As String = ConvertToCellAddress(i, j)
		worksheet(cellAddress).Value = dataGridView1.Rows(i).Cells(j).Value.ToString()
	Next j
Next i
$vbLabelText   $csharpLabel

行と列のインデックスをExcelのセルアドレスに変換するには、以下のようなヘルパーメソッドを使用できます:

private string ConvertToCellAddress(int row, int column)
{
    // Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
    // The following code converts a column index to this format.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    // Rows in Excel are labeled as 1, 2, 3, ..., n
    // Adding 1 because Excel is 1-based and our loop is 0-based.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
private string ConvertToCellAddress(int row, int column)
{
    // Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
    // The following code converts a column index to this format.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    // Rows in Excel are labeled as 1, 2, 3, ..., n
    // Adding 1 because Excel is 1-based and our loop is 0-based.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
Private Function ConvertToCellAddress(ByVal row As Integer, ByVal column As Integer) As String
	' Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
	' The following code converts a column index to this format.
	Dim columnLabel As String = ""
	Do While column >= 0
		columnLabel = ChrW(AscW("A"c) + column Mod 26) & columnLabel
		column = column \ 26 - 1
	Loop
	' Rows in Excel are labeled as 1, 2, 3, ..., n
	' Adding 1 because Excel is 1-based and our loop is 0-based.
	Dim rowLabel As String = (row + 1).ToString()
	Return columnLabel & rowLabel
End Function
$vbLabelText   $csharpLabel

Excelファイルの保存

すべてのデータが転送された後、次のステップはこのワークブックをExcelファイルとして保存することです。このステップにより、指定されたパスにExcelファイルがシステム上に作成されます。

workbook.SaveAs("DataGridViewExport.xlsx");
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
workbook.SaveAs("DataGridViewExport.xlsx");
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
workbook.SaveAs("DataGridViewExport.xlsx")
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
$vbLabelText   $csharpLabel

エラーハンドリング

データエクスポートプロセスにおいて、例外を処理することは、アプリケーションの安定性を確保するために重要です。 try-catchブロックでエクスポートロジックをラップすることで、ファイルアクセス権限やデータフォーマットの問題など、エクスポート中に発生する可能性のある問題が優雅にキャッチされ処理されることが保証されます。

try
{
    // Export logic
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
try
{
    // Export logic
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
Try
	' Export logic
Catch ex As Exception
	MessageBox.Show("An exception occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

出力

プログラムを実行すると次のインターフェースが表示されます:

C#でDataGridViewをExcelにエクスポートする方法: 図4 - 前のコードの出力フォーム

ここで、DataGridViewにデータが表示されているのがわかります。 次に、エクスポートボタンをクリックします。 これにより、DataGridViewからExcelファイルにデータがエクスポートされます。

C#でDataGridViewをExcelにエクスポートする方法: 図5 - エクスポート完了メッセージ

ここでは、メッセージボックスが表示され、データがExcelファイルにエクスポートされているのがわかります。これが出力されたExcelファイルです。

C#でDataGridViewをExcelにエクスポートする方法: 図6 - 前のフォームからエクスポートされた出力Excelファイル

結論

このガイドに従うことにより、C#とIronXLを使用してDataGridViewデータをExcelファイルにエクスポートする基本的かつ強力なツールを手に入れることができました。 この機能は、データ分析、レポート、またはさまざまな形式間でデータを移行する必要があるアプリケーションにとって重要です。 DataGridViewコントロールとIronXLライブラリのさまざまな機能を試すことで、よりカスタマイズされた高度な実装が可能になることを覚えておいてください。

IronXLは、その機能を探索するために無料トライアルを提供しています。 ライセンスは$liteLicenseから始まり、.NETアプリケーションでExcelファイルの操作のための信頼性と効率的なソリューションを求めるプロフェッショナルや組織にとって価値ある投資です。

あなたの旅はここで終わりません。 IronXLの機能と、Windows Formsアプリケーションを強化する他の方法をさらに探求し続けてください。 コーディングを楽しんでください!

よくある質問

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

IronXLライブラリを使用して、C#でDataGridViewからExcelファイルにデータをエクスポートできます。これには、Windows Formsプロジェクトの作成、NuGetを介したIronXLのインストール、およびDataGridViewからExcelワークシートへのデータ転送ロジックの実装が含まれます。

ExcelにエクスポートするためのDataGridViewの設定に必要な手順は何ですか?

手順には、Windows FormsプロジェクトでDataGridViewを作成し、データソースにバインドし、フォームにボタンを追加し、IronXLライブラリを使用してボタンのクリックイベントハンドラにエクスポートロジックを書き込むことが含まれます。

Visual Studio プロジェクトに IronXL をインストールする方法を教えてください。

Visual StudioプロジェクトにIronXLをインストールするには、「NuGetパッケージを管理」に移動し、IronXLを検索し、C#でDataGridViewをExcelにエクスポートするために必要なすべての依存関係を処理するためにそれをインストールします。

IronXLを使用して大きなExcelファイルをエクスポートできますか?

はい、IronXLはMicrosoft Excelオブジェクトライブラリを必要とせずに大規模なデータセットを処理する堅牢な機能を提供して、大きなExcelファイルのエクスポートを可能にします。

DataGridViewエクスポートチュートリアルでのボタンの役割は何ですか?

チュートリアルのボタンはエクスポートプロセスをトリガーします。クリックすると、IronXLライブラリを使用してDataGridViewからExcelファイルにデータを転送するロジックを実行します。

IronXLはDataGridViewからExcelへのデータ転送をどのように処理しますか?

IronXLはDataGridViewの行と列を反復処理し、それぞれのセルのデータを対応するExcelワークシートセルにコピーすることでデータ転送を促進します。

IronXLを使用したエクスポートプロセス中のエラーをどのように管理できますか?

try-catchブロックにエクスポートロジックをラップして例外をキャッチして処理することでエラーを管理し、ファイルアクセス許可の問題などが発生した場合でも円滑な操作を保証できます。

DataGridViewからデータをエクスポートした後にExcelファイルをどのように保存しますか?

データがIronXLを使用してExcelワークシートに転送されたら、IronXLのSaveAsメソッドを使用してファイルをシステムに保存できます。

IronXLの機能をテストするための無料トライアルは利用可能ですか?

はい、IronXLは.NETアプリケーションでのExcelファイル操作の機能を探求するための無料トライアルを提供しています。さらなる開発のためのライセンス情報もあります。

Curtis Chau
テクニカルライター

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

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