
凌晨不睡觉
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': [{ wch: 50 }, { wch: 50 }] });
//生成excel
fs.writeFile(homedir + outputName, buffer, (err) => {
if (err) throw err;
console.log(`
--------- ---------生成完毕--------- ---------
请在桌面查找 ${outputName}
---------如需配置生成路径或文件名,请配置output---------
`);
});
注:excel文件内有几页sheet就会对应生成的表内也会几页。
我的个人公众号:归园田居 每日分享前端知识与资讯~
作者介绍

凌晨不睡觉
V1