Magicodes.IE之Excel模板匯出教材訂購表
阿新 • • 發佈:2020-01-13
說明
本教程主要說明如果使用Magicodes.IE.Excel完成教材訂購表的Excel模板匯出。
要點
- 本教程使用Magicodes.IE.Excel來完成Excel模板匯出
- 需要通過建立Dto來完成匯出
- 需要按要求準備Excel模板
主要步驟
1.安裝包Magicodes.IE.Excel
在本篇教程中,我們僅演示使用Excel來完成學生資料的匯入。我們需要在已準備好的工程中安裝以下包,參考命令如下所示:
Install-Package Magicodes.IE.Excel
2.準備模板
Magicodes.IE.Excel模板匯出支援單元格渲染和表格渲染:
-
單元格渲染
語法:
{{Company}} (教學單位名稱)2020年春季教材訂購明細
注意:
- 雙大括號是必須的
- 暫不支援表示式等
- 支援子物件屬性
- 大小寫敏感
- 表格渲染
表格渲染的格式如上所述:
-
渲染語法以“Table>>BookInfos|”為開始,其中“BookInfos”為列表屬性
-
“RowNo”、“No”等均為列表欄位
-
必須以“|>>Table”結尾
-
暫不支援一行多個Table(即將支援,具體請檢視日誌)
根據以上語法,我們可以編寫模板如下所示:
3.建立匯出Dto
主要程式碼如下所示:
-
教材訂購資訊Dto
/// <summary> /// 教材訂購資訊 /// </summary> public class TextbookOrderInfo { /// <summary> /// 公司名稱 /// </summary> public string Company { get; } /// <summary> /// 地址 /// </summary> public string Address { get; } /// <summary> /// 聯絡人 /// </summary> public string Contact { get; } /// <summary> /// 電話 /// </summary> public string Tel { get; } /// <summary> /// 製表人 /// </summary> public string Watchmaker { get; } /// <summary> /// 時間 /// </summary> public string Time { get; } /// <summary> /// 教材資訊列表 /// </summary> public List<BookInfo> BookInfos { get; } public TextbookOrderInfo(string company, string address, string contact, string tel, string watchmaker, string time, List<BookInfo> bookInfo) { Company = company; Address = address; Contact = contact; Tel = tel; Watchmaker = watchmaker; Time = time; BookInfos = bookInfo; } }
如上述程式碼所示,定義的結構基本上和模板一致。其中屬性BookInfos對應列表,具體定義如下所示。
-
教材資訊Dto:
/// <summary> /// 教材資訊 /// </summary> public class BookInfo { /// <summary> /// 行號 /// </summary> public int RowNo { get; } /// <summary> /// 書號 /// </summary> public string No { get; } /// <summary> /// 書名 /// </summary> public string Name { get; } /// <summary> /// 主編 /// </summary> public string EditorInChief { get; } /// <summary> /// 出版社 /// </summary> public string PublishingHouse { get; } /// <summary> /// 定價 /// </summary> public string Price { get; } /// <summary> /// 採購數量 /// </summary> public int PurchaseQuantity { get; } /// <summary> /// 備註 /// </summary> public string Remark { get; } public BookInfo(int rowNo, string no, string name, string editorInChief, string publishingHouse, string price, int purchaseQuantity, string remark) { RowNo = rowNo; No = no; Name = name; EditorInChief = editorInChief; PublishingHouse = publishingHouse; Price = price; PurchaseQuantity = purchaseQuantity; Remark = remark; } }
4.匯出
接下來直接呼叫Magicodes.IE.Excel封裝的模板匯出方法,該方法實現自介面IExportFileByTemplate:
/// <summary> /// 根據模板匯出檔案 /// </summary> public interface IExportFileByTemplate { /// <summary> /// 根據模板匯出 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fileName"></param> /// <param name="data"></param> /// <param name="template">HTML模板或模板路徑</param> /// <returns></returns> Task<ExportFileInfo> ExportByTemplate<T>(string fileName, T data, string template) where T : class; }
通過以上方法中的ExportByTemplate,我們就可以完成Excel模板匯出。具體使用可以參考以下單元測試:
[Fact(DisplayName = "Excel模板匯出教材訂購明細樣表")] public async Task ExportByTemplate_Test() { //模板路徑 var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates", "2020年春季教材訂購明細樣表.xlsx"); //建立Excel匯出物件 IExportFileByTemplate exporter = new ExcelExporter(); //匯出路徑 var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(ExportByTemplate_Test) + ".xlsx"); if (File.Exists(filePath)) File.Delete(filePath); //根據模板匯出 await exporter.ExportByTemplate(filePath, new TextbookOrderInfo("湖南心萊資訊科技有限公司", "湖南長沙嶽麓區", "雪雁", "1367197xxxx", "雪雁", DateTime.Now.ToLongDateString(), new List<BookInfo>() { new BookInfo(1, "0000000001", "《XX從入門到放棄》", "張三", "機械工業出版社", "3.14", 100, "備註"), new BookInfo(2, "0000000002", "《XX從入門到放棄》", "張三", "機械工業出版社", "3.14", 100, "備註"), new BookInfo(3, "0000000003", "《XX從入門到放棄》", "張三", "機械工業出版社", "3.14", 100, "備註") }), tplPath); }
結果如下圖所示:
最後
整個Excel模板匯出教程就此結束了,由於倉促完成,還有許多地方可以改善並優化。
相關庫會一直更新,在功能體驗上有可能會和本文教程有細微的出入,請以相關具體程式碼、版本日誌、單元測試示例為準。
程式設計交流群<85318032>,產品交流群<897857351>