Skip to content

開始使用 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)
    });

這會需要您有些許映射與委派的基礎概念,搭配上 Lambdaswitch 運算式,可以非常容易的修改匯出邏輯。

Clone this wiki locally