C# 操作 Excel 教學:從入門到精通(EPPlus、NPOI、ClosedXML全方位解析)

本教學完整介紹C#操作Excel的主流解決方案,從套件選擇、授權說明到基礎與進階操作技巧,並結合實務案例與常見問題解析,幫助專案經理、知識工作者快速掌握Excel自動化關鍵能力。

Notion 新創專屬 3 個月免費福利| 官方合作夥伴限定

經本站專屬連結申請,即享 3 個月 Notion Plus + AI 無限免費 (市價 $6,000 美元)! 務必保留推薦碼 venturer ,否則不符資格。 全程免費,無需信用卡。需用公司 Email 與有效公司網站。
免費使用

200+模板自動化工作流程

從數據到成果,只需一步 — 用Monday代替Excel,效率倍增!
免費使用

AI智能團隊協作

AI驅動的ClickUp超越Excel,讓工作更精準快速!
免費使用

C# 操作 Excel 的應用場景與優勢

C# 結合 Excel 自動化,已成為現代企業資料處理、報表產生與專案管理的重要利器。無論是批次匯出分析報表、整合多來源資料、或自動化例行性數據彙整,C# 都能大幅減少人工作業錯誤、提升效率。常見應用情境包括:

  • 企業定期自動產生財務、銷售、專案進度報表
  • 大量資料批次匯入、清洗與轉換
  • 依據資料自動產生圖表、統計分析
  • 內部系統與Excel檔案的自動串接

這些需求廣泛存在於專案管理、財會、行銷、研發等部門。透過C#自動化Excel,不僅節省時間,也能確保資料正確性與可追溯性。

主流C# Excel套件比較與選擇建議

目前C#操作Excel的主流套件有EPPlus、NPOI、ClosedXML,各有特色。以下比較表協助選擇:

套件名稱 支援格式 授權模式 優點 適用情境
EPPlus .xlsx LGPL(部分商用需授權) API簡潔、功能豐富、支援格式化、圖表、圖片 需處理現代Excel檔案、重視易用性
NPOI .xls/.xlsx Apache 2.0 支援舊版.xls、穩定、社群活躍 需同時處理舊/新Excel檔案
ClosedXML .xlsx MIT API友善、支援表格、格式化、效能佳 需快速開發、偏好簡潔語法

選擇建議:
– 僅需處理.xlsx且重視易用性:優先考慮EPPlus或ClosedXML。
– 需同時支援.xls與.xlsx:建議選用NPOI。
– 商用專案請務必檢查授權條款,EPPlus部分功能商用需購買授權。

EPPlus快速入門教學

安裝與設定EPPlus

  1. 在Visual Studio中,於專案上點擊右鍵,選擇「管理NuGet套件」。
  2. 搜尋「EPPlus」,安裝最新版。
  3. 授權設定:EPPlus自5.0起,預設需設定LicenseContext。非商業用途可如下設定:
    csharp
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

    商業用途請參閱EPPlus官方授權說明

建立與寫入Excel檔案

以下範例展示如何建立新Excel檔案並寫入資料,並加入例外處理與正確路徑寫法:

using OfficeOpenXml;
using System.IO;

public void CreateExcelFile()
{
    try
    {
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        using (var package = new ExcelPackage())
        {
            var worksheet = package.Workbook.Worksheets.Add("報表");
            worksheet.Cells[1, 1].Value = "專案名稱";
            worksheet.Cells[1, 2].Value = "進度";
            worksheet.Cells[2, 1].Value = "網站改版";
            worksheet.Cells[2, 2].Value = "80%";

            var filePath = @"C:\Temp\ProjectReport.xlsx";
            package.SaveAs(new FileInfo(filePath));
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("建立Excel檔案時發生錯誤:" + ex.Message);
    }
}

常見錯誤提醒:
– 路徑需確保資料夾存在,否則會拋出例外。
– 檔案若被其他程式佔用,將無法覆寫。

讀取Excel檔案

以下範例展示如何讀取Excel檔案,並處理多工作表與空值:

using OfficeOpenXml;
using System.IO;

public void ReadExcelFile()
{
    try
    {
        var filePath = @"C:\Temp\ProjectReport.xlsx";
        using (var package = new ExcelPackage(new FileInfo(filePath)))
        {
            // 取得第一個工作表
            var worksheet = package.Workbook.Worksheets[0];
            var projectName = worksheet.Cells[2, 1].Value?.ToString() ?? "(空值)";
            var progress = worksheet.Cells[2, 2].Value?.ToString() ?? "(空值)";

            Console.WriteLine($"專案名稱:{projectName}");
            Console.WriteLine($"進度:{progress}");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("讀取Excel檔案時發生錯誤:" + ex.Message);
    }
}

延伸說明:
Worksheets[0] 取得第一個工作表,亦可用名稱取得。
– 使用 ?. 避免空值例外。

進階Excel操作技巧

單元格格式化與樣式設定

EPPlus支援多種格式化,以下展示數字、日期、條件格式等常見需求:

worksheet.Cells[3, 1].Value = 12345.678;
worksheet.Cells[3, 1].Style.Numberformat.Format = "#,##0.00"; // 數字格式

worksheet.Cells[4, 1].Value = DateTime.Now;
worksheet.Cells[4, 1].Style.Numberformat.Format = "yyyy-mm-dd"; // 日期格式

worksheet.Cells[5, 1].Value = "重點";
worksheet.Cells[5, 1].Style.Font.Bold = true;
worksheet.Cells[5, 1].Style.Font.Color.SetColor(System.Drawing.Color.Blue);
worksheet.Cells[5, 1].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
worksheet.Cells[5, 1].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Yellow);

條件格式範例:

var cond = worksheet.ConditionalFormatting.AddGreaterThan(worksheet.Cells["B2:B10"]);
cond.Formula = "80";
cond.Style.Font.Color.Color = System.Drawing.Color.Red;

多工作表管理

建立、切換、刪除、複製工作表:

// 新增工作表
var ws2 = package.Workbook.Worksheets.Add("第二表");

// 切換工作表
var ws = package.Workbook.Worksheets["第二表"];

// 複製工作表
var copyWs = package.Workbook.Worksheets.Add("複製表", ws2);

// 刪除工作表
package.Workbook.Worksheets.Delete("複製表");

插入圖片、公式與圖表

插入圖片:

var img = Image.FromFile(@"C:\Temp\logo.png");
var pic = worksheet.Drawings.AddPicture("Logo", img);
pic.SetPosition(0, 0, 3, 0); // 置於第1列第4欄

插入公式:

worksheet.Cells[6, 2].Formula = "SUM(B2:B5)";

插入圖表:

var chart = worksheet.Drawings.AddChart("進度圖", OfficeOpenXml.Drawing.Chart.eChartType.ColumnClustered);
chart.Series.Add("B2:B5", "A2:A5");
chart.Title.Text = "專案進度";
chart.SetPosition(7, 0, 1, 0);

常見問題與錯誤排解(FAQ)

Q1:EPPlus商用授權如何判斷?

A:EPPlus 5.0起,僅允許非商業用途免費使用。若用於公司內部、商業產品或對外服務,需購買授權。詳見官方說明

Q2:為何Excel檔案開啟時顯示損毀?

A:可能原因包括:未正確關閉檔案、寫入過程中中斷、檔案格式錯誤。建議每次操作結束後確實釋放資源,並避免多執行緒同時寫入同一檔案。

Q3:如何處理大量資料導致記憶體不足?

A:可分批寫入、減少同時開啟的工作表數量,或考慮NPOI等更適合大檔案處理的套件。

Q4:如何插入超連結?

A:

worksheet.Cells[2, 3].Hyperlink = new Uri("https://projectmanager.com.tw");
worksheet.Cells[2, 3].Value = "網站連結";

Q5:EPPlus、NPOI、ClosedXML效能差異?

A:三者效能相近,NPOI在處理極大檔案時較穩定,ClosedXML語法最簡潔,EPPlus功能最全面。建議依專案需求選擇。

實務應用案例分享

案例一:自動產生專案進度報表

某專案經理需每週產生專案進度Excel報表,內容包含專案名稱、負責人、進度百分比、預計完成日。透過C#結合EPPlus,將專案資料自資料庫批次匯出,並自動套用格式、插入進度圖表,大幅減少人工作業時間,並確保報表格式一致。

案例二:批次資料匯入與驗證

一間會計事務所需將多份客戶提供的Excel帳務資料自動匯入系統。透過C#自動讀取多個Excel檔案,進行資料格式驗證與彙整,並自動產生錯誤清單,提升資料處理效率與正確率。

總結與進階資源

C#操作Excel已成為現代知識工作者與專案管理者不可或缺的技能。無論是自動化報表、資料批次處理,或進階格式化與圖表產生,選擇合適的套件(如EPPlus、NPOI、ClosedXML)並掌握基礎與進階技巧,皆能大幅提升工作效率。

若需進一步整合Excel自動化於專案管理、團隊協作流程,建議可搭配Monday.com等專業專案管理工具,實現資料流自動串接與跨部門協作,進一步優化整體生產力。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

✨ 讓專案管理變簡單,團隊更強大!

在專案推進的每一步,效率就是競爭力。monday.com 整合進度追蹤、團隊協作與資源分配,讓你隨時掌握全局、快速解決問題。
全球18萬家專業團隊已經採用,你還在等什麼?