目錄
ToggleC# 操作 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
- 在Visual Studio中,於專案上點擊右鍵,選擇「管理NuGet套件」。
- 搜尋「EPPlus」,安裝最新版。
- 授權設定: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等專業專案管理工具,實現資料流自動串接與跨部門協作,進一步優化整體生產力。