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

ASP.NET 操作 Excel 封裝類 ExcelHelper:基於 COM 元件的模板化輸出

     編輯:ASP.NET 基礎

封裝 Microsoft.Office.Interop.Excel COM 元件,提供模板導出、單元格寫入、資源釋放的完整生命週期管理,避免 Excel 進程殘留。

核心類別結構

public class ExcelHelper {
    private Excel.Application app;
    private Excel.Workbook workBook;
    private Excel.Worksheet workSheet;
    private object missing = Missing.Value;

    public string ReportModelPath { get; set; }
    public string OutPutFilePath { get; set; }

    public ExcelHelper(string modelPath, string outPath) {
        // 路徑驗證、建立 Application、開啟模板、取得 WorkSheet
    }

    public void SetCells(int row, int col, object content) {
        // 寫入單元格,自動處理 null
    }

    public void SaveFile() {
        // SaveAs、Dispose
    }

    protected void Dispose() {
        // 正確順序釋放:WorkBook.Close → App.Quit → ReleaseComObject → GC.Collect
    }
}

使用範例:導出訂單明細

protected void Export_Data() {
    string modelPath = Server.MapPath("ReportModel/導出訂單模板.csv");
    string outPath = Server.MapPath("Temp_Down/導出訂單明細_" + DateTime.Now.ToString("yyyyMMdd") + ".csv");

    using (var excel = new ExcelHelper(modelPath, outPath)) {
        using (var sdr = GetDataReader()) {
            int row = 1;
            while (sdr.Read()) {
                row++;
                excel.SetCells(row, 1, row - 1);
                excel.SetCells(row, 2, sdr["C_Name"]);
                excel.SetCells(row, 3, sdr["C_Mtel"]);
                // ... 其他欄位
            }
        }
        excel.SaveFile();
    }
}

關鍵最佳實踐

  • 模板先行:預先設計好表頭、樣式的 Excel/CSV 模板。
  • 資源釋放順序:WorkBook.Close → App.WorkBooks.Close → App.Quit → ReleaseComObject (WorkSheet, WorkBook, App) → GC.Collect,否則會留存 EXCEL.EXE 進程。
  • 例外處理:SaveFile 的 finally 必須呼叫 Dispose()。
  • 權限:IIS 執行身分需具備模板與輸出目錄的讀寫權限;伺服器需安裝 Office 或至少 Excel。

注意:生產環境高併發場景不建議直接使用 COM 元件,可改用 OpenXML (EPPlus, NPOI) 純 managed 實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved