说明

本教程主要说明如果使用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(, "", "《XX从入门到放弃》", "张三", "机械工业出版社", "3.14", , "备注"),
new BookInfo(, "", "《XX从入门到放弃》", "张三", "机械工业出版社", "3.14", , "备注"),
new BookInfo(, "", "《XX从入门到放弃》", "张三", "机械工业出版社", "3.14", , "备注")
}),
tplPath);
}

结果如下图所示:

最后

整个Excel模板导出教程就此结束了,由于仓促完成,还有许多地方可以改善并优化。

相关库会一直更新,在功能体验上有可能会和本文教程有细微的出入,请以相关具体代码、版本日志、单元测试示例为准。

编程交流群<85318032>,产品交流群<897857351>。

Magicodes.IE之Excel模板导出教材订购表的更多相关文章

  1. Excel模板导出之动态导出

    说明 目前Magicodes.IE已支持Excel模板导出时使用JObject.Dictionary和ExpandoObject来进行动态导出,具体使用请看本篇教程. 本功能的想法.部分实现初步源于a ...

  2. java实现excel模板导出

    一. 准备工作 1. 点击此下载相关开发工具 2. 将poi-3.8.jxls-core-1.0两个jar包放到工程中,并引用 3. 将excel模板runRecord.xls放到RunRecordB ...

  3. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  4. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  5. kettle 使用excel模板导出数据

    通过excel进行高速开发报表: 建设思路: 1.首先制订相关的execl模板. 2.通过etl工具(kettle)能够高速的 将数据库中的数据按excel模板导出成新的excel就可以. 当中ket ...

  6. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  7. Net 自定义Excel模板导出数据

    转载自:http://www.cnblogs.com/jbps/p/3549671.html?utm_source=tuicool&utm_medium=referral 1 using Sy ...

  8. 6、jeecg 笔记之 自定义excel 模板导出(一)

    1.前言 jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求, 但总是有需要用到自定义 excel 导出模板,下文所用到的皆是 ...

  9. C# Winform Excel的导出,根据excel模板导出数据

    namespace dxhbskymDemo { public partial class ExcelForm : DevExpress.XtraEditors.XtraForm { public E ...

随机推荐

  1. H3C MDI/MDIX

  2. 如何安装java环境和如何配置java环境

    https://jingyan.baidu.com/article/0202781175839b1bcc9ce529.html java如今是一门十分热门的可跨平台面向对象的高级编程语言,那么作为学习 ...

  3. RBF神经网络通用函数 newrb, newrbe

      RBF神经网络通用函数 newrb, newrbe 1.newrb 其中P为输入向量,T为输出向量,GOAL为均方误差的目标,SPREED为径向基的扩展速度.返回值是一个构建好的网络,用newrb ...

  4. pycharm下的多个python版本共存(二)

    上一篇博文介绍了在windows下同时安装python2和python3.而在工作的过程中,我习惯于用pycharm作为IDE.本文将记录如何在pycharm中选择python版本,并给相应的版本安装 ...

  5. H3C 多路径网络中环路产生过程(2)

  6. jQuery-自己封装的弹框

    (function () { CDK={ cfm:function(resFun,errFun){ var confirm=document.createElement('div'); confirm ...

  7. P1049 找第K大的数

    题目描述 给定一个无序正整数序列, 以及另一个数n (1<=n<=1000000), 然后以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3 ...

  8. JS与JSP分别是什么

    JS:JavaScript: JSP:Java Server Pages. jsp:只是servlet的一个变种,方便书写html内容才出现的,servlet是根本,所有jsp能做的,servlet全 ...

  9. Little Elephant and Array CodeForces - 220B (莫队)

    The Little Elephant loves playing with arrays. He has array a, consisting of npositive integers, ind ...

  10. 【2016常州一中夏令营Day3】

    小 W 摆石子[问题描述]小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上.因为小 M 最喜欢矩形了,小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的长方形 ...