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>。
出处:http://www.cnblogs.com/codelove/
沟通渠道:编程交流群<85318032> 产品交流群<897857351>
如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
静听鸟语花香,漫赏云卷云舒。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架