使用 IronXL 將 GridView 匯出到 Excel XLSX C#
將 ASP.NET GridView 中的資料匯出到 Excel 文件
在 .NET Framework 應用程式和現代 .NET 應用程式中,將 ASP.NET GridView 中的資料匯出到 Excel 檔案是一項常見需求。在 ASP.NET Web Forms 中,通常會使用伺服器控制項(例如asp:Button來觸發匯出功能。 無論是為管理層產生報告、與利害關係人共享資料集,還是為最終用戶建立可下載的電子表格,開發人員都需要一種可靠的方法將 GridView 內容轉換為格式正確的.XLSX文件,以保持資料的完整性和結構。
本文介紹如何使用IronXL (一個功能強大的 .NET Excel 檔案建立庫)完成此匯出過程。 與需要安裝 MS Excel 且在 Web 伺服器環境中難以運行的 Excel 互通方法不同,IronXL 完全透過程式碼產生原生 Excel 文件。 此程式庫無需在伺服器上安裝 Microsoft Office 即可處理.XLSX 、 .XLS和 CSV 輸出格式。 IronXL、Syncfusion XlsIO 和 LargeXlsx 也適用於處理大型資料集,無需 Microsoft Office 即可提供強大的功能。
本指南示範如何使用 IronXL 將 GridView 匯出到 Excel XLSX C#,並提供完整的、可運行的程式碼範例。 每個範例都包含完整的類別結構,其中包含object/byval sender和EventArgs e參數,詳細的解釋可協助開發人員理解實作和底層概念,以及適用於您下一個 Visual Studio 專案的實用技巧。 對於 Web 應用程序,請記住在提供.XLSX檔案時將響應 MIME 類型設定為application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ,以確保瀏覽器觸發檔案下載。
GridView匯出簡介
將 GridView 匯出到 Excel 檔案是現代 Web 應用程式中的常見需求,尤其是當使用者需要在應用程式外部分析、共用或存檔資料時。 透過將 GridView 資料轉換為 Excel 文件,您可以實現與 Microsoft Excel 的無縫匯入,使用戶能夠在熟悉的環境中輕鬆處理資料。 本文探討了將 GridView 匯出到 Excel 檔案最有效的方法,重點介紹適用於不同 .NET Web 專案的實用解決方案。
如何透過程式設計方式將 GridView 資料匯出到 Excel 表格?
以程式設計方式將 GridView 資料匯出到 Excel 工作表涉及從控制項中提取綁定資料並將其寫入 Excel 工作簿結構。 IronXL 透過提供直覺的 API 簡化了匯出流程,該 API 可在內部處理 Open XML 電子表格格式的複雜性。 開發人員使用的是熟悉的概念,例如工作簿、工作表、行和列,而不是直接處理 XML 模式。
// Quick example: Create an Excel file with IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Data");
worksheet["A1"].Value = "Hello from IronXL";
workbook.SaveAs("output.xlsx");// Quick example: Create an Excel file with IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Data");
worksheet["A1"].Value = "Hello from IronXL";
workbook.SaveAs("output.xlsx");注意:在 VB.NET 中,通常會使用Dim workbook和Dim worksheet語句初始化工作簿和工作表的物件。 這些與上面所示的 C# 物件建立相對應,其中WorkBook workbook和WorkSheet worksheet用於建立和配置 Excel 物件。
輸出
如何在我的 ASP.NET 專案中設定 IronXL?
使用 Visual Studio 中的 NuGet 套件管理器安裝 IronXL 只需幾秒鐘。 開啟程式包管理器控制台並執行以下程式碼:
Install-Package IronXL.ExcelInstall-Package IronXL.Excel使用 IronXL 將 GridView 匯出到 Excel XLSX(C#):圖 2 - 安裝
或者,在解決方案資源管理器中右鍵單擊您的項目,選擇"管理 NuGet 套件",搜尋"IronXL",然後按一下"安裝"。 該軟體包會自動將所有必需的引用和依賴項新增至您的專案。 IronXL 支援.NET Framework 應用程式(4.6.2 及更高版本),以及 .NET Core 和 .NET 5/6/7/8,讓您能夠靈活應對不同的專案類型和 Web 表單配置。
安裝完成後,將 IronXL 命名空間和 System 命名空間新增至您的程式碼隱藏檔案:
using System;
using System.Data;
using IronXL;using System;
using System.Data;
using IronXL;如何將 GridView 匯出到 Excel 檔案?
以下程式碼示範了當使用者點擊匯出按鈕時,如何將 ASP.NET GridView 控制項匯出到 Excel 檔案。 本範例使用了 Web 表單應用程式中典型的完整類別結構。
首先,ASPX 標記定義了一個<asp:GridView>和<asp:Button>使用runat="server"屬性,這些是標準的 ASP.NET 控制項:
<asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true">
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" /><asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true">
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" />後台程式碼檔案包含資料綁定方法和匯出邏輯:
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()
{
// Create new DataTable as data source
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)
{
// Create new Excel workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
{
worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
}
// Export GridView data to Excel worksheet
for (int i = 0; i < gvEmployees.Rows.Count; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
string cellValue = gvEmployees.Rows[i].Cells[j].Text;
worksheet.SetCellValue(i + 1, j, cellValue);
}
}
// Save Excel file to server path
string filename = Server.MapPath("~/Exports/EmployeeData.xlsx");
workbook.SaveAs(filename);
}
}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()
{
// Create new DataTable as data source
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)
{
// Create new Excel workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
{
worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
}
// Export GridView data to Excel worksheet
for (int i = 0; i < gvEmployees.Rows.Count; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
string cellValue = gvEmployees.Rows[i].Cells[j].Text;
worksheet.SetCellValue(i + 1, j, cellValue);
}
}
// Save Excel file to server path
string filename = Server.MapPath("~/Exports/EmployeeData.xlsx");
workbook.SaveAs(filename);
}
}此實作會在按一下匯出按鈕時建立一個新的WorkBook實例。 巢狀迴圈使用int i作為行索引遍歷 GridView 的每一行,並使用SetCellValue 方法將儲存格值寫入對應的 Excel 工作表位置。
輸出
使用 IronXL 將 GridView 匯出到 Excel XLSX(C#):圖 3 - GridView 輸出
使用 IronXL 將 GridView 匯出到 Excel XLSX(C#):圖 4 - GridView 到 Excel 輸出
在 VB.NET 中,這種導出邏輯通常位於以Sub開頭並以End Sub結尾的 DataTable 驅動過程中,從而強化了經典 ASP.NET Web Forms 專案中使用的熟悉的 datatable end sub 結構。
如何新增列標題和基本格式?
前面的範例匯出資料行,但省略了列標題。 此增強版本包含從 GridView 中提取的標題,並套用基本格式以提高輸出 Excel 檔案的可讀性。
protected void btnExport_Click(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write column headers from GridView to Excel sheet
int columnCount = gvEmployees.HeaderRow.Cells.Count;
for (int i = 0; i < columnCount; i++)
{
string headerText = gvEmployees.HeaderRow.Cells[i].Text;
worksheet.SetCellValue(0, i, headerText);
}
// Write data rows starting from row 1
int rowCount = gvEmployees.Rows.Count;
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
string cellValue = gvEmployees.Rows[i].Cells[j].Text;
worksheet.SetCellValue(i + 1, j, cellValue);
}
}
// Apply column auto-fit formatting for better display
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);
worksheet.AutoSizeColumn(3);
string filename = Server.MapPath("~/Exports/EmployeeReport.xlsx");
workbook.SaveAs(filename);
}protected void btnExport_Click(object sender, EventArgs e)
{
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write column headers from GridView to Excel sheet
int columnCount = gvEmployees.HeaderRow.Cells.Count;
for (int i = 0; i < columnCount; i++)
{
string headerText = gvEmployees.HeaderRow.Cells[i].Text;
worksheet.SetCellValue(0, i, headerText);
}
// Write data rows starting from row 1
int rowCount = gvEmployees.Rows.Count;
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
{
string cellValue = gvEmployees.Rows[i].Cells[j].Text;
worksheet.SetCellValue(i + 1, j, cellValue);
}
}
// Apply column auto-fit formatting for better display
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);
worksheet.AutoSizeColumn(3);
string filename = Server.MapPath("~/Exports/EmployeeReport.xlsx");
workbook.SaveAs(filename);
}HeaderRow屬性提供對 GridView 列標題的訪問,這些標題會寫入 Excel 工作表的第 0 行。 然後從第 1 行開始填入資料行(注意SetCellValue呼叫中的i + 1偏移量)。 此偏移量對於防止資料覆蓋標題行至關重要。
如何使用 ViewState 導出資料?
當GridView控制項綁定到DataTable時,直接存取DataSource比遍歷使用者介面中的 HTML 元素可以提供更簡潔的程式碼和更好的效能。
protected void btnExport_Click(object sender, EventArgs e)
{
// Cast DataSource to DataTable
DataTable sourceData = ViewState["EmployeeData"] as DataTable;
if (sourceData == null)
return; // or show error
// In VB.NET, this would be declared as: Dim dt As DataTable
// Create new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");
// Write headers from DataTable columns
for (int i = 0; i < sourceData.Columns.Count; i++)
{
worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
}
// Write data rows to Excel
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 filename = Server.MapPath("~/Exports/DataExport.xlsx");
workbook.SaveAs(filename);
}protected void btnExport_Click(object sender, EventArgs e)
{
// Cast DataSource to DataTable
DataTable sourceData = ViewState["EmployeeData"] as DataTable;
if (sourceData == null)
return; // or show error
// In VB.NET, this would be declared as: Dim dt As DataTable
// Create new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");
// Write headers from DataTable columns
for (int i = 0; i < sourceData.Columns.Count; i++)
{
worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
}
// Write data rows to Excel
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 filename = Server.MapPath("~/Exports/DataExport.xlsx");
workbook.SaveAs(filename);
}這種方法直接從DataTable的Columns集合中提取列名,並從DataRow物件中擷取單元格值。 使用底層資料來源消除了對GridView渲染的依賴,並且無論控制項的視覺狀態、分頁配置或預設顯示設定如何,都能提供一致的結果。
輸出
使用 IronXL 將 GridView 匯出到 Excel XLSX C#:圖 5 - 使用 ViewState 輸出匯出
對於涉及大型資料集或匯入資料操作的場景,IronXL 支援高效的工作表操作,可以處理數千行資料而不會出現記憶體問題。 該庫還可以載入和讀取現有的 Excel 文件,用於資料處理工作流程。
錯誤處理和輸出
將GridView匯出到 Excel 檔案時,請務必確保匯出過程可靠且易於使用。 錯誤可能由多種原因引起,例如檔案權限問題、無效資料或意外異常,因此強大的錯誤處理至關重要。 透過將匯出邏輯包裝在 try-catch 區塊中,您可以優雅地處理出現的任何問題,並向使用者提供清晰的回饋。
此外,自訂匯出流程的輸出可以提升使用者體驗。 您可以指定檔案名,選擇適當的檔案格式,並設定內容處置方式來控制 Excel 檔案如何交付給使用者(例如,作為下載附件)。
以下程式碼示範了將GridView匯出到 Excel 檔案時如何處理錯誤和輸出:
try
{
// Export GridView to Excel file
GridViewExport.ExcelExport(GridView1, "ExportedData");
Response.Write("Export successful! Your Excel file is ready.");
}
catch (Exception ex)
{
// Handle exception and inform the user
Response.Write("Error exporting data: " + ex.Message);
}try
{
// Export GridView to Excel file
GridViewExport.ExcelExport(GridView1, "ExportedData");
Response.Write("Export successful! Your Excel file is ready.");
}
catch (Exception ex)
{
// Handle exception and inform the user
Response.Write("Error exporting data: " + ex.Message);
}在這個例子中,導出過程被封裝在一個 try-catch 區塊中。 如果匯出成功,則會向使用者顯示確認訊息。 如果發生錯誤,catch 區塊會捕獲異常並輸出錯誤訊息,確保使用者了解其匯出狀態。 您還可以透過設定檔案名稱、檔案類型和內容處置標頭來進一步自訂輸出,以控制 Excel 檔案在下載期間如何呈現給使用者。
結論
使用 IronXL,將 ASP.NET GridView資料匯出到 Excel 檔案變得非常簡單。 此程式庫可處理工作簿建立、儲存格填入和文件生成,而無需伺服器上的 MS Excel 或 Microsoft Office 相依性。 這使得 IronXL 特別適合 Web 應用程序,因為在這些應用程式中,伺服器端 Excel 產生必須在不同的託管環境中可靠地工作。
本文中的範例逐步展示如何從基本匯出功能逐步構建,包括新增列標題和格式設定。 最後一個範例中所示的DataTable方法為生產 .NET 應用程式提供了最強大的解決方案,無論GridView配置如何,都能確保資料完整性。 IronXL 的全面功能集還支援讀取現有的 Excel 檔案、處理公式以及管理多個工作表,以應對更複雜的報告場景。 此函式庫原生支援 XLSX 和 XLS 格式,必要時也能輸出 CSV 格式。
立即開始免費試用,在您的 ASP.NET 應用程式中實作GridView到 Excel 的匯出功能。 對於生產環境用途,請探索IronXL 的許可選項,包括具有專屬支援的永久許可證。
常見問題解答
使用 IronXL 將 GridView 匯出到 Excel 的主要目的是什麼?
IronXL 主要用於方便地將 ASP.NET GridView 中的資料匯出為 Excel 格式(如 XLSX),確保高效能且易於整合到 C# 應用程式中。
IronXL 在從 GridView 匯出時能否處理大型資料集?
是的,IronXL 經過最佳化,能夠在從 GridView 匯出到 Excel 的過程中高效處理大型資料集,同時保持速度和效能。
使用 IronXL 時是否可以自訂 Excel 輸出?
使用 IronXL,您可以自訂 Excel 輸出的各個方面,例如格式、樣式以及在匯出的檔案中包含其他資料或公式。
IronXL 與其他將 GridView 匯出到 Excel 的庫相比如何?
與其他一些庫相比,IronXL 提供了一種更直接、更靈活的方法,為現代 Excel 格式提供了強大的支持,並可與 C# 應用程式無縫整合。
IronXL 是否支援匯出為 XLSX 以外的其他格式?
是的,IronXL 支援匯出為多種 Excel 格式,包括 XLS、CSV 和 TSV,可滿足不同專案的需求。
在專案中使用 IronXL 需要哪些先決條件?
要使用 IronXL,您需要設定 .NET 環境,您可以透過 NuGet 將其安裝到您的 C# 專案中,輕鬆地將 IronXL 整合到您的專案中。
IronXL 能否非同步匯出 GridView 資料?
IronXL 支援非同步操作,允許開發人員將 GridView 資料匯出到 Excel 文件,而不會阻塞主應用程式線程。
我該如何開始使用 IronXL 將 GridView 匯出到 Excel?
首先,您可以參考 IronXL 的文件和範例,其中提供了有關設定和執行從 GridView 到 Excel 的資料匯出的逐步指導。






