在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条件格式。
在Node.js中使用ejsexcel输出EXCEL文件的更多相关文章
- Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法
原来的代码如下: var readable = fs.createReadStream( filepath ); var writable = fs.createWriteStream( outFil ...
- 如何在Node.js中合并两个复杂对象
通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...
- 初步揭秘node.js中的事件
当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...
- node.js中process进程的概念和child_process子进程模块的使用
进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...
- node.js中通过stream模块实现自定义流
有些时候我们需要自定义一些流,来操作特殊对象,node.js中为我们提供了一些基本流类. 我们新创建的流类需要继承四个基本流类之一(stream.Writeable,stream.Readable,s ...
- node.js中stream流中可读流和可写流的使用
node.js中的流 stream 是处理流式数据的抽象接口.node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例. 流可以 ...
- NodeJs>------->>第二章:Node.js中交互式运行环境--------REL
第二章:Node.js中交互式运行环境--------REL 一:REPL运行环境概述 C:\Users\junliu>node > foo = 'bar' ; 'bar' > 二: ...
- 在Node.js中操作文件系统(一)
在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...
- Node.js中Process.nextTick()和setImmediate()的区别
一.Webstrom使用node.js IDE的问题 在区别这两个函数之前来说一下Webstrom使用node.js IDE的问题,在配置Node.js的IDE了,但setImmediate().re ...
随机推荐
- 第二阶段冲刺(个人)——six
今天的计划:选择功能界面的logo.背景与功能选择框的整体设计组合. 昨天做了什么?优化登录.注册信息的填写判断. 困难:无.
- Python进阶-IV-Wrapper高阶
一.装饰器回顾: 1.标准的装饰器示例 def trapper(func): def inner(*args, **kwargs): print('插入到被装饰函数前的功能!') res = func ...
- Scrapy笔记02- 完整示例
Scrapy笔记02- 完整示例 这篇文章我们通过一个比较完整的例子来教你使用Scrapy,我选择爬取虎嗅网首页的新闻列表. 这里我们将完成如下几个步骤: 创建一个新的Scrapy工程 定义你所需要要 ...
- excel的IRR函数
office官网找到IRR的介绍 https://support.office.com/zh-cn/article/irr-%E5%87%BD%E6%95%B0-64925eaa-9988-495b- ...
- notapad++正则替换
1.替换小数点后一位 XP_001663106.2XP_001662510.3XP_001655249.2XP_001655248.1NP_001165739.1 \.[0-9]或者\.\d #第一个 ...
- 最短路径 | 1003 dfs 或 dij ,单源最短路径条数与经过的点权最大
这题很早之前就遇到过,是pat留给我的第一印象,然而昨天却有点写不出来.今天dfs用了10分钟不到写出来了.dij用了大约15分钟,捉虫花了一点时间. dfs: 注意剪枝的时候别剪错就行了. #inc ...
- 洛谷p1747好奇怪的游戏题解
题目 永远不要怀疑劳动人民的智慧! 把快读里最后的return直接返回零的 我已经不是第一次写错了! 我要是再写错我就****** 主要是逆向思维,把从两个点往(1, 1)走想成从(1, 1)点往这两 ...
- 配置MySQL主从复制和读写分离
实验环境 序号 主机名 IP地址 备注 1 mysql-master 192.168.204.201 MySQL主库 2 mysql-slave 192.168.204.202 MySQL从库 3 a ...
- windows 中如何定位恶意软件的藏身位置
目录 一: 下载spy++ 打开后 点击 搜索下面的查找窗口(Alt+F3) 点击 查找程序工具 右侧的 靶子一样的图标,鼠标左键按住不放,拖放到 弹窗上面,弹窗周围会出现 黑框. 然后 我们点击确定 ...
- git bash 乱码问题之解决方案
解决办法:右击左上方git标识,然后进入到如图中,点击Text,进行操作. 操作完毕后,关闭git bash,然后再重新打开,执行ls或ll命令,查看对应的以中文作为目录或文件名是否显示乱码,如果之前 ...