本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出。
在本篇教程中,我们仅演示使用Excel来完成学生数据的导入。我们需要在已准备好的工程中安装以下包,参考命令如下所示:
Install-Package Magicodes.IE.Excel
Magicodes.IE.Excel模板导出支持单元格渲染和表格渲染:
{{Company}} (教学单位名称)2020年春季教材订购明细
表格渲染的格式如上所述:
根据以上语法,我们可以编写模板如下所示:
主要代码如下所示:
/// <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;
}
}
/// <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;
}
}
接下来直接调用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>。