首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 高效操作 Excel:拒絕 COM 互操作,採用 OLEDB/EPPlus 實現單元格級精準讀寫

     編輯:程式設計綜合問答

使用 `Microsoft.Office.Interop.Excel` (COM) 操作 Excel 雖然直觀,但缺點明顯:需安裝 Office、啟動進程慢、記憶體佔用高、無法在無介面伺服器運行。追求高效能、無依賴的生產環境,主流方案有二:

方案一:OLEDB Provider (適用 .xls / .xlsx,純 ADO.NET 風格)

string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'";
using (var conn = new OleDbConnection(connStr)) {
    conn.Open();
    // 讀取整張工作表
    var dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    string sheet = dt.Rows[0]["TABLE_NAME"].ToString();
    // 依儲存格座標更新:將 A1 視為 (0,0),需自行換算
    string sql = "UPDATE [" + sheet + "] SET F2 = '新值' WHERE F1 = '鍵值'";
    new OleDbCommand(sql, conn).ExecuteNonQuery();
}

優點: 無 Office 依賴、速度快、支援 SQL 語法。
缺點: 僅支援「列」導向操作,難以直接用「行號、列號」定位單一儲存格;需安裝 Access Database Engine。

方案二:EPPlus / NPOI / ClosedXML (強型別、單元格級 API、支援 .xlsx)

// EPPlus 範例
using (var pkg = new ExcelPackage(new FileInfo("test.xlsx"))) {
    var ws = pkg.Workbook.Worksheets[0];
    ws.Cells[3, 5].Value = "精準寫入第3行第5列"; // 1-based 索引
    pkg.Save();
}

優點: 物件模型豐富、支援樣式/公式/圖表、純 Managed Code、跨平台 (Core/5+/6/7/8)。
缺點: 超大檔 (百萬列+) 記憶體壓力大,可改用 NPOI SXSSF 流式寫入。

選型建議

場景推薦
簡單批量導入導出、資料量 < 10 萬列EPPlus / ClosedXML
需在 Linux 容器運行、無 Office 環境NPOI / ClosedXML
極大檔案、串流寫入、低記憶體NPOI SXSSF
舊專案維護、僅需簡單 UPDATE/INSERTOLEDB (配合 ACE Driver)

拋棄 COM,擁抱現代 .NET Excel 生態,讀寫效能提升 10 倍以上,部署零負擔。

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