携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
前言
今天介绍一个将execl表转成json或者其他数据格式的工具,node-xlsx。(其实是产品直接甩给我一个execl表,数据量太多,不想cv)
## node-xlsx
它是一个execl文件解析器和生成器
使用
环境
node环境
安装
npm install node-xlsx --save
将execl表转成json格式文件
需要用到 node内置的fs模块 , path模块(可选),node-xlsx的parse
const xlsx = require("node-xlsx");
const fs = require("fs");
// 读取xlsx
const sheets = xlsx.parse("./b.xlsx");
console.log(sheets);
const list = sheets[0].data;
console.log(list)
let jsonObj = [];
list.forEach((e, index) => {
if (index !== 0) {
jsonObj.push({
name: e[0],
age: e[1]
})
}
})
fs.writeFileSync("./result.json", JSON.stringify(jsonObj));
console.log('文件转换完成')
使用xlsx.parse会将表里面的数据转成一个数组,一个sheet为一个对象(name为sheet的名字,data是这表中的数据)
表的数据截图:
将json格式文件转成execl
需要用到node内置的fs模块,node-xlsx的build
const data = [
{
name:"表1",
data:[
["姓名","年龄"],
["新的张三","21"],
["新的李四","21"],
["新的王五","21"],
]
}
]
const buffer = xlsx.build(data);
fs.writeFileSync('./new.xlsx',buffer)
console.log("转换完成")
转换后的截图:
自定义列宽
依着上一个转成xlsx文件的自定义列宽
使用 !cols
const data = [
{
name:"表1",
data:[
["姓名","年龄"],
["新的张三","21"],
["新的李四","21"],
["新的王五","21"],
]
}
]
const sheetOptions = {'!cols': [{wch: 20}, {wch: 18}]};
const buffer = xlsx.build(data,{sheetOptions});
fs.writeFileSync('./new.xlsx',buffer)
console.log("转换完成")
新增一个名为sheetsOptions的对象,里面包含了[{wch: 20}, {wch: 18}]的每一个对象对应着每例,如{wch:20}对应的姓名,{wch:18}对应的是年龄
合并单元格
使用!merges
//将自定义列宽添加一点代码
const sheetOptions = {
'!cols': [{wch: 20}, {wch: 18}],
'!merges':[{s:{r:0,c:0},e:{r:3,c:0}}]
};
结果截图:
注:s和e是约定成俗的
建立多张表
const sheetOptions = {
'!cols': [{wch: 20}, {wch: 18}],
'!merges':[{s:{r:0,c:0},e:{r:3,c:0}}]
};
const data = [ { name:"表1", data:[ ["姓名","年龄"],
["新的张三","21"],
["新的李四","21"],
["新的王五","21"],
]
},
{
name:"表2",
data:[
["年级","班级"],
["三年级","2班"],
["三年级","2班"],
["三年级","2班"],
],
options:sheetOptions
}
]
const buffer = xlsx.build(data);
fs.writeFileSync('./new.xlsx',buffer)
console.log("转换完成")
建立多张表就是在data这个数组里面多新建一个对象,如果要在后面表中合并单元格等操作,可以将当前表对象创建一个
options键。