目錄
ToggleC# 讀取 Excel 檔案全攻略
在現代專案管理、團隊協作與資料處理流程中,Excel檔案常被用於資料彙整、批次匯入、報表產生等多種場景。如何用C#高效讀取Excel檔案,成為許多知識工作者、開發者的實務需求。本篇將從主流解法比較、EPPlus安裝與授權、程式碼實作、常見錯誤、進階應用到FAQ,帶你全面掌握「C# 讀取Excel」的關鍵技巧。
常見解法比較與選擇建議
C#讀取Excel檔案的主流方案有三:
解法 | 優點 | 缺點與適用情境 |
---|---|---|
EPPlus | 支援.xlsx格式、跨平台、API簡潔、效能佳 | 商業用途需注意授權(Polyform Noncommercial)、不支援.xls |
NPOI | 支援.xls與.xlsx、開源、無授權限制 | API較複雜、效能略低於EPPlus |
Interop.Excel | 微軟官方、功能完整、支援Excel全部功能 | 僅限Windows、需安裝Excel、效能較差 |
選擇建議:
– 一般讀取.xlsx檔案,推薦使用EPPlus,API簡單且跨平台。
– 需支援.xls或無授權疑慮時,可考慮NPOI。
– 僅限Windows且需操作Excel全部功能,才考慮Interop.Excel。
授權提醒:
EPPlus自5.x起採用Polyform Noncommercial授權,僅限非商業用途。商業專案請購買授權或改用NPOI。
EPPlus快速安裝與設定
NuGet安裝步驟
- 開啟Visual Studio,進入你的C#專案。
- 於「工具」→「NuGet套件管理員」→「管理方案的NuGet套件」。
- 搜尋
EPPlus
,選擇後安裝。
.NET版本相容性
- .NET Framework 4.5+、.NET Core 2.0+、.NET 5/6/7均支援。
- 跨平台(Windows、Linux、macOS)皆可用。
LicenseContext設定(必須)
EPPlus 5.x起,需明確設定LicenseContext,否則將拋出例外。
於程式啟動時加入:
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 僅限非商業用途
如需商業用途,請依官方指引購買授權。
C# 讀取 Excel 基本範例
以下以EPPlus為例,展示如何讀取Excel檔案內容,並處理常見例外:
using System;
using System.IO;
using OfficeOpenXml;
namespace ExcelReaderDemo
{
class Program
{
static void Main(string[] args)
{
// 設定EPPlus授權模式
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
string filePath = "example.xlsx"; // Excel檔案路徑
if (!File.Exists(filePath))
{
Console.WriteLine("找不到指定的Excel檔案。");
return;
}
try
{
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
// 取得第一個工作表
var worksheet = package.Workbook.Worksheets[0];
// 取得資料範圍
int rowCount = worksheet.Dimension.Rows;
int colCount = worksheet.Dimension.Columns;
// 逐行逐列讀取資料
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
Console.Write($"{worksheet.Cells[row, col].Text}\t");
}
Console.WriteLine();
}
}
}
catch (Exception ex)
{
Console.WriteLine($"讀取Excel時發生錯誤:{ex.Message}");
}
}
}
}
重點說明:
– 必須設定LicenseContext
,否則會出現授權例外。
– 加入檔案存在檢查與例外處理,避免程式崩潰。
– 支援跨平台執行。
產業應用情境:
適用於批次匯入人員名單、財務報表、專案進度追蹤等自動化流程。
程式碼詳解與常見問題
主要步驟說明
ExcelPackage.LicenseContext
:設定授權模式,避免執行時例外。File.Exists
:確認檔案存在,避免路徑錯誤。ExcelPackage
:載入Excel檔案,支援多工作表操作。worksheet.Dimension
:自動偵測資料範圍,適合動態資料表。worksheet.Cells[row, col].Text
:取得儲存格文字內容,若需原始值可用.Value
。
讀取多工作表與特定範圍
- 取得指定工作表:
package.Workbook.Worksheets["Sheet2"]
- 讀取特定範圍:
csharp
var range = worksheet.Cells[2, 1, 5, 3]; // 讀取第2~5列,第1~3欄
foreach (var cell in range)
{
Console.WriteLine(cell.Text);
}
常見錯誤與處理
錯誤情境 | 處理方式或建議說明 |
---|---|
未設定LicenseContext | 加入ExcelPackage.LicenseContext = LicenseContext.NonCommercial; |
檔案不存在 | 檢查路徑、權限,使用File.Exists 先行判斷 |
格式錯誤或損毀 | 確認檔案為有效.xlsx,避免同時開啟編輯 |
權限不足 | 以管理員權限執行,或確認檔案未被其他程式鎖定 |
進階應用與實務案例
讀取含公式、格式、合併儲存格
- 取得公式內容:
worksheet.Cells[row, col].Formula
- 取得格式:
worksheet.Cells[row, col].Style.Numberformat.Format
- 判斷合併儲存格:
worksheet.MergedCells[row, col] != null
批次匯入資料範例
假設需將Excel人員名單匯入資料庫,可先以EPPlus讀取,再逐筆寫入資料庫:
for (int row = 2; row <= rowCount; row++) // 假設第1列為標題
{
string name = worksheet.Cells[row, 1].Text;
string email = worksheet.Cells[row, 2].Text;
// 呼叫資料庫API寫入
}
實務情境:
– 專案管理:自動匯入任務清單至專案管理工具。
– 團隊協作:批次同步人員資料至團隊協作平台。
– 財務報表:自動擷取Excel報表數據進行後續分析。
FAQ:C# 讀取 Excel 常見疑問
Q1:EPPlus與NPOI有何差異?
A:EPPlus僅支援.xlsx,API簡單、效能佳,但商業用途需授權。NPOI支援.xls與.xlsx,無授權限制,適合需支援舊格式或商業專案。
Q2:如何只讀取特定欄位或範圍?
A:可用worksheet.Cells[起始列, 起始欄, 結束列, 結束欄]
取得範圍,或直接指定欄位索引讀取。
Q3:EPPlus可跨平台嗎?
A:EPPlus支援.NET Core與.NET 5/6/7,適用於Windows、Linux、macOS等多平台。
Q4:如何處理Excel含公式的儲存格?
A:用.Text
取得計算後結果,用.Formula
取得公式內容。
Q5:遇到「未設定LicenseContext」錯誤怎麼辦?
A:請於程式啟動時加入ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
。
結論與推薦工具應用
透過EPPlus,C#可高效讀取Excel檔案,無論是批次匯入、資料驗證還是自動化報表,都能大幅提升工作效率。若需將Excel資料進一步整合至專案管理或團隊協作流程,建議可考慮如Monday.com、ClickUp等專業工具,將Excel數據自動化串接,實現任務追蹤、進度管理與資料共享,讓團隊協作更順暢。