-
Notifications
You must be signed in to change notification settings - Fork 1
開始使用 Excely
Max Zheng edited this page Nov 6, 2023
·
30 revisions
本套件尚未發布,暫時無法透過 Nuget 安裝。 請下載此專案並以專案參考形式或編譯為 .dll 檔以使用本套件。
以下以 EPPlus.LGPL 依賴版本,進行 Excel 匯入、匯出的示範。
您所要做的第一件事是建立一個 Exporter,為此您需要引用 using Excely.Workflows
命名空間。
Exporter 是我們為您包裝過後的類別,用以簡化匯出過程中的繁雜流程。
現在您可以透過 ExcelyExporter
快速建立一個 Exporter,比如以下所示:
var exporter = ExcelyExporter.FromClassList<Student>();
FromClassList<Student>()
代表我們要建立一個接收物件列表(準確來說是 IEnumerable)參數的匯出工具。
這個函式有許多參數,我們稍後再細看。現在,讓我們試著匯出一個基本的列表:
var students = new List<Student>()
{
new Student(0, "Test1", DateTime.Now),
new Student(1, "Test2", DateTime.Now),
};
var exporter = ExcelyExporter.FromClassList<Student>();
using var excel = exporter.ToExcel(students);
這樣就完成了一份 Excel 的匯出。
讓我們回頭看看 FromClassList
的參數:
-
propertyShowPolicy
- 決定 Property 是否要成為匯出的欄位 -
propertyNamePolicy
- 決定 Property 代表的欄位名稱(表頭顯示文字) -
propertyOrderPolicy
- 決定 property 排列的順序 -
customValuePolicy
- 決定欄位寫入的值
這些參數是以 Function 的方式傳入,用以決定匯出邏輯。他們都可以是 null,代表以預設行為匯出, 但接下來讓我們動點手腳...
假設我們想讓表頭改為中文,Student.Id 隱藏不匯出,名字排在生日的後面,日期改採 yyyy/MM/dd
格式,則可以這樣做:
var exporter = ExcelyExporter.FromClassList<Student>(
propertyShowPolicy: p => p.Name != nameof(Student.Id),
propertyNamePolicy: p => p.Name switch
{
nameof(Student.Name) => "名字",
nameof(Student.Birthday) => "生日",
_ => string.Empty
},
customValuePolicy: (student, p) => p.Name switch
{
nameof(Student.Birthday) => student.Birthday.ToString("yyyy/MM/dd"),
_ => p.GetValue(student)
});
這會需要您有些許映射與委派的基礎概念,搭配上 Lambda
與 switch 運算式
,可以非常容易的修改匯出邏輯。