说明
本教程主要说明如果使用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
///
/// 教材订购信息
///
public class TextbookOrderInfo
{
///
/// 公司名称
///
public string Company { get; }
///
/// 地址
///
public string Address { get; }
///
/// 联系人
///
public string Contact { get; }
///
/// 电话
///
public string Tel { get; }
///
/// 制表人
///
public string Watchmaker { get; }
///
/// 时间
///
public string Time { get; }
///
/// 教材信息列表
///
public List BookInfos { get; }
public TextbookOrderInfo(string company, string address, string contact, string tel, string watchmaker, string time, List bookInfo)
{
Company = company;
Address = address;
Contact = contact;
Tel = tel;
Watchmaker = watchmaker;
Time = time;
BookInfos = bookInfo;
}
}
如上述代码所示,定义的结构基本上和模板一致。其中属性BookInfos对应列表,具体定义如下所示。
教材信息Dto:
///
/// 教材信息
///
public class BookInfo
{
///
/// 行号
///
public int RowNo { get; }
///
/// 书号
///
public string No { get; }
///
/// 书名
///
public string Name { get; }
///
/// 主编
///
public string EditorInChief { get; }
///
/// 出版社
///
public string PublishingHouse { get; }
///
/// 定价
///
public string Price { get; }
///
/// 采购数量
///
public int PurchaseQuantity { get; }
///
/// 备注
///
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:
///
/// 根据模板导出文件
///
public interface IExportFileByTemplate
{
///
/// 根据模板导出
///
///
///
///
/// HTML模板或模板路径
///
Task ExportByTemplate(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