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

C# 操作 Excel 生成報表(一):基礎數據填充與模板導出

     編輯:關於C語言

方案選型對比

核心代碼:模板填充


using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;

public void ExportReport()
{
    Excel.Application excel = null;
    Excel._Workbook wb = null;
    Excel._Worksheet ws = null;
    Excel.Range rng = null;
    object opt = Missing.Value;

    try
    {
        excel = new Excel.Application();
        wb = excel.Workbooks.Open(@"z:\Book1.xls", opt, opt, opt, opt, opt, opt, opt, opt, opt, opt, opt, opt);
        ws = (Excel._Worksheet)wb.Worksheets[1];

        string[] data = { "Cure", "26", "dahuzizyd.cnblogs.com", "漢", "按時?放..." };

        rng = ws.get_Range("B1", opt); rng.Value = data[0];
        rng = ws.get_Range("E1", opt); rng.Value = data[1];
        rng = ws.get_Range("B2", opt); rng.Value = data[2];
        rng = ws.get_Range("E2", opt); rng.Value = data[3];
        rng = ws.get_Range("A3", opt); rng.Value = data[4];

        excel.DisplayAlerts = false;
        wb.SaveAs(@"z:\Book2.xls", opt, opt, opt, opt, opt,
            Excel.XlSaveAsAccessMode.xlNoChange, opt, opt, opt, opt);
    }
    catch (Exception ex) { MessageBox.Show(ex.Message); }
    finally
    {
        wb?.Close(opt, opt, opt);
        excel?.Workbooks.Close();
        excel?.Quit();
        Marshal.ReleaseComObject(wb);
        Marshal.ReleaseComObject(excel);
        wb = null; excel = null;
        GC.Collect(); GC.WaitForPendingFinalizers();
    }
}

關鍵最佳實踐

  1. 釋放 COM 對象:Marshal.ReleaseComObject + GC.Collect,否則 Excel 進程殘留。
  2. DisplayAlerts = false:禁止彈窗阻塞自動化流程。
  3. 使用 Missing.Value:可選參數佔位,避免 Type.Missing 重複代碼。
  4. 錯誤處理:文件鎖定、路徑不存在、版本不兼容均需捕獲。

痛點與改進方向

  • 硬編碼單元格地址("B1")維護困難 → 下一篇引入「標記單元格」約定($+字段名)實現通用綁定。
  • 大量數據逐單元格寫入極慢 → 批量寫入 Range.Value = object[,]。
  • 服務端無 Excel → 考慮 EPPlus、NPOI、ClosedXML 純 .NET 庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案優點缺點
水晶報表/ActiveReports功能強、設計器完善授權費高、學習曲線陡、格子報表靈活性差
RDLC (VS2005+)免費、集成 VS邏輯複雜時編碼困難、需 VS2005+
Excel 自動化佈局極靈活、用戶熟悉、代碼精確控制需安裝 Excel、COM 互操作性能一般、服務端無 UI 環境需注意