Migration Notes
本文整理 SpreadsheetExporter 各版本之間的升級重點,方便後續持續追加新的遷移內容。
v2 → v3
核心命名調整
Sheeter改為SheetDefinitionSheeterContext改為SheetLayoutTemplateContext改為TemplateLayoutGetContext()改為GetLayout()ITemplate改為ISheetTemplateISpreadsheetExporter/ExporterBase改為ISpreadsheetRenderer
Renderer 與套件調整
v3 將 renderer 抽離成 ISpreadsheetRenderer,並以 SpreadsheetExporter.Renderer.ClosedXML 作為目前的 .xlsx 輸出實作。
- 舊的 EPPlus / NPOI solution 專案已移除
- 請改用
CloudyWing.SpreadsheetExporter.Renderer.ClosedXML - 使用入口改為
ExcelRenderer
若是非 DI 專案,可透過 SpreadsheetManager.SetRenderer(...) 完成初始化:
using CloudyWing.SpreadsheetExporter;
using CloudyWing.SpreadsheetExporter.Renderer.ClosedXML;
SpreadsheetManager.SetRenderer(static () => new ExcelRenderer());
SpreadsheetDocument document = SpreadsheetManager.CreateDocument();
若是 DI 專案,則可直接註冊 ISpreadsheetRenderer,並在使用處建立 SpreadsheetDocument:
using CloudyWing.SpreadsheetExporter;
using CloudyWing.SpreadsheetExporter.Renderer.ClosedXML;
using Microsoft.Extensions.DependencyInjection;
ServiceCollection services = new();
services.AddSingleton<ISpreadsheetRenderer>(_ => new ExcelRenderer());
ServiceProvider serviceProvider = services.BuildServiceProvider();
ISpreadsheetRenderer renderer = serviceProvider.GetRequiredService<ISpreadsheetRenderer>();
SpreadsheetDocument document = new(renderer);
工作表層級設定調整
FreezePanes 與 IsAutoFilterEnabled 在 v3 屬於 SheetDefinition 的設定,不再掛在 RecordSetTemplate。
SheetDefinition sheet = document.CreateSheet("Orders");
sheet
.SetFreezePanes(0, 1)
.SetAutoFilterEnabled();
RecordSet 階層欄位調整
RecordSetColumnCollection<T> 移除了 AddChildToLastColumn(...) 系列多載,改為先取得最後一個欄位,再對其 ChildColumns 操作。
template.Columns
.Add("Order Info")
.GetLastColumn().ChildColumns
.Add("Order ID", static x => x.OrderId)
.Add("Customer", static x => x.Customer);
Cell Generator 型別調整
Cell 上的 generator 屬性型別已從 Func<int, int, T> 改為 CellGenerator<T>。
多數直接寫 lambda 的情境通常不需要改寫,但若有明確宣告舊 delegate 型別,請一併更新。