nodejs读取excel并解析之后生成表

使用的库为:node-xlsx
文档地址:https://www.npmjs.com/package/node-xlsx

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

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

/**
 * @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': [{ wch: 50 }, { wch: 50 }] });

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

        请在桌面查找 ${outputName}

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

示例数据

第4届 预选赛 7.22
比赛队伍场次大区优酷搜狐腾讯
达到VS雷霆14区https://v.youku.com/v_show/id_XNTE4NDc3MDg2NA==.htmlhttps://tv.sohu.com/v/dXMvMzM0NzQwNDMyLzI3NDA2MTI0OS5zaHRtbA==.htmlhttps://v.qq.com/x/page/v3262bq24do.html
繁莹真好看吖VS弟弟14区https://v.youku.com/v_show/id_XNTE4NDc4OTUyNA==.htmlhttps://tv.sohu.com/v/dXMvMzM0NzQwNDMyLzI3NDA3MTEzOS5zaHRtbA==.htmlhttps://v.qq.com/x/page/k3262fr8iio.html
天下つ无双VS我家傻妮最美14区https://v.youku.com/v_show/id_XNTE4NDc4OTUyNA==.htmlhttps://tv.sohu.com/v/dXMvMzM0NzQwNDMyLzI3NDA3MTI5NS5zaHRtbA==.htmlhttps://v.qq.com/x/page/u3262wa9ejt.html

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值