對於格子複雜、格式固定的中式報表(如發票、統計表單),使用水晶報表或 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();
}
Range.Value 寫入。ws.PrintOut() 列印、或轉 PDF。Range.Value = object[,],效能提升百倍。ws.Shapes.AddPicture(...)。Range.EntireRow.Copy() + Insert() 實現明細表展開。app.Calculate() 重算公式。掌握此基礎模式,即可快速建構各類 Excel 報表產生器,滿足企業級列印與匯出需求。