摘要:前言用做服务器端表格处理时,需要使用处理模块,网上能搜到的插件大概就三四种等,经过我的使用,发现最强大,最全面的就是。合并单元格使用此时合并了两个单元格。后续正常调用即可。
前言
用node做服务器端表格处理时,需要使用excel处理模块,网上能搜到的插件大概就三四种(xlsx,excel-export,node-xlsx等),经过我的使用,发现最强大,api最全面的就是exceljs。
然而因为其官方文档十分简洁(陋),初起时使用过程并不那么顺利,这里结合自己的经验,对exceljs模块及其基本用法进行简单介绍,对一些自己遇到的坑进行总结。
npm install exceljs
使用npm命令安装之后,在所需要的文件中引入exceljs模块:
var Excel = require("exceljs");二、创建工作簿及工作表
引入之后,我们就可以直接通过js创建工作簿,注意:创建工作表之前必须创建工作簿。
var workbook = new Excel.Workbook();
工作簿有很多属性可以设置,比如创建人、修改时间等一般用不上的信息,一般不需要设置,如果你有特殊需要,那么请参照下述设置即可:
workbook.creator = "WJY";//设置创建者
workbook.lastModifiedBy = "Her";//上次修改人
workbook.created = new Date(1985, 8, 30);//创建时间
workbook.modified = new Date();//修改时间
更多详细的关于创建工作簿的属性设置请[参考官方][1]。
创建工作簿之后,需要为工作簿添加工作表,用来存放我们的数据:
var sheet = workbook.addWorksheet("My Sheet");
通常这样创建就够了,但是也可以设置创建的工作表的属性:
// 创建标签为红色的表格
var sheet = workbook.addWorksheet("My Sheet", {properties:{tabColor:{argb:"FFC0000"}}});
// 创建网格线隐藏的表格
var sheet = workbook.addWorksheet("My Sheet", {properties: {showGridLines: false}});
// 创建第一行第一列冻结的表格
var sheet = workbook.addWorksheet("My Sheet", {views:[{xSplit: 1, ySplit:1}]});三、表格填充(数据写入)
在写入数据之前,要指定使用的工作表,可以像下面这样操作:
// 通过表格名字(创建时的"My Sheet")
var worksheet = workbook.getWorksheet("My Sheet");
// 通过表格顺序数(id),即第几张表格,这里注意,exceljs不是从0开始计算,而是1。
var worksheet = workbook.getWorksheet(1);
拿到工作表之后,可以通过两种方式将表格内容生成:
1.worksheet.getCell("A1").value = "value";
这种方式较为灵活,可填写任意位置的表格,利用循环嵌套等方式可生成想要的表格。
合并单元格使用: worksheet.mergeCells("I2:J2");此时合并了I2 J2两个单元格。
2.如果数据是对象数组data=[{name:"a"},{name:"b"},{name:"c"}],也就是数据格式良好,有固定的键值对,那么推荐这种方式:
先定好表头
worksheet.columns = [ { header: "姓名", key: "name", width: 10 }, ];
header:参数即为在表头里出现的值,key表示这列的值对应的对象的key(本例为name),width为表格列宽。
设置表头之后,使用addrow方法即可将数据写入表中,如下:
for(let i =0;i四、生成xlsx文件 var filename="test.xlsx";//生成的文件名 fpath=path.join(__dirname,"../download/"+filename)//文件存放路径 workbook.xlsx.writeFile(fpath)//将workbook生成文件 .then(function() { //文件生成成功后执行的操作,这里是将路径返回客户端,你可以有自己的操作 res.send({filePath:filename}) });总结、有时候我们数据格式良好,但需要实现自定义表头(表头有合并单元格、多级表头等),这时该怎么办呢?
混合使用 worksheet.mergeCells()及worksheet.getCell().value
设置表头,之后使用worksheet.columns = [ { key: "name", width: 10 }, ];注意:这里没有header的key,如果有,将会覆盖我们的自定义表头内容。
后续正常调用for(let i =0;i即可。
更多资料参阅官方文档
如有问题可留言,互相交流解决。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/107285.html
摘要:广义的定位,涉及到浏览器,手机里面的用户交互展示的内容,都属于前端。对自己有好处因为多次和阿里的面试官进行了电话面试沟通,所以这些不只是一个面试官提出的问题,而是多个面试官提出的问题。保持一个虚心学习的状态。 介绍 狭义的来讲,前端指的就是我们常说的html, css, javascript. 三者必不可缺. 而其中涵盖的知识点不可一篇文章就能完整的讲述出来的。广义的定位,涉及到浏览器...
摘要:本期推荐文章类内存泄漏及如何避免,由于微信不能访问外链,点击阅读原文就可以啦。四种常见的内存泄漏划重点这是个考点意外的全局变量未定义的变量会在全局对象创建一个新变量,如下。因为老版本的是无法检测节点与代码之间的循环引用,会导致内存泄漏。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周正式开始前端进阶的第一期,本周的主题...
摘要:示例小明小明小明小明小花小花姓名价格基于上面的方法我写了个简易的基于的自动生成表格的插件,可以合并单元格。对于兼容这些规范,写法也很多,希望多多指教完整代码 事情是这样的,我写了一个基于jQuery的插件,在传统的开发模式中,我们需要现在页面引入jQuery.js,然后在引入我们的插件,我们的插件才能使用。但是随着webpack的兴起,我不在想一步步的写入script标签,写着一堆的s...
阅读 1230·2021-11-23 09:51
阅读 677·2021-11-19 09:40
阅读 1337·2021-10-11 10:58
阅读 2346·2021-09-30 09:47
阅读 3724·2021-09-22 15:55
阅读 2159·2021-09-03 10:49
阅读 1250·2021-09-03 10:33
阅读 697·2019-08-29 17:12