Excel模板導出之動態導出

說明

目前Magicodes.IE已支持Excel模板導出時使用JObjectDictionaryExpandoObject來進行動態導出,具體使用請看本篇教程。git

本功能的想法、部分實現初步源於arik的貢獻,這裏再次感謝arikgithub

在開始本篇教程以前,咱們重溫一下模板導出的語法:json

  {{Company}}  //單元格渲染
  {{Table>>BookInfos|RowNo}} //表格渲染開始語法
  {{Remark|>>Table}}//表格渲染結束語法
  {{Image::ImageUrl?Width=50&Height=120&Alt=404}} //圖片渲染
  {{Image::ImageUrl?w=50&h=120&Alt=404}} //圖片渲染
  {{Image::ImageUrl?Alt=404}} //圖片渲染
  {{Formula::AVERAGE?params=G4:G6}}  //公式渲染
  {{Formula::SUM?params=G4:G6&G4}}   //公式渲染

若是您對Magicodes.IE的模板導出不太瞭解,請閱讀如下教程:數據結構

Excel模板導出之導出教材訂購表單元測試

接下來,咱們開始本篇教程:測試

1.安裝包Magicodes.IE.Excel

Install-Package Magicodes.IE.Excel

2.準備Excel模板文件

參考如圖:spa

模板文件

該文件能夠在測試工程中找到,文件名爲【DynamicExportTpl.xlsx】。日誌

3.使用JObject完成動態導出

代碼比較簡單,以下所示:code

    string json = @"{
      'Company': '雪雁',
      'Address': '湖南長沙',
      'Contact': '雪雁',
      'Tel': '136xxx',
      'BookInfos': [
        {'No':'a1','RowNo':1,'Name':'Docker+Kubernetes應用開發與快速上雲','EditorInChief':'李文強','PublishingHouse':'機械工業出版社','Price':65,'PurchaseQuantity':10000,'Cover':'https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965','Remark':'備註'},
        {'No':'a1','RowNo':1,'Name':'Docker+Kubernetes應用開發與快速上雲','EditorInChief':'李文強','PublishingHouse':'機械工業出版社','Price':65,'PurchaseQuantity':10000,'Cover':'https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965','Remark':'備註'}
      ]
    }";
    var jobj = JObject.Parse(json);
    //模板路徑
    var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
        "DynamicExportTpl.xlsx");
    //建立Excel導出對象
    IExportFileByTemplate exporter = new ExcelExporter();
    //導出路徑
    var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(DynamicExportByTemplate_Test) + ".xlsx");
    if (File.Exists(filePath)) File.Delete(filePath);

    //根據模板導出
    await exporter.ExportByTemplate(filePath, jobj, tplPath);

上述代碼你們能夠在單元測試DynamicExportWithJObjectByTemplate_Test中找到。orm

值得注意的是,因爲此處使用了JObject對象,所以在使用時須要按裝包Newtonsoft.Json。可是,Magicodes.IE.Excel自己並不依賴Newtonsoft.Json

目前Excel模板動態導出僅支持經過JObject對象,在後續將支持更多動態方式。

運行後能夠看到以下圖所示的結果:

動態導出結果

4.使用Dictionary<string, object>完成動態導出

導出的代碼和上面是同樣的,只是數據結構使用了Dictionary

var data = new Dictionary<string, object>()
{
    { "Company","雪雁" },
    { "Address", "湖南長沙" },
    { "Contact", "雪雁" },
    { "Tel", "136xxx" },
    { "BookInfos",new List<Dictionary<string,object>>()
        {
            new Dictionary<string, object>()
            {
                {"No","A1" },
                {"RowNo",1 },
                {"Name","Docker+Kubernetes應用開發與快速上雲" },
                {"EditorInChief","李文強" },
                {"PublishingHouse","機械工業出版社" },
                {"Price",65 },
                {"PurchaseQuantity",50000 },
                {"Cover","https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965" },
                {"Remark","買起" }
            },
            new Dictionary<string, object>()
            {
                {"No","A2" },
                {"RowNo",2 },
                {"Name","Docker+Kubernetes應用開發與快速上雲" },
                {"EditorInChief","李文強" },
                {"PublishingHouse","機械工業出版社" },
                {"Price",65 },
                {"PurchaseQuantity",50000 },
                {"Cover","https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965" },
                {"Remark","k8s真香" }
            }
        }
    }
};
//模板路徑
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
    "DynamicExportTpl.xlsx");
//建立Excel導出對象
IExportFileByTemplate exporter = new ExcelExporter();
//導出路徑
var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(DynamicExportWithDictionaryByTemplate_Test) + ".xlsx");
if (File.Exists(filePath)) File.Delete(filePath);

//根據模板導出
await exporter.ExportByTemplate(filePath, data, tplPath);

具體代碼見DynamicExportWithDictionaryByTemplate_Test

5.使用ExpandoObject完成動態導出

同上,代碼以下所示:

dynamic data = new ExpandoObject();
data.Company = "雪雁";
data.Address = "湖南長沙";
data.Contact = "雪雁";
data.Tel = "136xxx";
data.BookInfos = new List<ExpandoObject>() { };

dynamic book1 = new ExpandoObject();
book1.No = "A1";
book1.RowNo = 1;
book1.Name = "Docker+Kubernetes應用開發與快速上雲";
book1.EditorInChief = "李文強";
book1.PublishingHouse = "機械工業出版社";
book1.Price = 65;
book1.PurchaseQuantity = 50000;
book1.Cover = "https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965";
book1.Remark = "買買買";
data.BookInfos.Add(book1);

dynamic book2 = new ExpandoObject();
book2.No = "A2";
book2.RowNo = 2;
book2.Name = "Docker+Kubernetes應用開發與快速上雲";
book2.EditorInChief = "李文強";
book2.PublishingHouse = "機械工業出版社";
book2.Price = 65;
book2.PurchaseQuantity = 50000;
book2.Cover = "https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965";
book2.Remark = "買買買";
data.BookInfos.Add(book2);

//模板路徑
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
    "DynamicExportTpl.xlsx");
//建立Excel導出對象
IExportFileByTemplate exporter = new ExcelExporter();
//導出路徑
var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(DynamicExportWithExpandoObjectByTemplate_Test) + ".xlsx");
if (File.Exists(filePath)) File.Delete(filePath);

//根據模板導出
await exporter.ExportByTemplate(filePath, data, tplPath);

具體代碼參考DynamicExportWithExpandoObjectByTemplate_Test

最後

本教程至此就結束了,若有疑問,麻煩你們多多提交Issue。

Magicodes.IE:導入導出通用庫,支持Dto導入導出、模板導出、花式導出以及動態導出,支持Excel、Csv、Word、Pdf和Html。

相關庫會一直更新,在功能體驗上有可能會和本文教程有細微的出入,請以相關具體代碼、版本日誌、單元測試示例爲準。

相關文章
相關標籤/搜索