C# 使用 ClosedXML 產生 Excel 檔案

EPPlus 套件非常好用,為什麼要使用 ClosedXML 呢?最主要的原因就是因為 EPPlus 從 5 以上不能免費用於商業用途!(最新版本為 6),且一個開發者一年的授權費需要 379 美金!基本上是沒有辦法再使用了。

最近公司要處理 Excel,如果要使用微軟官方的 Open XML SDK ,寫起來太繁瑣,於是找到了這個開源免費的 ClosedXML ,並將常用內容記錄在本文中。

缺點: ClosedXML 不支援 Excel 2003 和以前的檔案 (.xls),只支援 Excel 2007 和以後的檔案 (.xlsx)

安裝

先使用 NuGet 安裝 ClosedXML 套件,或是使用 .NET CLI 執行以下指令安裝
	
dotnet add package ClosedXML
    

編輯 xlsx 示範

    
using ClosedXML.Excel;

using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("活頁簿1"); // 增加活頁簿

worksheet.Cell("A1").Value = "Hello World!"; // 設定內容
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)"; // 使用公式
Console.WriteLine($"公式: {worksheet.Cell("A2").FormulaA1}"); // 取得公式本身
Console.WriteLine($"結果: {worksheet.Cell("A2").Value}"); // 取得公式結果

// 編輯多欄
var range = worksheet.Range("B1:D1");
range.Merge(); // 合併儲存格
range.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; // 置中對齊
range.Value = "標題"; // 設定內容

worksheet.Range("B2:D3").Value = "內容"; // 共 6 格都設定為 "內容"


worksheet.Row(3).InsertRowsAbove(1); // 在第三列上方插入一列
worksheet.Column(6).Delete(); // 刪除 F 欄

worksheet.Cell("B3").Value = "B3";
worksheet.Cell("B3").Style.Font.FontColor = XLColor.Red; // 設定文字顏色
worksheet.Cell("C3").Style.Fill.BackgroundColor = XLColor.Yellow; // 設定底色

// A1 到 F5 的下方繪製框線(共 5 條)
worksheet.Ranges("A1:F5").Style.Border.BottomBorder = XLBorderStyleValues.Thin;

worksheet.Cell("E1").Value = "E";
worksheet.Column(5).Hide(); // 隱藏 E 欄
worksheet.Column(5).Unhide(); // 取消隱藏

// 插入圖片
var image = worksheet.AddPicture(@"C:\Users\ruyut\Desktop\images\hi.gif")
    .MoveTo(worksheet.Cell("A5"))
    .Scale(0.5); // 縮小 50%

string fileName = @"C:\Users\ruyut\Desktop\test.xlsx";
workbook.SaveAs(fileName); // 儲存檔案
    


參考資料:
Github - ClosedXML/ClosedXML
Github - wiki

留言