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

C# 與 Excel 互操作完整範例 - 七種資料匯出方式詳解

     編輯:關於C語言

範例架構

WinForms 介面含 ComboBox 選擇匯出方式、Button 觸發執行。七種案例對應七個私有方法。

七種匯出方式

  1. CellByCell:逐儲存格寫入 Range.Value,適合少量資料。
  2. UseArray:建立二維陣列 object[,],一次 Range.Value = arr 批量寫入,效能大幅提升。
  3. ADORecordset:ADO.NET OleDbDataReader 讀取 Access,Range.CopyFromRecordset 一次匯入整個資料集。
  4. QueryTable:建立 QueryTable 連結資料庫,Refresh() 直接將查詢結果填入工作表。
  5. Clipboard:資料貼上剪貼簿,Worksheet.Paste 貼上至 Excel。
  6. Create_TextFile:匯出製表符分隔文字檔,再用 Workbooks.OpenText 開啟並另存為 .xls。
  7. Use_ADONET:以 OLEDB 連接 Excel 檔案本身,執行 INSERT SQL 直接寫入工作表(需工作表已存在同名表格)。

共用物件管理

private Excel.Application m_objExcel;
private Excel.Workbooks m_objBooks;
private Excel._Workbook m_objBook;
private Excel.Sheets m_obJSheets;
private Excel._Worksheet m_obJSheet;
private Excel.Range m_objRange;
private object m_objOpt = System.Reflection.Missing.Value;

資源釋放模式

每次執行結束釋放 COM 物件參考並呼叫 GC.Collect():

m_objFont = null; m_objRange = null; m_obJSheet = null;
m_obJSheets = null; m_objBooks = null; m_objBook = null; m_objExcel = null;
GC.Collect();

關鍵技術點

  • Range.get_Resize(rows, cols) 擴展範圍以匹配陣列維度。
  • CopyFromRecordset 高效匯入 ADO Recordset。
  • QueryTable 適合大量資料直接從資料庫刷新。
  • 文字檔匯出繞過 Excel 物件模型,速度最快。
  • ADO.NET 直連 Excel 檔需正確連接字串 Extended Properties=Excel 8.0。

適用場景建議

  • 少量、複雜格式 → CellByCell。
  • 大量表格資料 → UseArray 或 ADORecordset/QueryTable。
  • 極大資料量、無需即時開啟 Excel → Create_TextFile。
  • 需在現有 Excel 範本追加資料 → Use_ADONET。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved