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

C# Excel 報表開發入門:模板填充資料與列印自動化

     編輯:關於C#

對於格子複雜、格式固定的中式報表(如發票、統計表單),使用水晶報表或 RDLC 往往靈活度不足。Excel 作為報表模板引擎,優勢在於:所見即所得的版面設計、豐富的格式控制、支援列印設定、客戶端廣泛安裝。本文示範最基礎的「開啟模板 → 填充指定儲存格 → 另存/列印」流程。

核心程式碼範例

Excel.Application app = null;
Excel.Workbook wb = null;
Excel.Worksheet ws = null;
Excel.Range rng = null;
object missing = Missing.Value;

try
{
    app = new Excel.Application();
    wb = app.Workbooks.Open(@"Z:\Book1.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
    ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);

    // 準備要填入的資料陣列
    string[] info = { "Cure", "26", "dahuzizyd.cnblogs.com", "漢", "按時 放奧斯丁奧斯丁非是否奧斯丁非" };

    // 逐一指定儲存格寫入
    rng = ws.get_Range("B1", missing); rng.Value = info[0];
    rng = ws.get_Range("E1", missing); rng.Value = info[1];
    rng = ws.get_Range("B2", missing); rng.Value = info[2];
    rng = ws.get_Range("E2", missing); rng.Value = info[3];
    rng = ws.get_Range("A3", missing); rng.Value = info[4];

    app.DisplayAlerts = false;
    wb.SaveAs(@"Z:\Book2.xls", missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    if (wb != null) { wb.Close(false, missing, missing); Marshal.ReleaseComObject(wb); }
    if (app != null) { app.Quit(); Marshal.ReleaseComObject(app); }
    wb = null; app = null; ws = null; rng = null;
    GC.Collect();
}

開發流程建議

  1. 設計模板:在 Excel 中排版好表格、合併儲存格、設定邊框字型、命名列印區域、頁首頁尾。
  2. 定義映射:建立「欄位名稱 ↔ 儲存格位址」對照表(可存於資料庫、XML 或程式碼常數)。
  3. 填充資料:迴圈遍歷映射表,透過 Range.Value 寫入。
  4. 輸出:另存 .xls/.xlsx、或直接 ws.PrintOut() 列印、或轉 PDF。

常見問題與對策

  • 需求變更頻繁:修改模板檔即可,無需重新編譯;若欄位位置改變,僅更新映射表。
  • 大量儲存格填充:改用陣列寫入 Range.Value = object[,],效能提升百倍。
  • 伺服器端自動化:Microsoft 不建議在伺服器端使用 Office Automation(穩定性、授權問題)。生產環境建議改用 Open XML SDK、EPPlus、NPOI 等純 .NET 函式庫。
  • COM 物件釋放:務必遵循「反向順序釋放、Marshal.ReleaseComObject、GC.Collect」三步驟,否則 Excel.exe 會殘留記憶體。

進階擴充

  • 支援圖片插入:ws.Shapes.AddPicture(...)。
  • 動態複製列:Range.EntireRow.Copy() + Insert() 實現明細表展開。
  • 公式計算:填入資料後呼叫 app.Calculate() 重算公式。

掌握此基礎模式,即可快速建構各類 Excel 報表產生器,滿足企業級列印與匯出需求。

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