前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Excel模板导出之导出教材订购表

Excel模板导出之导出教材订购表

作者头像
心莱科技雪雁
发布于 2020-01-13 03:22:22
发布于 2020-01-13 03:22:22
79100
代码可运行
举报
文章被收录于专栏:雪雁的专栏雪雁的专栏
运行总次数:0
代码可运行

说明

本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出。

要点

  • 本教程使用Magicodes.IE.Excel来完成Excel模板导出
  • 需要通过创建Dto来完成导出
  • 需要按要求准备Excel模

主要步骤

1.安装包Magicodes.IE.Excel

在本篇教程中,我们仅演示使用Excel来完成学生数据的导入。我们需要在已准备好的工程中安装以下包,参考命令如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package Magicodes.IE.Excel
代码语言:javascript
代码运行次数:0
运行
复制

2.准备模板

Magicodes.IE.Excel模板导出支持单元格渲染和表格渲染:

  • 单元格渲染 语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{Company}}             (教学单位名称)2020年春季教材订购明细

注意:

  • 双大括号是必须的
  • 暂不支持表达式等
  • 支持子对象属性
  • 大小写敏感

  • 表格渲染

表格渲染的格式如上所述:

  • 渲染语法以“Table>>BookInfos|”为开始,其中“BookInfos”为列表属性
  • “RowNo”、“No”等均为列表字段
  • 必须以“|>>Table”结尾
  • 暂不支持一行多个Table(即将支持,具体请查看日志)

根据以上语法,我们可以编写模板如下所示:

3.创建导出Dto

主要代码如下所示:

  • 教材订购信息Dto
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <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:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /// <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;
        }
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

4.导出

接下来直接调用Magicodes.IE.Excel封装的模板导出方法,该方法实现自接口

IExportFileByTemplate:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <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模板导出。具体使用可以参考以下单元测试

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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模板导出教程就此结束了,由于仓促完成,还有许多地方可以改善并优化。

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

转载是一种动力 分享是一种美德

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文档官网:docs.xin-lai.com

QQ群:

编程交流群<85318032>

产品交流群<897857351>

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麦扣聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
pnpm + workspace + changesets 构建你的 monorepo 工
关于这些问题,在之前的一篇介绍 lerna 的文章中已经详细介绍过,感兴趣的同学可以再回顾下。
astonishqft
2022/08/31
5.2K0
pnpm + workspace + changesets 构建你的 monorepo 工
前端工程化实践:Monorepo与Lerna管理
前端工程化实践中,Monorepo(单仓库)管理和Lerna是两种流行的方式,用于大型项目或组件库的组织和版本管理。
天涯学馆
2024/06/14
3470
基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
对于维护过多个package的同学来说,都会遇到一个选择题,这些package是放在一个仓库里维护还是放在多个仓库里单独维护,本文通过一个示例讲述了如何基于Lerna管理多个package,并和其它工具整合,打造高效、完美的工作流,最终形成一个最佳实践
杨振涛
2019/08/06
3.1K0
基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
大仓实践录:Lerna/NPM/Yarn Workspace 方案组合和性能对比
仓就是仓库(repository,简称 repo)。通常我们使用多个仓库(简称多仓,multi-repo)来管理项目代码,也就是每个仓库负责一个模块或包的编码、构建、测试和发布,代码规模相对较小,所以也称为小型规模仓库(简称小仓)。而单一(mono)仓库(简称单仓,mono-repo)是指在一个仓库中管理多个模块或包,当代码规模达到一定程度后可称为大型规模仓库(简称大仓),至于这个程度大小并没有明确定义,通常说的大仓可理解为就是单仓。
CodecWang
2021/12/07
5.2K0
大仓实践录:Lerna/NPM/Yarn Workspace 方案组合和性能对比
突破项目瓶颈:2024 年 Monorepo 工具选择和实践
原文地址:https://juejin.cn/post/7342360674151858202
winty
2024/03/18
2.7K0
突破项目瓶颈:2024 年 Monorepo 工具选择和实践
Vue3源码01 : 代码管理策略-monorepo
从定义中可以知道,monorepo是一种策略,该策略的具体内容是:多个项目存储在同一个代码仓库中。采用一种策略,肯定是因为该策略具备一些优点。当然,也要认清其缺点。从下面这张图中,我们可以看出,项目代码的组织策略是在实践中诞生,不断发展变化的。
杨艺韬
2022/09/27
1.3K0
Vue3源码01 : 代码管理策略-monorepo
lerna最佳实践
在介绍我们今天的主角 lerna 之前,首先了解下什么是 multirepo ?什么是 monorepo ?
astonishqft
2022/05/10
2K0
lerna最佳实践
带你了解并实践monorepo和pnpm,绝对干货!熬夜总结!
简单来说就是,将多个项目或包文件放到一个git仓库来管理。 目前比较广泛应用的是yarn+lerna的方式实现monorepo的管理。 一个简单的monorepo的目录结构类似这样:
winty
2023/08/23
7.5K0
带你了解并实践monorepo和pnpm,绝对干货!熬夜总结!
lerna + dumi + eslint多包管理实践
在开发大型项目时, 我们通常会遇到同一工程依赖不同组件包, 同时不同的组件包之间还会相互依赖的问题, 那么如何管理组织这些依赖包就是一个迫在眉睫的问题.
玖柒的小窝
2021/10/05
4200
lerna + dumi + eslint多包管理实践
现代前端工程为什么越来越离不开 Monorepo?
随着前端工程日益复杂,某些业务或者工具库通常涉及到很多个仓库,那么时间一长,多个仓库开发弊端日益显露,由此出现了一种新的项目管理方式——Monorepo。本文主要以 Monorepo 的概念、MultiRepo的弊端、Monorepo 的收益以及Monorepo 的落地这几个角度来认识和学习一下 Monorepo,文末会有思考题,欢迎大家来踊跃讨论。
用户3806669
2021/03/27
1.6K0
读完 Vue 发布源码,小姐姐回答了 leader 的提问,并优化了项目发布流程~
这一期阅读的是 Vue3 源码中的 script/release.js 代码,也就是 Vue.js 的发布流程。在上一期源码阅读中从 .github/contributing.md[1] 了解到 Vue.js 采用的是 monorepo 的方式进行代码的管理。
若川
2021/09/07
1.2K0
基于pnpm + lerna + typescript的最佳项目实践 - 理论篇
为什么叫pnpm?是因为pnpm作者对现有的包管理工具,尤其是npm和yarn的性能比较特别失望,所以起名叫做perfomance npm,即pnpm(高性能npm)
Nealyang
2022/04/11
3.6K0
基于pnpm + lerna + typescript的最佳项目实践 - 理论篇
lerna入门指南
一.定位 Lerna is a tool that optimizes the workflow around managing multi-package repositories with git
ayqy贾杰
2019/06/12
1.6K0
大仓实践录:Lerna/NPM/Yarn Workspace 方案组合和性能对比
仓就是仓库(repository,简称 repo)。通常我们使用多个仓库(简称多仓,multi-repo)来管理项目代码,也就是每个仓库负责一个模块或包的编码、构建、测试和发布,代码规模相对较小,所以也称为小型规模仓库(简称小仓)。而单一(mono)仓库(简称单仓,mono-repo)是指在一个仓库中管理多个模块或包,当代码规模达到一定程度后可称为大型规模仓库(简称大仓),至于这个程度大小并没有明确定义,通常说的大仓可理解为就是单仓。
CodecWang
2023/11/17
2K0
大仓实践录:Lerna/NPM/Yarn Workspace 方案组合和性能对比
使用Yarn与Lerna管理monorepo
Yarn workspace 是 Yarn 提供的 monorepo 下,管理依赖的机制。对代码仓库下,多个 package 的依赖,进行管理:将共同的依赖,做 hosting(提升)。这样,可以防止 package 中的包重复安装。
我是leon
2022/03/11
1.4K0
基于 lerna 实现 Monorepo 项目管理
目前来讲,Lerna 作为 JavaScript项目的多包管理器,已经是比较成熟,并已被现代企业所验证,因此接下来将逐步搭建一个基于 Lerna[1] 的 Monorepo 管理环境,希望可以帮助大家在各司业务中落地并实现降本提效。
小东同学
2022/07/29
1.8K0
基于 lerna 实现 Monorepo 项目管理
多包依赖管理--Lerna
Lerna是一个使用git和npm来处理多包依赖管理的工具,利用它能够自动帮助我们管理各种模块包之间的版本依赖关系。可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。它属于monorepo类型,当你的项目有相关联时最好使用monorepo方式进行管理。
刘亦枫
2020/10/27
4.8K0
基于 lerna 的多包 JavaScript 项目搭建维护笔记
将大型代码仓库分割成多个独立版本化的 软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且, 跨越多个代码仓库的测试将迅速变得非常复杂。
用户1250838
2021/07/30
7970
lerna + dumi + eslint多包管理实践
在开发大型项目时, 我们通常会遇到同一工程依赖不同组件包, 同时不同的组件包之间还会相互依赖的问题, 那么如何管理组织这些依赖包就是一个迫在眉睫的问题.
徐小夕
2021/10/14
1.3K0
基于 Yarn 的 Monorepo 实践
几年前工作中整过几个 SDK 仓库,当时 SDK 库逻辑还比较简单,工程设计也不复杂: ESLint+Prettier+GitHook Rollup 打包 npm 私有仓库搭建 随即发包复用就解决了。 随着时间的推移,SDK 库为了兼容各个端、完善开发体验实现各种配套的调试工具等等逐渐变得复杂,之前简单的工程能力要实现源码插件化、分包发布、定制化构建等等能力会比较痛苦: 简单目录隔离划分模块 手动多次更新目录 package.json 版本来发包 多个端代码复用一个 tsconfig.json,存在端限制(
用户1097444
2022/06/29
1.7K0
基于 Yarn 的 Monorepo 实践
推荐阅读
相关推荐
pnpm + workspace + changesets 构建你的 monorepo 工
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档