在實務開發中,我們常常需要從 Excel 讀取資料,例如:
👉 報表匯入👉 資料轉換 👉 批次處理
這篇會帶你用 Microsoft.Office.Interop.Excel 來實作一個最基本的 Excel 讀取範例,並說明幾個非常重要的細節(尤其是資源釋放!)
🧩 Step 1:安裝套件
在專案中透過 NuGet 安裝:
Microsoft.Office.Interop.Excel
🧩 Step 2:匯入命名空間
using Excel = Microsoft.Office.Interop.Excel;
這樣可以讓程式碼更簡潔(不用一直寫很長的 namespace)
🚀 範例:讀取 Excel 並輸出內容
using System;using Excel = Microsoft.Office.Interop.Excel;namespace ExcelReaderExample{ class Program { static void Main(string[] args) { string excelFilePath = @"C:\path\to\your\file.xlsx"; Excel.Application excelApp = new Excel.Application(); Excel.Workbook workbook = excelApp.Workbooks.Open(excelFilePath); Excel.Worksheet worksheet = workbook.Worksheets[1]; int rowCount = worksheet.UsedRange.Rows.Count; int colCount = worksheet.UsedRange.Columns.Count; for (int row = 1; row <= rowCount; row++) { for (int col = 1; col <= colCount; col++) { Excel.Range cell = worksheet.Cells[row, col]; string cellValue = cell.Value != null ? cell.Value.ToString() : ""; Console.Write(cellValue + "\t"); } Console.WriteLine(); } // 關閉與釋放資源 workbook.Close(false); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); } }}
🔍 程式碼重點解析
1️⃣ 開啟 Excel
Excel.Application excelApp = new Excel.Application();Excel.Workbook workbook = excelApp.Workbooks.Open(excelFilePath);
👉 這裡其實是「啟動一個 Excel 程式」並開啟檔案
2️⃣ 取得工作表
Excel.Worksheet worksheet = workbook.Worksheets[1];
⚠️ 注意:
Excel 的索引是 從 1 開始,不是 0
3️⃣ 讀取資料範圍
worksheet.UsedRange
👉 可以取得「實際有資料的範圍」,避免掃整張表
4️⃣ 讀取儲存格內容
Excel.Range cell = worksheet.Cells[row, col];
👉 再從 cell.Value 取值(可能是 null,要注意)
⚠️ 超重要:COM 物件一定要釋放!
Interop 本質是 COM 技術,如果不釋放,會發生:
❌ Excel 背景程序殘留
❌ 記憶體洩漏 ❌ 程式卡住或當掉
✅ 正確釋放方式
Marshal.ReleaseComObject(object);
而且順序建議:
👉 先 Worksheet
👉 再 Workbook 👉 最後 Application
💡 實務優化建議(很關鍵)
🔹 1. 關閉 Excel 畫面(避免閃畫面)
excelApp.Visible = false;
🔹 2. 關閉警告視窗
excelApp.DisplayAlerts = false;
🔹 3. 避免逐格讀取(效能很差)
如果資料很多,建議改成一次讀:
object[,] data = worksheet.UsedRange.Value;
👉 效能差異會非常明顯(尤其上萬筆資料)
🚨 使用 Interop 的限制
這點很多人會忽略👇
- 需要安裝 Microsoft Excel
- 不適合做伺服器(例如 Web API)
- 效能較慢
- COM 管理麻煩
🔄 替代方案(更推薦)
如果你是做工具或後端,其實可以考慮:
👉 EPPlus(最常用)
👉 ClosedXML(好上手)
✔ 不需要安裝 Excel
✔ 效能更好 ✔ 不用處理 COM
✨ 結語
這篇帶你完成:
✔ 使用 Interop 讀取 Excel
✔ 掌握 COM 釋放重點 ✔ 理解實務上的效能與限制
如果你只是做「桌面工具(WinForms)」👉 Interop OK
但如果是「大量資料 / 服務」👉 建議改用 EPPlus 👍



















