1. 程式人生 > >Magicodes.IE之Excel模板匯出教材訂購表

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

說明

本教程主要說明如果使用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>