会计老婆大人的前端小跟班儿——node|会计老婆大人的前端小跟班儿——node 操作 Excel 表格
前言
我女朋友,是个会计, 她每天都要收拾两样东西,表格和我!通常情况下,她收拾不了表格,心情就会变差,随后就会收拾我!按逻辑,表格就是我被收拾的罪魁祸首,那如果我搞定了表格······岂不是·······嘻嘻嘻
文章图片
一个机会的出现"这里有几个表格, 你给我把几个表格里面的内容放在一个文件里面"
此时, 我已经意识到了, 她最近心情不好, 但是我又表现的比较好, 她没什么机会骂我
我知道, 这只是一个借口, 我一定不能让她得逞, 还好我有 "技术" O(∩_∩)O~接下来, 我就开始了我的操作.PS : 今天一定不能挨骂
准备工作
文件夹
a.xlsx : 有两个表格页
文章图片
b.xlsx : 有一个表格页
文章图片
目标
把两个 Excel 表格合并成一个
读取两个 Excel 表格的内容, 合并成一个, 写入到一个新的 Excel 表格内
开始搞
下载第三方
$ npm install node-xlsx
// 导入第三方
const xlsx = require('node-xlsx')// 开始读取 excel 文件
// 测试读取 a.xlsx 文件
const workbook = xlsx.parse('./a.xlsx')console.log(workbook)
接下来去命令行运行一下这个文件试试看
$ node index.js
得到的结果是
[
{ name: '第一页', data: [ [Array], [Array] ] },
{ name: '第二页', data: [ [Array], [Array] ] }
]
我们发现, 把第一个 excel 表格的所有内容都读取出来了
接下来详细打印一下数组内的内容
console.log(workbook[0].data)
再来看一下结果
[ [ '姓名', '性别', '年龄' ], [ '前端小灰狼', '男', 18 ] ]
我们发现, 当前这个表中的所有内容都出现了
如果我们只需要合并若干表格的话, 其实是不需要做多余的操作的, 这个数据就可以使用
读取两个文件并整合数组
index.js
// 导入第三方
const xlsx = require('node-xlsx')// 读取第一个文件
const workbook1 = xlsx.parse('./a.xlsx')
const workbook2 = xlsx.parse('./b.xlsx')// 把两个读取到的文件整合
const workbookResult = [ ...workbook1, ...workbook2 ]console.log(workbookResult)
运行一下看看结果
[{ name: '第一页', data: [ [Array], [Array] ] },
{ name: '第二页', data: [ [Array], [Array] ] },
{
name: '财务自由',
data: [
[Array], [Array],
[Array], [Array],
[Array], [Array],
[Array]
]
}
]
全部读取出来了
如果我猜的没错, 那么这个数据是不需要调整的, 只要按照这个格式再次写入到一个 .xlsx 的文件中就可以了
尝试创建一个 Excel 表格
index.js
// 导入第三方
const xlsx = require('node-xlsx')
const fs = require('fs')// 准备要写入的数据
//这里的一个 data 就是一个 Excel 文件
const data = https://www.it610.com/article/[
//每一个对象就是一个表格页
{
//name 属性就是表格页的名称
name:'测试',
//data 就是表格页内的数据
data: [
//每一个小数组就是一行数据
[ '姓名', '性别', '年龄' ], // 以这一行为表头
[ '前端小灰狼', '男', 18 ],
[ '千锋教育', '保密', 11 ]
]
}
]// 利用 xlsx 生成表格流文件
const workboot = xlsx.build(data)// 把生成好的内容写入一个文件
fs.writeFileSync('./test.xlsx', workboot)
运行以后, 我们发现, 当前目录下多了一个 test.xlsx 的文件
文章图片
通过写入方式, 我们会发现, 读取出来的内容是可以直接使用的
正式开始合并工作
OS : 我的工作马上就要完成了, 看你怎么骂我. 哼, 女人 !!
但是我这次完成以后, 如果让她尝到甜头, 以后肯定还会让我搞, 不如设计好, 以后就方便多了
文章图片
准备一个目录结构
- src
+ data// 存放所有等待合并的 Excel 表格
+ index.js// 逻辑文件
开始代码
index.js
// 导入第三方
const xlsx = require('node-xlsx')
const fs = require('fs')// 装备一个数组用来整合所有内容
let list = []// 利用 fs 读取 data 文件夹路径
const pathInfo = fs.readdirSync('./data/')// 循环遍历来生成
pathInfo.forEach(item => {
// 排除掉不是 .xlsx 结尾的文件
if (!/\.xlsx$/.test(item)) returnconst res = xlsx.parse(`./data/${ item }`)
list = [ ...list, ...res ]
})// 生成要写入的 表格流 文件
const workboot = xlsx.build(list)// 开始写入
fs.writeFileSync('./result.xlsx', workboot)
完成, 以后在让我合并表格这个事情就简单多了
OS : 那她会不会还让我做很多别的事情, 比如调整表格内容(合并单元格, 设置单元格大小, ...)
管她呢, 下次她有要求再说吧, 不能一次全都满足她, 给自己留一点余地
【会计老婆大人的前端小跟班儿——node|会计老婆大人的前端小跟班儿——node 操作 Excel 表格】工作结束
小灰狼: "老婆, 老婆, 我弄完了, 我厉害不厉害"
"为什么这么快"
小灰狼: "拿了橘子跑了"
"什么?"
小灰狼: "knowledge is power,知识就是力量"
"你丫的有这好东西, 不早说,还跟我这儿拽洋文..."(媳妇儿,别打脸······)
推荐阅读
- React组件实例三大属性state|React组件实例三大属性state props refs使用详解
- 商学院——《沙漠风云》之第一回|商学院——《沙漠风云》之第一回 大小穿越、商战前传,各路精英、蓄势待发
- 嵌入式|干货(嵌入式系统设计开发大全!(万字总结))
- 意大利的浪漫与危险,村上春树见证过
- 掘光者网课题库系统|大学网课搜题查题公众号 内有接口
- 折叠手机刷爆外网,花花女郎倾情代言,毒枭大哥在线耍猴
- 测字(看你能否迎来一飞冲天、大杀四方的好运)
- 2020年会有贵人罩着的五大命格,简直好运旺到爆
- 满大街1.0T、1.2T、1.3T!哪家最靠谱()
- 框架大集合|【MyBatis详解】——动态SQL解析与执行原理