首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

Repeater 資料匯出 Excel 實作:伺服器端產生 HTML 表格輸出

     編輯:ASP.NET 基礎

核心原理

利用 `Response.ContentType = "application/vnd.ms-excel"` 輸出 HTML `

`,Excel 可直接開啟,無需第三方元件。

完整實作步驟

1. 前端 Repeater 結構

<asp:Repeater ID="rptCatalog" runat="server">
    <HeaderTemplate><table border="1"><tr><th>ID</th><th>Name</th></tr></HeaderTemplate>
    <ItemTemplate><tr><td><%# Eval("ID") %></td><td><%# Eval("Name") %></td></tr></ItemTemplate>
    <FooterTemplate></table></FooterTemplate>
</asp:Repeater>
<asp:Button ID="btnExport" runat="server" Text="匯出 Excel" OnClick="btnExport_Click" />

2. 後端匯出邏輯

protected void btnExport_Click(object sender, EventArgs e) {
    Response.Clear();
    Response.Buffer = true;
    Response.ContentEncoding = System.Text.Encoding.UTF8;
    Response.Charset = "";
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment;filename=Catalog_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");

    // 讓 Repeater 重新渲染到 StringWriter
    using (var sw = new System.IO.StringWriter()) {
        using (var hw = new System.Web.UI.HtmlTextWriter(sw)) {
            rptCatalog.RenderControl(hw);
        }
        Response.Output.Write(sw.ToString());
    }
    Response.Flush();
    Response.End();
}

// 必須覆寫 VerifyRenderingInServerForm,否則 RenderControl 會拋出例外
public override void VerifyRenderingInServerForm(Control control) { }

進階:支援多工作表、樣式、欄寬的 NPOI/EPPlus 方案

HTML 輸出雖簡單但有限制:無法設定欄寬、儲存格格式、多工作表、公式。正式專案建議改用:

  • NPOI:開源、支援 .xls/.xlsx、無需安裝 Office
  • EPPlus:功能豐富、效能佳、.xlsx 專用
  • ClosedXML:API 直覺、建立於 OpenXML SDK 之上

NPOI 範例片段

var workbook = new HSSFWorkbook(); // .xls 用 HSSF,.xlsx 用 XSSF
var sheet = workbook.CreateSheet("Catalog");
var headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("ID");
headerRow.CreateCell(1).SetCellValue("Name");

int rowIdx = 1;
foreach (var item in catalogList) {
    var row = sheet.CreateRow(rowIdx++);
    row.CreateCell(0).SetCellValue(item.ID);
    row.CreateCell(1).SetCellValue(item.Name);
}
sheet.AutoSizeColumn(0); sheet.AutoSizeColumn(1);

using (var ms = new MemoryStream()) {
    workbook.Write(ms);
    Response.BinaryWrite(ms.ToArray());
}

方案選擇建議

方案優點缺點建議場景
HTML 輸出零依賴、程式碼極少無格式控制、大數據記憶體壓力大簡單匯出、內部工具、快速原型
NPOI/EPPlus完整 Excel 功能、效能好需引用套件、程式碼較多正式產品、客戶交付、複雜報表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved