凌晨不睡觉

V1

2022/11/02阅读:28主题:默认主题

nodejs读取excel与nodejs生成excel表

使用的库为:node-xlsx :支持读取与创建excel
文档地址:https://www.npmjs.com/package/node-xlsx

我们的网页经常需要嵌入第三方的播放器,这个播放器需要取到视频的id才可以播放,但上传完视频只会得到视频链接,每次还需要自己根据视频链接去解析出视频id。

于是基于node-xlsx封装了一个解析excel内容并生成另一个excel表的小插件。根据需要自行替换表格数据解析(filter)部分即可。

配置项

变量名 含义
homedir 根目录,默认配置在桌面
outputName 生成的文件名
fileName 要读取的文件名,从homedir寻找

代码

/**
 * @author AmsWait
 * @description
 * 快速导出压缩包 需要安装依赖  npm install node-xlsx --save
 * 这个库的文档地址 https://www.npmjs.com/package/node-xlsx
 *
 * @example  将需要导出的目录添加到target数组中 命令行执行 node export-zip.js 即可
 * @version 20210723
 */


const fs = require('fs'),
    xlsx = require('node-xlsx'),
    os = require('os'),
    homedir = os.homedir() + '/Desktop/',
    outputName = 'vid对应表.xlsx';

// 读取文件
const fileName = 'vid.xls';
const workSheetsFromBuffer = xlsx.parse(fs.readFileSync(homedir + fileName));

/**
 * 解码base64字符
 * @param { String } str base64字符串
 * @returns { String } 解码出的字符串
 */

const decodeBase64 = str => {
    let decoder = Buffer.from(str, 'base64')
    return decoder.toString();
}
/**
 * 读取并过滤表格数据
 * @param {*} obj 表格数据对象
 * @returns 过滤后的表格数据对象
 */

const filter = (obj) => {
    return obj.map((currentValue, index) => {
        let cache = currentValue.data.map((v, i) => {
            let flag = v.find(ele => {
                return ele && ele.indexOf('sohu') != -1
            })
            if (flag) {
                let vid = flag.split('/');
                vid = decodeBase64(vid[vid.length - 1]).split('/');
                vid = vid[vid.length - 1].replace('.shtml''');

                let newArray = [v[0], vid];
                return v = newArray;
            }
        })

        return {
            name: currentValue.name,
            data: cache.filter(ele => !!ele)
        }
    })
};

// 生成表格数据对象  wch为设置列宽度
const buffer = xlsx.build(filter(workSheetsFromBuffer), { '!cols': [{ wch50 }, { wch50 }] });

//生成excel
fs.writeFile(homedir + outputName, buffer, (err) => {
    if (err) throw err;
    console.log(`
    --------- ---------生成完毕--------- ---------

        请在桌面查找 ${outputName}

    ---------如需配置生成路径或文件名,请配置output---------
    `
);
});

注:excel文件内有几页sheet就会对应生成的表内也会几页。

我的个人公众号:归园田居 每日分享前端知识与资讯~

分类:

前端

标签:

前端

作者介绍

凌晨不睡觉
V1