目錄
ToggleC# 讀取 Excel 文件教學總覽
在專案管理、資料整合與自動化流程中,C#開發者經常需要讀取Excel檔案。常見應用包括批次資料匯入、報表自動產生、資料驗證等。市面上主流的C# Excel處理套件有EPPlus、NPOI、Microsoft.Office.Interop.Excel等。本文聚焦於EPPlus,因其易用、跨平台、無需安裝Excel軟體,特別適合伺服器端或自動化應用。
EPPlus 適用情境與優缺點
- 適用情境:需在.NET環境下讀取或寫入Excel(.xlsx)檔案,且不希望依賴Excel本體。
- 優點:API簡潔、支援多種Excel功能、跨平台、效能佳。
- 限制:不支援舊版.xls格式;自EPPlus 5起,商業用途需購買授權。
EPPlus 安裝與授權說明
使用 NuGet 安裝 EPPlus
EPPlus可透過Visual Studio的NuGet套件管理器安裝,亦可用CLI指令:
- 開啟專案,於方案總管右鍵點選專案名稱,選擇「管理NuGet套件」。
- 搜尋「EPPlus」,選擇並安裝最新版。
- 或於Package Manager Console輸入:
Install-Package EPPlus
- CLI用戶可執行:
dotnet add package EPPlus
EPPlus 授權政策與商業用途注意事項
EPPlus自5.0版起採用Polyform Noncommercial License,僅允許非商業用途。若專案涉及商業行為(如企業內部系統、SaaS服務),需購買商業授權。建議於專案初期明確評估授權需求,避免後續法律風險。
C# 讀取 Excel 文件實作步驟
基本範例代碼與說明
以下為EPPlus讀取Excel檔案的基本範例,涵蓋例外處理與詳細註解:
using System;
using System.IO;
using OfficeOpenXml;
class Program
{
static void Main()
{
// 設定EPPlus授權(非商業用途)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
// Excel檔案路徑
var filePath = @"C:\Data\sample.xlsx";
if (!File.Exists(filePath))
{
Console.WriteLine("檔案不存在,請確認路徑正確。");
return;
}
try
{
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
// 取得第一個工作表
var worksheet = package.Workbook.Worksheets[0];
if (worksheet == null)
{
Console.WriteLine("找不到工作表。");
return;
}
// 取得資料範圍
var rowCount = worksheet.Dimension.Rows;
var colCount = worksheet.Dimension.Columns;
// 逐列逐欄讀取資料
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
var cellValue = worksheet.Cells[row, col].Text;
Console.Write(cellValue + "\t");
}
Console.WriteLine();
}
}
}
catch (Exception ex)
{
Console.WriteLine("讀取Excel發生錯誤:" + ex.Message);
}
}
}
重點說明:
– 檔案路徑請依實際情境調整,建議加上檔案存在檢查。
– 建議包覆try-catch,避免因檔案損毀、權限不足導致程式異常中斷。
– 讀取資料時使用.Text
可自動轉為字串,後續可依需求進行型別轉換。
讀取特定工作表與多工作表資料
若需指定工作表名稱或遍歷所有工作表,可參考下列做法:
// 取得指定名稱的工作表
var worksheet = package.Workbook.Worksheets["Sheet2"];
// 遍歷所有工作表
foreach (var ws in package.Workbook.Worksheets)
{
Console.WriteLine($"工作表名稱:{ws.Name}");
// 可依上例讀取每個工作表的資料
}
實務案例:
在專案管理系統中,常見需求為批次匯入多個工作表(如任務、資源、時程等),可利用上述方式自動處理多表結構。
處理不同資料型別與格式
Excel單元格可能包含數字、日期、布林、字串等。EPPlus提供多種屬性讀取型別:
var cell = worksheet.Cells[row, col];
if (cell.Value is DateTime dt)
{
// 日期型別
Console.WriteLine(dt.ToString("yyyy-MM-dd"));
}
else if (cell.Value is double num)
{
// 數值型別
Console.WriteLine(num);
}
else
{
// 其他型別(字串、布林等)
Console.WriteLine(cell.Text);
}
常見情境:
如財務報表自動化時,需正確判斷日期與數字欄位,避免資料誤判。
常見錯誤處理與除錯建議
- 檔案不存在:請先檢查路徑與檔名是否正確。
- 格式錯誤:EPPlus僅支援.xlsx,若為.xls請先轉檔。
- 權限不足:確認執行程式帳號對檔案有讀取權限。
- 資料範圍為null:可能因工作表為空,建議先檢查
worksheet.Dimension
是否為null。 - 合併儲存格:讀取時僅會取得左上角儲存格資料,需特別處理。
除錯建議:
可於關鍵步驟加上Console.WriteLine
輸出,協助定位問題來源。
進階應用與效能建議
處理大型 Excel 檔案效能建議
- 只讀取必要資料:避免一次載入整張大表,建議僅處理所需範圍。
- 分批處理:如資料量極大,可分批讀取或分頁處理。
- 釋放資源:使用
using
確保EPPlus物件釋放,避免記憶體洩漏。
產業應用案例:
在製造業批次匯入生產數據時,建議先篩選有效資料行再進行處理,可大幅提升效能。
實際應用案例分享
- 批次匯入專案任務:將Excel任務清單自動匯入專案管理系統,減少人工輸入。
- 資料驗證:自動檢查Excel欄位格式,回報異常資料。
- 報表自動化:定期讀取Excel數據,產生圖表或自動寄送報表。
EPPlus 與其他 C# Excel 套件比較
套件名稱 | 支援格式 | 是否需安裝Excel | 跨平台 | 授權政策 | 特色與限制 |
---|---|---|---|---|---|
EPPlus | .xlsx | 否 | 是 | 非商業免費,商業需付費 | API簡潔,效能佳,不支援.xls |
NPOI | .xls/.xlsx | 否 | 是 | Apache 2.0 | 支援.xls,API較複雜 |
Microsoft.Office.Interop.Excel | .xls/.xlsx | 需安裝Excel | 否 | 依Office授權 | 功能完整,僅限Windows |
選擇建議:
– 需跨平台、僅處理.xlsx:建議EPPlus。
– 需支援.xls:可考慮NPOI。
– 需完整Excel功能且可接受安裝Excel:可用Interop(僅限桌面應用)。
常見問題(FAQ)
Q1:EPPlus支援哪些Excel格式?
A:僅支援.xlsx(Excel 2007以上),不支援舊版.xls。
Q2:如何處理合併儲存格?
A:EPPlus讀取合併儲存格時,僅左上角儲存格有值,其他儲存格為空。需自行判斷合併範圍。
Q3:EPPlus可用於Linux或雲端環境嗎?
A:可,EPPlus支援.NET Core,適用於Windows、Linux、雲端等多平台。
Q4:如何判斷單元格資料型別?
A:可用cell.Value.GetType()
判斷,或依需求轉型。
Q5:遇到「授權錯誤」訊息怎麼辦?
A:請確認用途是否符合非商業授權,若為商業用途需購買授權。
結論與推薦工具
透過EPPlus,C#開發者能高效讀取與處理Excel檔案,無論是批次資料匯入、報表自動化還是專案管理整合,皆能大幅提升工作效率。若你希望將Excel資料進一步整合至專案管理流程,建議可評估如Monday.com、ClickUp等專業工具,這些平台支援Excel資料匯入,並提供自動化、協作與視覺化報表,助你優化團隊協作與專案追蹤。