Magicodes.IE之Excel模板導出教材訂購表

  • 2020 年 1 月 16 日
  • 筆記

說明

本教程主要說明如果使用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 如上述代碼所示,定義的結構基本上和模板一致。其中屬性BookInfos對應列表,具體定義如下所示。
/// <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;          }      }
  • 教材信息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>。