IronXLを使用して C# で GridView を Excel XLSX にエクスポートする方法
ASP.NET GridView から Excel ファイルにデータをエクスポートする
C#でASP.NET GridViewをExcel XLSXファイルにエクスポートするには、IronXLをインストールし、WorkBookを作成し、GridView行を反復して、それぞれのセルの値を対応するワークシートの位置に書き込み、ワークブックをディスクまたはHTTPレスポンスストリームに保存します。 この方法は、サーバーにMicrosoft Officeをインストールする必要がなく、 .NET Framework、 .NET Core、および.NET 5から.NET 10までのWebアプリケーションで確実に動作します。
GridViewのデータをExcelにエクスポートすることは、EnterpriseASP.NET Web Formsプロジェクトにおける標準的な要件です。 ユーザーは、レポート作成、オフライン分析、およびアーカイブのために、ブラウザから表形式データをスプレッドシートに取り込む必要がある。 課題は、サーバーサイドの.xlsxファイルの間のギャップを埋めることです。特に、Webサーバー環境で破壊されるOffice Interop依存を導入しないようにすることがポイントです。
このガイドは、最小限の行単位のエクスポート、ヘッダーとデータのエクスポート(列の自動サイズ設定付き)、およびレンダリングされたHTMLを完全にバイパスするDataTable駆動エクスポートという、徐々に豊かなエクスポートパターンを順々に説明します。 各例では、C#のトップレベルステートメント互換コードとIronXL APIを使用しています。
ASP.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?
Visual Studioでパッケージ マネージャー コンソールを開き、次を実行します:
Install-Package IronXL.Excel
あるいは、ソリューションエクスプローラーでプロジェクトを右クリックし、NuGetパッケージの管理を選択してIronXLを検索し、インストールをクリックします。 NuGetはすべての推移的依存関係を自動的に解決します。
パッケージがインストールされた後、次のusingディレクティブをコードビハインドファイルに追加します。
using System;
using System.Data;
using System.Web.UI;
using IronXL;
using System;
using System.Data;
using System.Web.UI;
using IronXL;
Imports System
Imports System.Data
Imports System.Web.UI
Imports IronXL
IronXLは、 .NET Framework 4.6.2以降、および.NET Core 3.1、 .NET 5から.NET 10までをサポートしています。サーバー上でOfficeのインストールやCOM登録は不要です。 完全なAPIドキュメントは、 IronXLオブジェクトリファレンスで入手できます。
どのNuGetパッケージIDを使用すべきですか?
正しいパッケージIDはIronXL.Excelは古いエイリアスです)。 インストール後、アセンブリIronXL.dllが自動的に参照されます。 インストールされたバージョンは、ソリューションエクスプローラーのパッケージノードを確認するか、プロジェクトディレクトリからdotnet list packageを実行して確認できます。
IronXLはASP.NET Core Webアプリケーションで動作しますか?
はい。 同じAPIは、 ASP.NET Web FormsプロジェクトとASP.NET Core (MVCまたはRazor Pages)プロジェクトの両方で動作します。 コアプロジェクトでは、サーバーサイドのファイルパスを構築する際にPath.Combine(Directory.GetCurrentDirectory(), "Exports")に置き換えます。
GridViewをExcelファイルにエクスポートするにはどうすればよいですか?
最も簡単なエクスポートパターンは、GridViewでレンダリングされた各行に反復し、各セルのテキストを対応するExcelワークシートのセルにコピーします。 ASPXマークアップで、<asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" />ボタンを追加します。 runat="server"属性により、両方のコントロールはコードビハインドでアクセス可能になります。
コードビハインドは、初回読み込み時にサンプルデータをバインドし、ボタンクリック時にエクスポートします。
using System;
using System.Data;
using System.Web.UI;
using IronXL;
public partial class GridViewExport : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridView();
}
}
private void BindGridView()
{
DataTable dt = new DataTable();
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Salary", typeof(decimal));
dt.Rows.Add(1, "John Smith", "Engineering", 75000);
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
dt.Rows.Add(3, "Michael Chen", "Finance", 70000);
ViewState["EmployeeData"] = dt;
gvEmployees.DataSource = dt;
gvEmployees.DataBind();
}
protected void btnExport_Click(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write header row
for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
{
worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
}
// Write data rows
for (int i = 0; i < gvEmployees.Rows.Count; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
}
}
string filePath = Server.MapPath("~/Exports/EmployeeData.xlsx");
workbook.SaveAs(filePath);
}
}
using System;
using System.Data;
using System.Web.UI;
using IronXL;
public partial class GridViewExport : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridView();
}
}
private void BindGridView()
{
DataTable dt = new DataTable();
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Salary", typeof(decimal));
dt.Rows.Add(1, "John Smith", "Engineering", 75000);
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
dt.Rows.Add(3, "Michael Chen", "Finance", 70000);
ViewState["EmployeeData"] = dt;
gvEmployees.DataSource = dt;
gvEmployees.DataBind();
}
protected void btnExport_Click(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write header row
for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
{
worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
}
// Write data rows
for (int i = 0; i < gvEmployees.Rows.Count; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
}
}
string filePath = Server.MapPath("~/Exports/EmployeeData.xlsx");
workbook.SaveAs(filePath);
}
}
Imports System
Imports System.Data
Imports System.Web.UI
Imports IronXL
Public Partial Class GridViewExport
Inherits Page
Protected Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then
BindGridView()
End If
End Sub
Private Sub BindGridView()
Dim dt As New DataTable()
dt.Columns.Add("EmployeeID", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Department", GetType(String))
dt.Columns.Add("Salary", GetType(Decimal))
dt.Rows.Add(1, "John Smith", "Engineering", 75000)
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000)
dt.Rows.Add(3, "Michael Chen", "Finance", 70000)
ViewState("EmployeeData") = dt
gvEmployees.DataSource = dt
gvEmployees.DataBind()
End Sub
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")
' Write header row
For j As Integer = 0 To gvEmployees.HeaderRow.Cells.Count - 1
worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells(j).Text)
Next
' Write data rows
For i As Integer = 0 To gvEmployees.Rows.Count - 1
For j As Integer = 0 To gvEmployees.Rows(i).Cells.Count - 1
worksheet.SetCellValue(i + 1, j, gvEmployees.Rows(i).Cells(j).Text)
Next
Next
Dim filePath As String = Server.MapPath("~/Exports/EmployeeData.xlsx")
workbook.SaveAs(filePath)
End Sub
End Class
WorkBook.Create(ExcelFileFormat.XLSX)呼び出しは、最新のOpen XML形式をターゲットにしたメモリ内ワークブックを初期化します。 CreateWorkSheet("Employees")は最初のシートを追加します。 外側のループ(i)はデータ行を進めます; 内側のループ(j)は列を進めます。 行インデックスi + 1がデータセルに使用され、行0のヘッダーが上書きされないようにします。
Excel InteropではなくIronXLを使用する理由とは?
Excel Interopを使用するには、サーバーにMicrosoft Excelのライセンス版がインストールされている必要があり、メモリリークを防ぐために明示的に解放する必要のあるCOMオブジェクトが作成されます。 IronXLは、Open XMLパッケージとしてMarshal.ReleaseComObjectも不要です。 これにより、IIS、Azure App Service、Docker、およびOfficeが利用できないその他のサーバー環境でも信頼性の高い動作を実現します。
XLSXファイルのダウンロードに適したMIMEタイプは何ですか?
ブラウザにファイル保存ダイアログを表示させる場合、インラインでバイトを配信するのではなく、レスポンスのコンテンツタイプをContent-Disposition: attachmentヘッダーを追加します。
列ヘッダーと列の自動サイズ調整を追加するにはどうすればよいですか?
基本例はHeaderRow.Cellsから抽出されたヘッダーを書きますが、プロダクションエクスポートでは、Excelで手動調整なしでデータが読みやすくなるように各列を自動サイズ調整する必要もあります:
protected void btnExport_Click(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write column headers
int colCount = gvEmployees.HeaderRow.Cells.Count;
for (int i = 0; i < colCount; i++)
{
string header = gvEmployees.HeaderRow.Cells[i].Text;
worksheet.SetCellValue(0, i, header);
}
// Write data rows
for (int i = 0; i < gvEmployees.Rows.Count; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
}
}
// Auto-size each column for readability
for (int col = 0; col < colCount; col++)
{
worksheet.AutoSizeColumn(col);
}
string filePath = Server.MapPath("~/Exports/EmployeeReport.xlsx");
workbook.SaveAs(filePath);
}
protected void btnExport_Click(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write column headers
int colCount = gvEmployees.HeaderRow.Cells.Count;
for (int i = 0; i < colCount; i++)
{
string header = gvEmployees.HeaderRow.Cells[i].Text;
worksheet.SetCellValue(0, i, header);
}
// Write data rows
for (int i = 0; i < gvEmployees.Rows.Count; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
}
}
// Auto-size each column for readability
for (int col = 0; col < colCount; col++)
{
worksheet.AutoSizeColumn(col);
}
string filePath = Server.MapPath("~/Exports/EmployeeReport.xlsx");
workbook.SaveAs(filePath);
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")
' Write column headers
Dim colCount As Integer = gvEmployees.HeaderRow.Cells.Count
For i As Integer = 0 To colCount - 1
Dim header As String = gvEmployees.HeaderRow.Cells(i).Text
worksheet.SetCellValue(0, i, header)
Next
' Write data rows
For i As Integer = 0 To gvEmployees.Rows.Count - 1
For j As Integer = 0 To gvEmployees.Rows(i).Cells.Count - 1
worksheet.SetCellValue(i + 1, j, gvEmployees.Rows(i).Cells(j).Text)
Next
Next
' Auto-size each column for readability
For col As Integer = 0 To colCount - 1
worksheet.AutoSizeColumn(col)
Next
Dim filePath As String = Server.MapPath("~/Exports/EmployeeReport.xlsx")
workbook.SaveAs(filePath)
End Sub
AutoSizeColumn(col)は、セル内容の長さに基づいて最適な列幅をIronXLに計算させ、Excelデスクトップアプリケーションでのフォーマット > 列幅の自動調整アクションを反映します。 すべてのデータを書き込んだ後にループ内で呼び出す方が、各行ごとに呼び出すよりも効率的です。なぜなら、その時点で最終的な内容がわかっているからです。
追加のスタイリングオプション -- 太字のヘッダー、背景色、数値形式 -- を探求するには、IronXLセルスタイリングチュートリアルをご覧ください。 複数のカラムにわたるレポートのタイトルを作成するために、セルを結合することもできます。
ヘッダーセルに太字の書式を適用するにはどうすればよいですか?
worksheet["A1"].Style(またはレンジ)から返します。 値を書き込み前後にFont.Bold = trueを設定します - スタイルはセルの内容と切り離されます。
// Bold the entire header row (columns A through D)
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.FontColor = "#FFFFFF";
// Bold the entire header row (columns A through D)
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.FontColor = "#FFFFFF";
' Bold the entire header row (columns A through D)
Dim headerRange = worksheet("A1:D1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#4472C4"
headerRange.Style.Font.FontColor = "#FFFFFF"
このパターンは、あらゆるサイズの範囲に一律に適用されます。スタイルプロパティの完全なリストについては、 IronXLスタイリング API リファレンスを参照してください。
データテーブルからデータを直接エクスポートするにはどうすればよいですか?
レンダリングされたGridView行を反復することは、ページング、ソート、列の可視性設定に影響されるたびに、エクスポートをコントロールの現在の視覚的状態に拘束します。 下位のViewStateに保存してエクスポートすると、グリッドの構成に関係なく決定的な結果が得られます。
protected void btnExport_Click(object sender, EventArgs e)
{
DataTable sourceData = ViewState["EmployeeData"] as DataTable;
if (sourceData == null)
{
Response.Write("No data available to export.");
return;
}
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");
// Column headers from DataTable schema
for (int i = 0; i < sourceData.Columns.Count; i++)
{
worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
}
// Data rows from DataRow objects
for (int i = 0; i < sourceData.Rows.Count; i++)
{
for (int j = 0; j < sourceData.Columns.Count; j++)
{
worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
}
}
string filePath = Server.MapPath("~/Exports/DataExport.xlsx");
workbook.SaveAs(filePath);
}
protected void btnExport_Click(object sender, EventArgs e)
{
DataTable sourceData = ViewState["EmployeeData"] as DataTable;
if (sourceData == null)
{
Response.Write("No data available to export.");
return;
}
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");
// Column headers from DataTable schema
for (int i = 0; i < sourceData.Columns.Count; i++)
{
worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
}
// Data rows from DataRow objects
for (int i = 0; i < sourceData.Rows.Count; i++)
{
for (int j = 0; j < sourceData.Columns.Count; j++)
{
worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
}
}
string filePath = Server.MapPath("~/Exports/DataExport.xlsx");
workbook.SaveAs(filePath);
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
Dim sourceData As DataTable = TryCast(ViewState("EmployeeData"), DataTable)
If sourceData Is Nothing Then
Response.Write("No data available to export.")
Return
End If
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Report")
' Column headers from DataTable schema
For i As Integer = 0 To sourceData.Columns.Count - 1
worksheet.SetCellValue(0, i, sourceData.Columns(i).ColumnName)
Next
' Data rows from DataRow objects
For i As Integer = 0 To sourceData.Rows.Count - 1
For j As Integer = 0 To sourceData.Columns.Count - 1
worksheet.SetCellValue(i + 1, j, sourceData.Rows(i)(j).ToString())
Next
Next
Dim filePath As String = Server.MapPath("~/Exports/DataExport.xlsx")
workbook.SaveAs(filePath)
End Sub
列名はGridViewテンプレートに適用された表示名のオーバーライドではなく、元のデータスキーマを反映しています。 セル値はstringにキャストされます。
このパターンはDataTableから読み込むとすべてのレコードがエクスポートされます。
大規模なデータテーブルのエクスポートでは何が起こりますか?
IronXLは、大規模なExcelデータセットのワークブックデータを効率的にストリーミングします。 100,000行を超えるエクスポートの場合は、ネストループ内で個々のセルを設定するのではなく、単一のワークシート操作内でResponseストリームに逐次フラッシュすることもできます。
エクスポート時のエラーはどのように処理しますか?
プロダクションエクスポートハンドラーは、catchブロックでIronXL操作をラップし、問題が発生した場合にユーザーに説明メッセージを返すべきです。 共通の失敗モードには、ViewStateがnullになることが含まれます:
protected void btnExport_Click(object sender, EventArgs e)
{
try
{
DataTable sourceData = ViewState["EmployeeData"] as DataTable;
if (sourceData == null)
throw new InvalidOperationException("Session data has expired. Please reload the page.");
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
for (int i = 0; i < sourceData.Columns.Count; i++)
worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
for (int i = 0; i < sourceData.Rows.Count; i++)
for (int j = 0; j < sourceData.Columns.Count; j++)
worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
string filePath = Server.MapPath("~/Exports/SafeExport.xlsx");
workbook.SaveAs(filePath);
lblStatus.Text = "Export successful. File saved to server.";
}
catch (Exception ex)
{
lblStatus.Text = $"Export failed: {ex.Message}";
}
}
protected void btnExport_Click(object sender, EventArgs e)
{
try
{
DataTable sourceData = ViewState["EmployeeData"] as DataTable;
if (sourceData == null)
throw new InvalidOperationException("Session data has expired. Please reload the page.");
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
for (int i = 0; i < sourceData.Columns.Count; i++)
worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
for (int i = 0; i < sourceData.Rows.Count; i++)
for (int j = 0; j < sourceData.Columns.Count; j++)
worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
string filePath = Server.MapPath("~/Exports/SafeExport.xlsx");
workbook.SaveAs(filePath);
lblStatus.Text = "Export successful. File saved to server.";
}
catch (Exception ex)
{
lblStatus.Text = $"Export failed: {ex.Message}";
}
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
Try
Dim sourceData As DataTable = TryCast(ViewState("EmployeeData"), DataTable)
If sourceData Is Nothing Then
Throw New InvalidOperationException("Session data has expired. Please reload the page.")
End If
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")
For i As Integer = 0 To sourceData.Columns.Count - 1
worksheet.SetCellValue(0, i, sourceData.Columns(i).ColumnName)
Next
For i As Integer = 0 To sourceData.Rows.Count - 1
For j As Integer = 0 To sourceData.Columns.Count - 1
worksheet.SetCellValue(i + 1, j, sourceData.Rows(i)(j).ToString())
Next
Next
Dim filePath As String = Server.MapPath("~/Exports/SafeExport.xlsx")
workbook.SaveAs(filePath)
lblStatus.Text = "Export successful. File saved to server."
Catch ex As Exception
lblStatus.Text = $"Export failed: {ex.Message}"
End Try
End Sub
ファイルをディスクに保存するのではなく、ブラウザの直接ダウンロードとして配信するWebアプリケーションには、Response.OutputStreamに書き込みます。 ~/Exports/ディレクトリが存在し、IISアプリケーションプールIDに書き込み権限があることを確認してください。
XLSXファイルをブラウザからダウンロードできるようにするにはどうすればよいですか?
workbook.SaveAs(filePath)をストリームベースのレスポンスに置き換えます:
using System.IO;
// ... inside btnExport_Click after populating the worksheet ...
byte[] fileBytes;
using (MemoryStream ms = new MemoryStream())
{
workbook.SaveAs(ms);
fileBytes = ms.ToArray();
}
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
using System.IO;
// ... inside btnExport_Click after populating the worksheet ...
byte[] fileBytes;
using (MemoryStream ms = new MemoryStream())
{
workbook.SaveAs(ms);
fileBytes = ms.ToArray();
}
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
Imports System.IO
' ... inside btnExport_Click after populating the worksheet ...
Dim fileBytes As Byte()
Using ms As New MemoryStream()
workbook.SaveAs(ms)
fileBytes = ms.ToArray()
End Using
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx")
Response.BinaryWrite(fileBytes)
Response.End()
このパターンでは、一時ファイルをディスクに書き込むことを回避できます。 byte[]にシリアル化され、クライアントに直接送信されます。 Response.End()呼び出しはレスポンスをフラッシュし、バイナリデータの後に追加ページマークアップが付加されるのを防ぎます。
複数のシートや高度なワークブックをエクスポートするにはどうすればよいですか?
単一のworkbook.CreateWorkSheet(name)を1回呼び出します:
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet summary = workbook.CreateWorkSheet("Summary");
WorkSheet detail = workbook.CreateWorkSheet("Detail");
// Populate summary sheet ...
// Populate detail sheet ...
workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"));
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet summary = workbook.CreateWorkSheet("Summary");
WorkSheet detail = workbook.CreateWorkSheet("Detail");
// Populate summary sheet ...
// Populate detail sheet ...
workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"));
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim summary As WorkSheet = workbook.CreateWorkSheet("Summary")
Dim detail As WorkSheet = workbook.CreateWorkSheet("Detail")
' Populate summary sheet ...
' Populate detail sheet ...
workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"))
IronXLは既存のExcelファイルの読み込みもサポートしているため、ブランドや書式設定済みのテンプレートを読み込み、特定のセルにデータを挿入して、結果を保存することができます。その際、テンプレートに既に含まれているグラフ、画像、スタイルは保持されます。
さらにリッチな出力のために、IronXLはExcelの数式サポート、条件付き書式設定、チャート作成、および画像の埋め込みを提供します。 これらの機能については、 IronXLのチュートリアルセクションに記載されています。
IronXLはEPPlusやClosedXMLと比べてどうですか?
| フィーチャー | IronXL | EPPlus | クローズドXML |
|---|---|---|---|
| オフィスへのインストールが必要です | なし | なし | なし |
| XLSXファイルの読み書き | はい | はい | はい |
| XLS(レガシー)サポート | はい | なし | なし |
| CSV / TSV エクスポート | はい | なし | 部分的 |
| チャート作成API | はい | はい | 制限的 |
| ライセンスモデル | 永久ライセンス + SaaS | ポリフォーム非商用 | MIT |
| .NET 10 のサポート | はい | はい | はい |
EPPlusはバージョン5で商用ライセンスに移行したため、既に商用.NETライブラリのエコシステムに投資しているチームにとって、 IronXLは自然な代替手段となった。 ClosedXMLはMITライセンスのままですが、チャートのサポートは限定的です。 正しい選択は、プロジェクトのライセンス制約、必要なExcel機能、およびレガシー.xls形式のサポートが必要かどうかによります。
IronXLはどのようなExcel形式をサポートしていますか?
IronXLは.xlsx(Office Open XML)、.tsv形式を読み書きします。 Excelファイル形式間の変換は、WorkBook.Createで1つのAPI呼び出しで行うか、既存のファイルを読み込み、別の形式で保存することで行えます。
次のステップは何ですか?
IronXLを使用してASP.NET GridViewデータをExcel XLSXファイルにエクスポートするための、本番環境に対応した3つのパターンが利用可能になりました。
- 行反復エクスポート -- バインドされた
GridViewからの動作するエクスポートへの最速のルート -ヘッダーと書式設定のエクスポート-- 見栄えの良いレポートのために、列の自動サイズ調整と太字ヘッダーを追加します- DataTable駆動型エクスポート-- ページングまたはフィルタリングされたグリッドの場合、レンダリングされたコントロールを完全にバイパスします
次に取るべき論理的なステップは次のとおりです。
Response.BinaryWriteを使用してブラウザダウンロードレスポンスを追加し、ユーザーがサーバーサイドの保存パスなしで即座にファイルを受け取れるようにします。- セルスタイリングを適用 -- 太字のヘッダー、背景色の塗り、数値形式 -- IronXLのフォーマットAPIを使用します。 3.複数のシートからなるワークブックを活用し、要約データと詳細データを単一のファイルにまとめて関係者に提供する。
- ラウンドトリップインポート/エクスポートワークフローのためにIronXLの読み込みAPIを使用して
DataTableオブジェクトにExcelファイルを再度読み込みます。 - ironsoftware.com/csharp/excel/で無料トライアルを開始し、フル機能のトライアルライセンスを使用してプロジェクトですべての機能をテストしてください。
文書生成パイプラインを構築するチームにとって、 IronPDFはIronXLと連携してワークシートを直接PDFにエクスポートできます。 Iron Suiteは、IronXLにIronPDF、 IronOCR、 IronBarcode、 IronZIPをセットにしたお得な価格で提供します。
よくある質問
GridView を Excel にエクスポートするためにIronXLを使用する主な目的は何ですか?
IronXLは主に、 ASP.NET GridView から XLSX などの Excel 形式へのデータのエクスポートを容易にするために使用され、C# アプリケーションでの高パフォーマンスと統合の容易さを保証します。
IronXL はGridView からエクスポートするときに大きなデータセットを処理できますか?
はい、 IronXL は、GridView から Excel へのエクスポート プロセス中に大規模なデータセットを効率的に処理し、速度とパフォーマンスを維持するように最適化されています。
IronXLを使用する際に Excel 出力をカスタマイズすることは可能ですか?
IronXLを使用すると、書式設定、スタイル設定、エクスポートされたファイルに追加のデータや数式を含めるなど、Excel 出力のさまざまな側面をカスタマイズできます。
GridView を Excel にエクスポートするための他のライブラリと比べて、 IronXL はどうですか?
IronXL は、他のライブラリに比べてより簡単で柔軟なアプローチを提供し、最新の Excel 形式のサポートと C# アプリケーションとの直接統合を提供します。
IronXL はXLSX 以外の形式へのエクスポートをサポートしていますか?
はい、 IronXL はXLS、CSV、TSV などのさまざまな Excel 形式へのエクスポートをサポートしており、さまざまなプロジェクト要件に柔軟に対応できます。
プロジェクトでIronXL を使用するための前提条件は何ですか?
IronXLを使用するには、 .NET環境が必要であり、C# プロジェクトでNuGet経由でIronXL をインストールできます。
IronXL はGridView データを非同期にエクスポートできますか?
IronXL は非同期操作をサポートしているため、開発者はメイン アプリケーション スレッドをブロックすることなく GridView データを Excel ファイルにエクスポートできます。
GridView を Excel にエクスポートするためにIronXLの使用を開始するにはどうすればよいですか?
開始するには、IronXL のドキュメントと例を参照してください。GridView から Excel へのデータのエクスポートを設定および実行するための手順が説明されています。




