zoukankan      html  css  js  c++  java
  • 在Node.js中使用ejsexcel输出EXCEL文件

    1、背景

    在Nodejs应用程序中输出Excel,第一印象想到的一般是node-xlsx,这类插件不仅需要我们通过JS写入数据,还需要通过JS进行EXCEL显示样式的管理

    这是个大问题,不仅代码冗余,而且非常不易于维护,假设业务需要合并一个单元格,或者换个颜色,我们都需要重新修改代码。

    反思这个问题的核心,跟使用JS来操作页面样式其实是同一个道理,我们没有把数据/业务逻辑操作和样式分离

    在WEB开发中,我们有了CSS来分离处理样式的问题。

    现在,在输出EXCEL的时候,我们也希望将样式问题分离出去。

    2、ejsexcel 

    ejsexcel 就是在这样的背景下诞生的。

    1、业务人员提供EXCEL模板,包含显示样式以及固定文本。

    2、数据部分由开发者按照ejs格式录入。

    3、Nodejs应用程序只需要准备好数据,然后通过ejsexcel注入到EXCEL模板中即可。

    3、DEMO

    1、Excel模板

    可以输出单个对象,也可以通过forRow关键字进行循环输出。

    另外,其中的脚本同样支持JS相关函数。

    2、注入数据

     //读取excel模板
            let daily_excel_template = fs.readFileSync(DAILY_TEMPLATE)
    
            //用数据源(对象)data渲染Excel模板
            let self = this
            ejsExcel.renderExcelCb(daily_excel_template, reportData, function(err,exlBuf2){
                if(err) {
                    logger.fatal('[EXCEL生成失败!]:'+DAILY_TEMPLATE)
                    logger.info(err)
                    return;
                }
                fs.writeFileSync(filename, exlBuf2);
                logger.info('[EXCEL生成成功!]:'+DAILY_TEMPLATE)
            });

    以上是部分代码:

    首先读取模板EXCEL文件,然后调用ejsExcel.renderExcelCb方法将数据注入模板中,由模板生成最终的EXCEL文件。

    4、注意的问题

    • 作者手工编译了Node-Expat,所以使用前确保你使用的node版本以及操作系统已经被正确编译,如没有需要自行编译对应版本的node-expat二进制文件。点击这里查看目前已经编译的版本。
    • 目前还不支持EXCEL条件格式。
  • 相关阅读:
    dubbo 在不同协议下携带上下文区别
    innodb使用大字段text,blob的一些优化建议(转)
    Redis的过期策略和内存淘汰策略(转)
    在 Docker 里跑 Java,你必须知道的那些事儿!(转)
    如何在宿主机上执行容器里的jmap,jtack,jstat 命令获取信息(原创)
    操作系统实现线程的几种模式 和 java创建线程的3个方式
    MySQL数据库事务各隔离级别加锁情况--read committed && MVCC
    kafka性能调优(转)
    游戏数值系统
    lua函数回调技巧
  • 原文地址:https://www.cnblogs.com/souvenir/p/6070722.html
Copyright © 2011-2022 走看看