有些场景我们需要将Excel文档中的内容抽取出来生成别的文件,作为一个前端,服务框架最应该熟悉的就是node了,以下是基于多语言转换实现代码,看明白原理自己改一改就能用了
1.安装node环境
2.创建一个文件夹,文件夹中创建 package.json内容如下
{ "dependencies": {"express": "^4.18.2","fs": "^0.0.1-security","node-xlsx": "^0.23.0"}
}
3.命令行切至文件夹内,执行命令 npm i
4.文件夹内创建 ExcelToJsonAll.js,与package.json同级
var xlsx = require('node-xlsx');
const fs = require('fs');
// 要获取文件的文件名
var sheets = xlsx.parse('./fileList/Export.xls');const data = sheets[0].data;// 获取需要支持的语言
getRows = [ // index对应的是多语言文档里列的角标{ code: "zh", name: "简体中文", index: 7 },{ code: "en", name: "英语", index: 8 },]getRows.forEach(item => {// 创建对象var obj = {};data.forEach((d, i) => {if (i != 0) {obj[d[0]] = d[item.index];}})// 重新排序const sListOld = [];for (key in obj) {const skey = key.split('_')const keyNumber = skey[skey.length-1]const keyNumberReg = new RegExp(`_${keyNumber}`); // 不加'g',仅删除字符串里第一个"a"const keyHead = key.replace(keyNumberReg,"");const keyLength = keyHead.lengthsListOld.push({number: keyNumber,keyLength: keyLength,key: key,value: obj[key]})}// 数字升序排列function up(a, b) {return a.number-b.number}// 排序后数组const sListNew = sListOld.sort(up)// key长度升序排列//(如果只按数字排列则会出现增量key和原始key数字部分相同的参杂在一起的情况,所以按key长度区分开)function upKeyLength(a, b) {return a.keyLength - b.keyLength;}// 排序后数组const sListSorted = sListNew.sort(upKeyLength);// 转对象fileJson = {}sListSorted.forEach(newDt => {fileJson[newDt.key] = newDt.value})console.log(`========== ${item.name} ${item.code}.js ==========`)console.log(fileJson)// 输出语言jsonfs.writeFileSync(`json_keyAll/${item.code}.json`, JSON.stringify(fileJson, null, "\t"), 'utf8');
})
5.导入来源和导出生成文件路径根据自己实际情况定义
6.执行命令 node ExcelToJsonAll.js