IRONXLの使用 IronXLを使用して C# で GridView を Excel XLSX にエクスポートする方法 カーティス・チャウ 更新日:2026年3月1日 IronXL をダウンロード NuGet ダウンロード DLL ダウンロード 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る ASP.NET GridView から Excel ファイルにデータをエクスポートする IronXLをインストールし、WorkBook を作成し、GridView の行を反復処理し、各セルの値を対応するワークシートの位置に書き込み、ワークブックをディスクまたは HTTPASP.NETストリームに保存することで、C# で ASP.NET GridView を Excel XLSX ファイルにエクスポートできます。 この方法は、サーバーにMicrosoft Officeをインストールする必要がなく、 .NET Framework、 .NET Core、および.NET 5から.NET 10までのWebアプリケーションで確実に動作します。 GridViewのデータをExcelにエクスポートすることは、EnterpriseASP.NET Web Formsプロジェクトにおける標準的な要件です。 ユーザーは、レポート作成、オフライン分析、およびアーカイブのために、ブラウザから表形式データをスプレッドシートに取り込む必要がある。 課題は、Web サーバー環境で壊れる Office Interop の依存関係を導入することなく、サーバー側の GridView コントロールと適切に構造化された .xlsx ファイルとの間のギャップを埋めることです。 このガイドでは、段階的に機能が強化された 3 つのエクスポート パターンについて説明します。最小限の行ごとのエクスポート、列の自動サイズ調整機能を備えたヘッダーとデータのエクスポート、そしてレンダリングされた HTML を完全にバイパスする DataTable 駆動のエクスポートです。 各例では、C#のトップレベルステートメント互換コードとIronXL APIを使用しています。 ASP.NETプロジェクトにIronXLをインストールするにはどうすればよいですか? Visual Studioでパッケージ マネージャー コンソールを開き、次を実行します: Install-Package IronXL dotnet add package IronXL Install-Package IronXL dotnet add package IronXL SHELL または、ソリューションエクスプローラーでプロジェクトを右クリックし、 [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 $vbLabelText $csharpLabel 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)プロジェクトの両方で動作します。 Core プロジェクトでは、サーバー側のファイル パスを構築する際に、Server.MapPath を IWebHostEnvironment.WebRootPath または Path.Combine(Directory.GetCurrentDirectory(), "Exports") に置き換えてください。 GridViewをExcelファイルにエクスポートするにはどうすればよいですか? 最もシンプルなエクスポートパターンは、GridView でレンダリングされたすべての行を反復処理し、各セルのテキストを対応する Excel ワークシートのセルにコピーします。 ASPX マークアップに、<asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true" /> コントロールと <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 $vbLabelText $csharpLabel WorkBook.Create(ExcelFileFormat.XLSX) 呼び出しは、最新の Open XML フォーマットを対象としたメモリ内ワークブックを初期化します。 CreateWorkSheet("Employees") は最初のシートを追加します。 外側のループ(i)はデータ行を順に処理します。 内側のループ(j)は列を進みます。 行インデックス i + 1 はデータセルに使用され、行 0 のヘッダーが上書きされないようにします。 Excel InteropではなくIronXLを使用する理由とは? Excel Interopを使用するには、サーバーにMicrosoft Excelのライセンス版がインストールされている必要があり、メモリリークを防ぐために明示的に解放する必要のあるCOMオブジェクトが作成されます。IronXLは、.xlsx ファイルを Open XML パッケージとして直接読み書きします。COM、Office、Marshal.ReleaseComObject 定型文は不要です。 これにより、IIS、Azure App Service、Docker、およびOfficeが利用できないその他のサーバー環境でも信頼性の高い動作を実現します。 XLSXファイルのダウンロードに適したMIMEタイプは何ですか? ブラウザがバイト列をインラインで表示する代わりにファイル保存ダイアログを表示するようにするには、レスポンスのコンテンツタイプを application/vnd.openxmlformats-officedocument.spreadsheetml.sheet に設定し、ワークブックのバイト列をレスポンスストリームに書き込む前に 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 $vbLabelText $csharpLabel AutoSizeColumn(col) は、Excel デスクトップ アプリケーションの[書式] > [列幅の自動調整] アクションと同様に、セルの内容の長さに基づいて最適な列幅を計算するようにIronXLに指示します。 すべてのデータを書き込んだ後にループ内で呼び出す方が、各行ごとに呼び出すよりも効率的です。なぜなら、その時点で最終的な内容がわかっているからです。 太字の見出し、背景色、数値形式など、その他のスタイル設定オプションについては、 IronXLのセルスタイル設定チュートリアルをご覧ください。 セルを結合して、複数の列にまたがるレポートタイトルを作成することもできます。 ヘッダーセルに太字の書式を適用するにはどうすればよいですか? worksheet["A1"].Style によって返された IStyle オブジェクト (または範囲) を使用します。 値を書き込む前または後に 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" $vbLabelText $csharpLabel このパターンは、あらゆるサイズの範囲に一律に適用されます。スタイルプロパティの完全なリストについては、 IronXLスタイリング API リファレンスを参照してください。 データテーブルからデータを直接エクスポートするにはどうすればよいですか? レンダリングされた行を反復処理すると、エクスポートがコントロールの現在の視覚状態に結び付けられます。これは、ページング、ソート、および列の表示設定によって影響を受ける可能性があります。 DataTableからエクスポートすると、グリッドの構成方法に関係なく、決定論的な結果が得られます。 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 $vbLabelText $csharpLabel 列名は DataTable.Columns[i].ColumnName から取得され、これは GridView テンプレートで適用された表示名の上書きではなく、元のデータ スキーマを反映しています。 セル値は、列インデックスを使用して DataRow オブジェクトから取得され、各値が string にキャストされて SetCellValue を満たします。 このパターンは、ページングを使用する場合に特に有用です。反復処理では、現在表示されているページの行のみが返されますが、完全なページから読み込むと、すべてのレコードがエクスポートされます。 大規模なデータテーブルのエクスポートでは何が起こりますか? IronXLは、大規模なExcelデータセットのワークブックデータを効率的にストリーミングします。 100,000行を超えるエクスポートの場合は、ネストされたループで個々のセルを設定するのではなく、単一のワークシート操作内で呼び出しをバッチ処理することを検討してください。また、ワークブックをストリームに書き込み、サーバーRAMにファイル全体を保持することを避けるために、ストリームに段階的にフラッシュすることもできます。 エクスポート時のエラーはどのように処理しますか? 本番環境のエクスポートハンドラは、IronXLの操作を catch ブロックで囲み、問題が発生した場合はユーザーに分かりやすいメッセージを返す必要があります。 一般的な障害モードとしては、ディレクトリの欠落、ファイル権限エラー、セッションタイムアウト後に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 $vbLabelText $csharpLabel ファイルをディスクに保存するのではなく、ブラウザから直接ダウンロードする形で配信する Web アプリケーションの場合は、Response.BinaryWrite を使用するか、content-type および disposition ヘッダーを設定した後、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() $vbLabelText $csharpLabel このパターンでは、一時ファイルをディスクに書き込むことを回避できます。 MemoryStream はサーバー上で割り当てられ、byte[] にシリアル化されて、クライアントに直接送信されます。 Response.End() 呼び出しはレスポンスをフラッシュし、バイナリデータの後に追加のページマークアップが追加されるのを防ぎます。 複数のシートや高度なワークブックをエクスポートするにはどうすればよいですか? 単一の WorkBook には複数のシートを含めることができ、これは複数の GridView や、異なる粒度の同じデータセットを 1 つのファイルにエクスポートする必要がある場合に便利です。各タブごとに workbook.CreateWorkSheet(name) を一度呼び出してください。 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")) $vbLabelText $csharpLabel 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)、.xls (レガシー BIFF8)、.csv、および .tsv フォーマットの読み書きに対応しています。 ExcelFileFormat に渡される列挙値を変更するか、既存のファイルを読み込んで別の形式で保存することで、単一の API 呼び出しでExcel ファイル形式を変換できます。 次のステップは何ですか? IronXLを使用してASP.NET GridViewデータをExcel XLSXファイルにエクスポートするための、本番環境に対応した3つのパターンが利用可能になりました。 -行反復エクスポート-- 境界からの有効なエクスポートへの最短経路 GridView -ヘッダーと書式設定のエクスポート-- 見栄えの良いレポートのために、列の自動サイズ調整と太字ヘッダーを追加します DataTable駆動型エクスポート-- ページングまたはフィルタリングされたグリッドの場合、レンダリングされたコントロールを完全にバイパスします 次に取るべき論理的なステップは次のとおりです。 MemoryStream と Response.BinaryWrite を使用してブラウザのダウンロード応答を追加し、ユーザーがサーバー側の保存パスなしでファイルをすぐに受け取れるようにします。 IronXLフォーマット API を使用して、セルのスタイル設定 (太字の見出し、背景色の塗りつぶし、数値形式) を適用します。 3.複数のシートからなるワークブックを活用し、要約データと詳細データを単一のファイルにまとめて関係者に提供する。 IronXL の読み取り APIを使用して、Excel ファイルを DataTable オブジェクトに読み戻して、往復インポート/エクスポート ワークフローを実行します。 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 へのデータのエクスポートを設定および実行するための手順が説明されています。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 2026年3月1日 ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート C#とIronXLを使用して、 ASP.NET CoreでExcelファイルをダウンロードします。MVCコントローラーからMemoryStreamとFile()を使用して、XLSX、CSV、XML形式でデータをエクスポートします。コード例も含まれています。 詳しく読む 更新日 2026年3月1日 IronXLを使用してBlazorで Excel ファイルをエクスポートする方法 IronXLを使用してBlazor Server アプリケーションから Excel にデータをエクスポートする方法を学びます。このガイドでは、プロジェクトのセットアップ、サービス設計、条件付き書式、複数シートのレポート、エラー処理について、完全な C# コード例とともに説明します。 詳しく読む 更新日 2026年2月27日 StreamReader の代わりに C# で Excel ファイルを読み取る方法 StreamReader が Excel ファイルを読み取れない理由と、 IronXL を使用して C# .NETのディスクまたはメモリ ストリームから XLSX および XLS ワークブックを読み込む方法について説明します。 詳しく読む IronXLを使って C# で Excel のピボットテーブルを作成する方法C# で GridView を書式付きで ...
更新日 2026年3月1日 ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート C#とIronXLを使用して、 ASP.NET CoreでExcelファイルをダウンロードします。MVCコントローラーからMemoryStreamとFile()を使用して、XLSX、CSV、XML形式でデータをエクスポートします。コード例も含まれています。 詳しく読む
更新日 2026年3月1日 IronXLを使用してBlazorで Excel ファイルをエクスポートする方法 IronXLを使用してBlazor Server アプリケーションから Excel にデータをエクスポートする方法を学びます。このガイドでは、プロジェクトのセットアップ、サービス設計、条件付き書式、複数シートのレポート、エラー処理について、完全な C# コード例とともに説明します。 詳しく読む
更新日 2026年2月27日 StreamReader の代わりに C# で Excel ファイルを読み取る方法 StreamReader が Excel ファイルを読み取れない理由と、 IronXL を使用して C# .NETのディスクまたはメモリ ストリームから XLSX および XLS ワークブックを読み込む方法について説明します。 詳しく読む