C# DataGridView から Excel へのエクスポート: 書式設定の完全ガイド | IronXL

DataGridView データを Excel ファイルにエクスポートすることは、Windows Forms 開発で最も一般的なタスクの 1 つです。 売上レポート、在庫記録、顧客リストなど、表形式のデータを表示するビジネスアプリケーションを構築する場合、ユーザーはボタンをクリックするだけで、共有したりさらに分析したりできる適切な形式のExcelファイルを受け取ることを期待します。 課題は、すべてのエンドユーザーのマシンにMicrosoft Excelがインストールされていることを前提とせず、メモリリークを起こしたり、静かに動作しなくなったりするCOM相互運用クリーンアップコードに悩まされることなく、これをクリーンに実現することです。 このガイドでは、 IronXLを使用して C# で DataGridView を Excel にエクスポートする完全なプロセスを順を追って説明します。プロジェクトの設定から高度なセル書式設定まで、すべてを網羅しているので、本番環境で使用できるコードを作成できます。
DataGridViewのエクスポート用にWindowsフォームプロジェクトを設定するにはどうすればよいですか?
従来のデータのエクスポート方法は、Microsoft Interop に依存していました。つまり、[参照の追加] を開き、[COM] タブに移動して、Microsoft Excel オブジェクト ライブラリを選択し、メモリ リークを回避するために Marshal.ReleaseComObject を呼び出す脆弱なコードを記述していました。 このパターンでは、アプリケーションが実行されるすべてのマシンに Microsoft Excel がインストールされている必要があり、大規模なデータセットでは動作が遅くなり、Office ライセンスがない展開環境では COMException エラーが発生することがよくあります。 マイクロソフト自身のオフィスオートメーションに関するガイダンスでは、サーバーサイドおよび自動化シナリオにおいて、サードパーティ製ライブラリの使用を明確に推奨している。
IronXLは、それらの依存関係をすべて取り除きます。 これは、Microsoft OfficeやCOM登録なしで、.odsファイルを読み書きする純粋な.NETライブラリです。 NuGet経由でインストールすれば、すぐにコードを書き始めることができます。
NuGet経由でIronXLをインストールする
まず、Visual Studio で.NET 10 をターゲットとする新しい Windows フォーム アプリ プロジェクトを作成します。フォーム サーフェスに DataGridView コントロールと Button を追加します。 ボタンの名前を"btnExport"とし、ラベルを"Excelにエクスポート"とします。 次に、 NuGetパッケージ マネージャー コンソールを開き、以下を実行します。
Install-Package IronXL.Excel
Install-Package IronXL.Excel
フォームファイルの先頭に、必要な名前空間を追加してください。
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
これら 2 つの名前空間は、 Excel ワークブックの読み書きに必要なすべてのIronXL型と、エクスポート パイプラインにオブジェクトを接続する標準の System.Data 型をカバーしています。
DataGridViewコントロールにサンプルデータを読み込むにはどうすればよいですか?
エクスポートロジックを構築する前に、DataGridView に代表的なデータを入力します。 Form1_Load イベントは、DataTable をデータ ソースとしてバインドするのに適した場所です。 実際のアプリケーションでは、データベースにクエリを実行したり、サービスを呼び出したりしますが、ここではハードコードされた DataTable が構造を明確に示しています。 Microsoft Docs の DataGridView コントロールの概要には、コントロールがデータソースをどのように管理するかについての詳細な情報が記載されています。
DataTableをDataGridViewにバインドする
void Form1_Load(object sender, EventArgs e)
{
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));
dt.Rows.Add(1, "Laptop", 999.99m, 50);
dt.Rows.Add(2, "Mouse", 29.99m, 200);
dt.Rows.Add(3, "Keyboard", 79.99m, 150);
dt.Rows.Add(4, "Monitor", 349.99m, 75);
dt.Rows.Add(5, "Webcam", 89.99m, 120);
dataGridView1.DataSource = dt;
}
void Form1_Load(object sender, EventArgs e)
{
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));
dt.Rows.Add(1, "Laptop", 999.99m, 50);
dt.Rows.Add(2, "Mouse", 29.99m, 200);
dt.Rows.Add(3, "Keyboard", 79.99m, 150);
dt.Rows.Add(4, "Monitor", 349.99m, 75);
dt.Rows.Add(5, "Webcam", 89.99m, 120);
dataGridView1.DataSource = dt;
}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
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))
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)
dt.Rows.Add(5, "Webcam", 89.99D, 120)
dataGridView1.DataSource = dt
End Sub
このコードは、イベントハンドラのシグネチャにトップレベルのステートメントスタイルを使用しています。 DataTable には、整数、文字列、小数、整数の 4 つの型付き列があり、 IronXL はExcel ワークブックに書き込む際にこれらを保持します。 型付き列が重要なのは、 IronXLが数値列をテキストではなく数値セルとして書き込むため、ユーザーがExcelで値を再フォーマットすることなく並べ替えや合計を行うことができるからです。

DataGridView は、DataTable 列名から列ヘッダー行を自動的にレンダリングします。 エクスポート時には、ヘッダー行をExcelファイルに保持したいので、エクスポートコードではヘッダーをデータ行とは別に処理する必要があります。次のセクションでは、まさにその点について説明します。
本番環境での使用においては、DataTable が Entity Framework、Dapper、ADO .NET、またはその他のデータアクセス層から来た場合でも、同じパターンが適用されます。 DataGridView バインディングはエクスポートコードから分離されているため、エクスポートロジックに手を加えることなくデータソースを交換できます。
DataGridViewのデータをExcelファイルにエクスポートするにはどうすればよいですか?
コアとなるエクスポート処理は、ボタンクリックハンドラー内で実行されます。 IronXL は、列とセルのマッピングを自動的に処理するメソッドを LoadFromDataTable に提供します。 最もクリーンな方法は、DataGridView から DataTable を抽出し、それを直接渡すことです。 .xlsx フォーマットの基盤となる Open XML SDK は、 Microsoft によって文書化されており、 IronXLのような純粋な.NETソリューションがプログラムによる生成において Interop よりも優れている理由を裏付けています。
ボタンクリックエクスポートハンドラー
void btnExport_Click(object sender, EventArgs e)
{
try
{
DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dataGridView1.Columns)
dt.Columns.Add(column.HeaderText);
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.IsNewRow) continue;
DataRow dataRow = dt.NewRow();
for (int i = 0; i < dataGridView1.Columns.Count; i++)
dataRow[i] = row.Cells[i].Value ?? DBNull.Value;
dt.Rows.Add(dataRow);
}
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.DefaultWorkSheet;
worksheet.Name = "Product Data";
worksheet.LoadFromDataTable(dt, true);
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"DataGridViewExport.xlsx"
);
workbook.SaveAs(outputPath);
MessageBox.Show($"Exported successfully to:\n{outputPath}", "Export Complete",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"Export failed: {ex.Message}", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
void btnExport_Click(object sender, EventArgs e)
{
try
{
DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dataGridView1.Columns)
dt.Columns.Add(column.HeaderText);
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.IsNewRow) continue;
DataRow dataRow = dt.NewRow();
for (int i = 0; i < dataGridView1.Columns.Count; i++)
dataRow[i] = row.Cells[i].Value ?? DBNull.Value;
dt.Rows.Add(dataRow);
}
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.DefaultWorkSheet;
worksheet.Name = "Product Data";
worksheet.LoadFromDataTable(dt, true);
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"DataGridViewExport.xlsx"
);
workbook.SaveAs(outputPath);
MessageBox.Show($"Exported successfully to:\n{outputPath}", "Export Complete",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"Export failed: {ex.Message}", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Imports System
Imports System.Data
Imports System.IO
Imports System.Windows.Forms
Public Sub btnExport_Click(sender As Object, e As EventArgs)
Try
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 row.IsNewRow Then Continue For
Dim dataRow As DataRow = dt.NewRow()
For i As Integer = 0 To dataGridView1.Columns.Count - 1
dataRow(i) = If(row.Cells(i).Value, DBNull.Value)
Next
dt.Rows.Add(dataRow)
Next
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
worksheet.Name = "Product Data"
worksheet.LoadFromDataTable(dt, True)
Dim outputPath As String = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"DataGridViewExport.xlsx"
)
workbook.SaveAs(outputPath)
MessageBox.Show($"Exported successfully to:{Environment.NewLine}{outputPath}", "Export Complete",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show($"Export failed: {ex.Message}", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

LoadFromDataTable(dt, true) 呼び出しは、DataTable と、 IronXL に列名を Excel の最初の行として書き込むように指示するブール値フラグを受け取ります。これらがヘッダー セルになります。 ワークブックは、ハードコードされたパスではなく、Environment.SpecialFolder.Desktop を使用してユーザーのデスクトップに保存されるため、コードがユーザーアカウント間で移植可能になります。
null チェック (?? セルに値が含まれていない場合、DBNull.Value) prevents a NullReferenceException が発生します。 これは、オプション項目が空欄になる可能性がある実世界のデータにとって重要です。 IronXL は、文字列 "DBNull" の代わりに DBNull を空のセルとして書き込むため、出力がきれいになります。
Excel ファイルから DataGridView にデータを読み戻す方法の詳細については、 IronXL DataTable のドキュメントを参照してください。このドキュメントでは、逆の操作と、複数シートのワークブックのExcel を DataSet に変換する方法について説明しています。
エクスポートしたExcelファイルにProfessional書式設定を適用するにはどうすればよいですか?
Excelファイル内のプレーンなデータも機能的ではありますが、太字の見出し、内容に合わせた列幅、行の背景色を交互に使用するなど、プロフェッショナルな形式で出力されたデータであれば、ユーザーが信頼できるツールとなるか、エクスポート後にすぐに手作業で再フォーマットされるツールとなるかの違いが生じます。 IronXLは、フォント、色、枠線、数値形式、配置などを網羅する豊富なセルスタイル設定APIを提供しています。 スプレッドシートスタイルのOOXML仕様は、 IronXLが書き出す基本フォーマットを定義しており、準拠するアプリケーションであればどのアプリケーションでも出力が正しく開くことを保証しています。
ヘッダーのスタイルと行の交互の色を適用する
void ExportWithFormatting(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.DefaultWorkSheet;
worksheet.Name = "Formatted Export";
string[] headers = { "ID", "Product Name", "Price", "Stock" };
// Write and style header row
for (int col = 0; col < headers.Length; col++)
{
char colLetter = (char)('A' + col);
string cellAddress = $"{colLetter}1";
worksheet.SetCellValue(0, col, headers[col]);
worksheet[cellAddress].Style.Font.Bold = true;
worksheet[cellAddress].Style.Font.Height = 12;
worksheet[cellAddress].Style.SetBackgroundColor("#4472C4");
worksheet[cellAddress].Style.Font.Color = "#FFFFFF";
worksheet[cellAddress].Style.HorizontalAlignment =
IronXL.Styles.HorizontalAlignment.Center;
}
// Write data rows with alternating background 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() ?? string.Empty);
}
if (rowIndex % 2 == 0)
{
string rangeAddress = $"A{rowIndex + 1}:D{rowIndex + 1}";
worksheet[rangeAddress].Style.SetBackgroundColor("#D6DCE5");
}
rowIndex++;
}
// Format the Price column as currency
worksheet["C2:C100"].Style.Format = "$#,##0.00";
// Auto-fit column widths
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);
worksheet.AutoSizeColumn(3);
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"FormattedExport.xlsx"
);
workbook.SaveAs(outputPath);
MessageBox.Show("Formatted export complete.", "Done",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
void ExportWithFormatting(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.DefaultWorkSheet;
worksheet.Name = "Formatted Export";
string[] headers = { "ID", "Product Name", "Price", "Stock" };
// Write and style header row
for (int col = 0; col < headers.Length; col++)
{
char colLetter = (char)('A' + col);
string cellAddress = $"{colLetter}1";
worksheet.SetCellValue(0, col, headers[col]);
worksheet[cellAddress].Style.Font.Bold = true;
worksheet[cellAddress].Style.Font.Height = 12;
worksheet[cellAddress].Style.SetBackgroundColor("#4472C4");
worksheet[cellAddress].Style.Font.Color = "#FFFFFF";
worksheet[cellAddress].Style.HorizontalAlignment =
IronXL.Styles.HorizontalAlignment.Center;
}
// Write data rows with alternating background 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() ?? string.Empty);
}
if (rowIndex % 2 == 0)
{
string rangeAddress = $"A{rowIndex + 1}:D{rowIndex + 1}";
worksheet[rangeAddress].Style.SetBackgroundColor("#D6DCE5");
}
rowIndex++;
}
// Format the Price column as currency
worksheet["C2:C100"].Style.Format = "$#,##0.00";
// Auto-fit column widths
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);
worksheet.AutoSizeColumn(3);
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"FormattedExport.xlsx"
);
workbook.SaveAs(outputPath);
MessageBox.Show("Formatted export complete.", "Done",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Option Strict On
Sub ExportWithFormatting(sender As Object, e As EventArgs)
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
worksheet.Name = "Formatted Export"
Dim headers As String() = {"ID", "Product Name", "Price", "Stock"}
' Write and style header row
For col As Integer = 0 To headers.Length - 1
Dim colLetter As Char = ChrW(AscW("A"c) + col)
Dim cellAddress As String = $"{colLetter}1"
worksheet.SetCellValue(0, col, headers(col))
worksheet(cellAddress).Style.Font.Bold = True
worksheet(cellAddress).Style.Font.Height = 12
worksheet(cellAddress).Style.SetBackgroundColor("#4472C4")
worksheet(cellAddress).Style.Font.Color = "#FFFFFF"
worksheet(cellAddress).Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center
Next
' Write data rows with alternating background 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
If rowIndex Mod 2 = 0 Then
Dim rangeAddress As String = $"A{rowIndex + 1}:D{rowIndex + 1}"
worksheet(rangeAddress).Style.SetBackgroundColor("#D6DCE5")
End If
rowIndex += 1
Next
' Format the Price column as currency
worksheet("C2:C100").Style.Format = "$#,##0.00"
' Auto-fit column widths
worksheet.AutoSizeColumn(0)
worksheet.AutoSizeColumn(1)
worksheet.AutoSizeColumn(2)
worksheet.AutoSizeColumn(3)
Dim outputPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "FormattedExport.xlsx")
workbook.SaveAs(outputPath)
MessageBox.Show("Formatted export complete.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub

書式設定コードは、いくつかの手法を適用しています。 ヘッダー行は青色の背景(#4472C4)に白色のテキスト、12ポイントの太字フォント、中央揃えで表示されます。これは標準的なビジネス用スプレッドシートのスタイルです。 データ行は偶数行ごとに白と薄灰色(#D6DCE5)が交互に表示されるため、ユーザーは広い表でも自分の位置を見失うことなく読みやすくなります。 価格列は、Excelに組み込まれている通貨形式($#,##0.00)を使用しているため、基となる数値データは変更されずに、スプレッドシート上で値がドル記号と小数点以下2桁で表示されます。 AutoSizeColumn 各列を最長の値に合わせて調整し、コンテンツが切り捨てられないようにします。
このパターンは、セルの境界線のスタイル設定、条件付き書式設定、データ検証ルールなどによってさらに拡張できます。 企業テンプレートに合わせる必要があるレポートの場合は、ページレイアウトと印刷範囲を設定することで、エクスポートされたファイルを調整なしで印刷できる状態にすることもできます。
大規模データセットの処理とパフォーマンスチューニングはどのように行っていますか?
DataGridView が数千行にバインドされている場合、セルごとに反復処理すると著しく遅くなります。 2つの最適化により、パフォーマンスが大幅に向上しました。 まず、セルごとの呼び出し SetCellValue の代わりに LoadFromDataTable を使用してください。 第二に、データソースが DataTable の場合は、DataGridView 行から値を抽出するのではなく、それをIronXLに直接渡してください。
void ExportLargeDataset(DataTable sourceTable)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Direct DataTable load -- fastest path for large data
worksheet.LoadFromDataTable(sourceTable, true);
// Apply header styling after load
int colCount = sourceTable.Columns.Count;
for (int col = 0; col < colCount; col++)
{
char colLetter = (char)('A' + col);
worksheet[$"{colLetter}1"].Style.Font.Bold = true;
worksheet[$"{colLetter}1"].Style.SetBackgroundColor("#4472C4");
worksheet[$"{colLetter}1"].Style.Font.Color = "#FFFFFF";
}
workbook.SaveAs(Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"LargeExport.xlsx"
));
}
void ExportLargeDataset(DataTable sourceTable)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Direct DataTable load -- fastest path for large data
worksheet.LoadFromDataTable(sourceTable, true);
// Apply header styling after load
int colCount = sourceTable.Columns.Count;
for (int col = 0; col < colCount; col++)
{
char colLetter = (char)('A' + col);
worksheet[$"{colLetter}1"].Style.Font.Bold = true;
worksheet[$"{colLetter}1"].Style.SetBackgroundColor("#4472C4");
worksheet[$"{colLetter}1"].Style.Font.Color = "#FFFFFF";
}
workbook.SaveAs(Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"LargeExport.xlsx"
));
}
Option Strict On
Sub ExportLargeDataset(sourceTable As DataTable)
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Direct DataTable load -- fastest path for large data
worksheet.LoadFromDataTable(sourceTable, True)
' Apply header styling after load
Dim colCount As Integer = sourceTable.Columns.Count
For col As Integer = 0 To colCount - 1
Dim colLetter As Char = ChrW(AscW("A"c) + col)
worksheet($"{colLetter}1").Style.Font.Bold = True
worksheet($"{colLetter}1").Style.SetBackgroundColor("#4472C4")
worksheet($"{colLetter}1").Style.Font.Color = "#FFFFFF"
Next
workbook.SaveAs(Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"LargeExport.xlsx"
))
End Sub
10,000 行を超えるデータセットの場合、エクスポートをバックグラウンド スレッドで実行することで、UI の応答性を維持できます。エクスポート ロジックを Task.Run でラップし、MessageBox.Show コールを Invoke を使用して UI スレッドにマーシャリングします。 IronXLは、別々のインスタンスでの書き込み操作に対してスレッドセーフなので、必要に応じて複数のエクスポートを同時に実行できます。
追加のパフォーマンスリソース:
DataGridViewのエクスポートに関して、 IronXLとMicrosoft Interopを比較するとどうなりますか?
多くの開発者は、Microsoft Excel Interopから開発を始めます。なぜなら、これはOfficeに同梱されており、追加のパッケージを必要としないからです。 しかし、相互運用性には、実運用環境ではすぐに顕在化する現実的なコストが伴う。 以下の表は、主な相違点をまとめたものです。
| 能力 | IronXL | Microsoft Interop |
|---|---|---|
| Microsoft Excelがインストールされている必要があります。 | なし | はい |
| サーバー/クラウド環境で動作します | はい | いいえ(マイクロソフトによるサポート対象外) |
| COMオブジェクトのクリーンアップが必要です | なし | はい(Marshal.ReleaseComObject) |
| 大規模データセットにおけるパフォーマンス | 高速(純粋な.NET) | 遅い(COMマーシャリングのオーバーヘッド) |
| インストール方法 | NuGet | COMリファレンス/オフィスインストール |
| サポートされている.NETバージョン | .NET 4.6.2 -- .NET 10 | .NET Frameworkのみ(制限あり) |
| XLSX、CSV、ODSに対応 | はい | Excel経由のXLSX/XLS形式のみ |
マイクロソフト自身のドキュメントでも、安定性やライセンス上の懸念を理由に、サーバーやサービスアカウントでOffice Interopを使用しないよう警告している。 IronXLは、Azure App Service、Windowsサービスホスト、Dockerコンテナ、およびExcelのようなデスクトップアプリケーションの実行が現実的でないその他のヘッドレス環境において、正しく動作します。
Interop を既に利用しているチームで移行を希望する場合、IronXL の API は WorkBook および WorkSheet の操作のほとんどが直接変換されるほど十分に近いマッピングになっています。 IronXL移行ガイドでは、一般的な相互運用パターンと、それに対応するIronXLの実装について解説しています。
次のステップは何ですか?
IronXLを使用して DataGridView データを Excel にエクスポートするには、 NuGetパッケージのインストールと数行のコードだけで済み、脆弱な COM 相互運用アプローチを、あらゆる展開環境で動作するクリーンで保守性の高いソリューションに置き換えることができます。 ここで説明するテクニック(基本的なエクスポート、フォーマット済み出力、大規模データセットの最適化、比較表)を使えば、この機能をWindows Formsアプリケーションに組み込んで出荷するために必要なすべてが揃います。
ここから、関連する以下の機能をご覧ください。
- C#でExcelファイルをゼロから作成する-- データソースなしでプログラムによってワークブックを構築する
- Excelファイルをデータテーブルに読み込む-- Excelデータをアプリケーションにインポートする逆の操作 -条件付き書式を適用する-- セルの値に基づいてセルを自動的に強調表示する
- Excelでグラフデータを設定し、エクスポートしたワークブックにグラフを埋め込む
- Excel ファイルのパスワード保護- エクスポートしたレポートを配布する前に保護します
- CSV形式にエクスポート-- 受信者がフラットファイル形式を必要とする場合、
.xlsx
プロジェクトでIronXLの全機能をテストするには、無料のトライアルを開始してください。また、本番環境への導入準備が整ったら、 IronXLのライセンスオプションをご確認ください。
よくある質問
DataGridViewデータをC#でExcelにエクスポートするにはどうしたらいいですか?
NuGet経由でIronXLをインストールし、DataGridView から DataTable を抽出し、WorkBook と WorkSheet を作成し、worksheet.LoadFromDataTable(dt, true) を呼び出して、workbook.SaveAs で保存します。
DataGridViewをExcelにエクスポートする際、どのようなフォーマットオプションがありますか?
IronXL は、太字フォント、背景色、フォント色、水平配置、数値形式 (通貨など)、列の自動サイズ調整、境界線スタイル、条件付き書式をサポートしています。
DataGridView データをエクスポートするには、Microsoft Excel をインストールする必要がありますか?
いいえIronXLは、Microsoft Office やマシン上の COM 登録を必要とせずに Excel ファイルを生成する純粋な.NETライブラリです。
DataGridViewをExcelにエクスポートするときに、ヘッダーのスタイルを設定できますか?
はい。ヘッダー行を書き込んだ後、アドレスで各ヘッダーセルにアクセスし、Style.Font.Bold、Style.SetBackgroundColor、Style.Font.Colorプロパティを設定します。
DataGridViewからエクスポートする際、Excelで行の色を交互に適用するにはどうすればよいですか?
DataGridView の行を反復処理するときに行インデックスを追跡し、偶数行の場合は、選択した 16 進色で worksheet[rangeAddress].Style.SetBackgroundColor を使用して範囲スタイルを適用します。
DataGridView を Excel にエクスポートするときに、大規模なデータセットをどのように処理すればよいですか?
セルを一つずつ反復処理するのではなく、基になるDataTableをworksheet.LoadFromDataTableに直接渡してください。非常に大きなデータセットの場合は、Task.Runを使用してバックグラウンドスレッドでエクスポートを実行してください。
DataGridView エクスポートに関してIronXLと Microsoft Excel Interop を比較するとどうなりますか?
IronXL はMicrosoft Excel を必要とせず、サーバーおよびクラウド環境で動作し、COM クリーンアップ コードを必要とせず、大規模なデータセットで大幅に高速に動作します。



