`,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 功能、效能好 | 需引用套件、程式碼較多 | 正式產品、客戶交付、複雜報表 |
- 上一篇文章: JavaScript 動態新增 DropDownList 選項至指定索引位置
- 下一篇文章: .NET 非同步程式設計演進:EAP 與 APM 模式深度解析與代碼實戰
Copyright ©
程式碼之家 All Rights Reserved