前端将execl表转成json的小工具

361 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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为一个对象(namesheet的名字,data是这表中的数据)

表的数据截图:

1659494388719.png

1659494355215.png

将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("转换完成")

转换后的截图:

1659494949494.png

自定义列宽

依着上一个转成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}}]
   };
   

结果截图:

1659496282404.png

注:s和e是约定成俗的

1659496219837.png

建立多张表

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("转换完成")

image.png 建立多张表就是在data这个数组里面多新建一个对象,如果要在后面表中合并单元格等操作,可以将当前表对象创建一个options键。