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

DataGridView データをExcelファイルにエクスポートすることは、Windows Forms開発において最も一般的なタスクの1つです。 売上レポート、在庫記録、顧客リストなど、表形式のデータを表示するビジネスアプリケーションを構築する場合、ユーザーはボタンをクリックするだけで、共有したりさらに分析したりできる適切な形式のExcelファイルを受け取ることを期待します。 課題は、すべてのエンドユーザーのマシンにMicrosoft Excelがインストールされていることを前提とせず、メモリリークを起こしたり、静かに動作しなくなったりするCOM相互運用クリーンアップコードに悩まされることなく、これをクリーンに実現することです。 このガイドでは、プロジェクトのセットアップから高度なセルフォーマットまで、IronXLを使用してC#でDataGridViewをExcelにエクスポートする完全なプロセスを案内し、実用的なコードを提供します。
DataGridViewのエクスポート用にWindowsフォームプロジェクトを設定するにはどうすればよいですか?
従来のDataGridViewデータエクスポートアプローチはMicrosoft Interopに依存しており、Add Referenceを開いてCOMタブに移動し、Microsoft Excel Object Libraryを選択し、メモリリークを避けるためにMarshal.ReleaseComObjectを呼び出す脆弱なコードを書く必要がありました。 このパターンはアプリケーションが実行されるすべてのマシンにMicrosoft Excelがインストールされていることが必要で、大量のデータセットでは遅く動作し、Officeライセンスがないデプロイ環境でCOMExceptionエラーをしばしば発生させます。 マイクロソフト自身のオフィスオートメーションに関するガイダンスでは、サーバーサイドおよび自動化シナリオにおいて、サードパーティ製ライブラリの使用を明確に推奨している。
IronXLは、それらの依存関係をすべて取り除きます。 これは、Microsoft OfficeやCOM登録なしで.odsファイルを読み書きする純粋な.NETライブラリです。 NuGet経由でインストールすれば、すぐにコードを書き始めることができます。
NuGet経由でIronXLをインストールする
Visual Studioで.NET 10をターゲットにした新しいWindows Formsアプリプロジェクトを作成します。フォーム表面にButtonを追加します。 ボタンにbtnExportと名付け、ラベルを"Export to Excel"にします。 次に、 NuGetパッケージ マネージャー コンソールを開き、以下を実行します。
Install-Package IronXL.Excel
フォームファイルの先頭に、必要な名前空間を追加してください。
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
これら2つの名前空間は、Excelワークブックの読み書きに必要なすべてのIronXL型をカバーし、DataGridViewをエクスポートパイプラインに接続するために利用します。
DataGridViewコントロールにサンプルデータを読み込むにはどうすればよいですか?
エクスポートロジックを構築する前に、あなたのDataGridViewを代表的なデータで埋めます。 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で値を再フォーマットすることなく並べ替えや合計を行うことができるからです。

DataTableカラム名からカラムヘッダー行を自動的にレンダリングします。 エクスポート時には、ヘッダー行をExcelファイルに保持したいので、エクスポートコードではヘッダーをデータ行とは別に処理する必要があります。次のセクションでは、まさにその点について説明します。
実用的な使用では、Entity Framework、Dapper、ADO.NET、または他のいかなるデータアクセスレイヤーからDataTableが来る場合でも同じパターンが適用されます。 DataGridViewバインディングはエクスポートコードから切り離されているので、エクスポートロジックに触れずにデータソースを交換できます。
DataGridViewのデータをExcelファイルにエクスポートするにはどうすればよいですか?
コアとなるエクスポート処理は、ボタンクリックハンドラー内で実行されます。 IronXLはLoadFromDataTableメソッドを提供し、カラムからセルへのマッピングを自動的に処理します。 最もクリーンなアプローチは、DataTableを抽出して直接渡します。 Open XML SDKは.xlsxフォーマットの基礎となっており、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

DataTableと、最初のExcel行としてカラム名を書き込むようにIronXLに指示するブールフラグを受け取ります。これらがヘッダーセルとなります。 ワークブックはハードコードされたパスの代わりに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

書式設定コードは、いくつかの手法を適用しています。 ヘッダー行は白いテキスト、12ポイントのボールドフォント、中央揃えの青背景(#4472C4)を持ちます。これは標準的なビジネススプレッドシートスタイルです。 データ行は奇数行と偶数行で交互に白色と薄い灰色(#D6DCE5)に色分けされており、ユーザーが広いテーブルを横断しても位置を失わないようにします。 価格のカラムはExcelの組み込み通貨フォーマット($#,##0.00)を使用しているため、スプレッドシートではドル記号と小数点以下2桁で表示され、基礎となる数値データが変更されることはありません。 AutoSizeColumnは、コンテンツが切り捨てられないように、各カラムを最長の値にフィットさせます。
セル境界スタイリング、条件付き書式設定、およびデータ検証ルールを使用してこのパターンをさらに拡張できます。 企業テンプレートに合わせる必要があるレポートの場合は、ページレイアウトと印刷範囲を設定することで、エクスポートされたファイルを調整なしで印刷できる状態にすることもできます。
大規模データセットの処理とパフォーマンスチューニングはどのように行っていますか?
多数の行にDataGridViewがバインドされた場合、セルごとの反復は目に見えて遅くなります。 2つの最適化により、パフォーマンスが大幅に向上しました。 まず、セルごとのLoadFromDataTableを使用します。 第二に、データソースが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の応答が維持されます。エクスポートロジックをInvokeを使用します。 IronXLは、異なるWorkBookインスタンスでの書き込み操作に対してスレッドセーフです。必要に応じて複数のエクスポートを同時に実行できます。
追加のパフォーマンスリソース:
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は十分にマッピングされており、多くのWorkSheet操作が直接変換されます。 IronXL移行ガイドでは、一般的な相互運用パターンと、それに対応するIronXLの実装について解説しています。
次のステップは何ですか?
IronXLを使用したExcelへのDataGridViewデータのエクスポートは、NuGetパッケージのインストールと数行のコードで可能で、脆弱なCOMインタープリマップローチを、あらゆるデプロイ環境で動作するきれいでメンテナンス可能なソリューションに置き換えます。 ここで説明するテクニック(基本的なエクスポート、フォーマット済み出力、大規模データセットの最適化、比較表)を使えば、この機能をWindows Formsアプリケーションに組み込んで出荷するために必要なすべてが揃います。
ここから、関連する以下の機能をご覧ください。
- C#で最初からExcelファイルを作成する -- データソースなしでワークブックをプログラム的に構築
- ExcelファイルをDataTableに読み込む -- アプリケーションに戻して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 クリーンアップ コードを必要とせず、大規模なデータセットで大幅に高速に動作します。




