1.依赖包xlsx
npm install node-xlsx
2.代码
const XLSX = require('xlsx')
const fs = require('fs')
const dest_json_path = "./export/"
const dest_ts_path = "./export/LanDef.ts"
const xlsxName = "language.xlsx"
const WorkBook = XLSX.readFile(xlsxName, { type: 'string' })
// 读取language的sheet
const WorkSheet = WorkBook.Sheets['language'];
// 读取数据格式为json
const sheetJson = XLSX.utils.sheet_to_json(WorkSheet);
// 可能有多种语言,这里可以填写exl中en外的其他的语言
const languages = ['en']
// 主函数
function deal_language() {
let allJsonReady = {}
let idArr = [];
for (let i = 0; i < languages.length; i++) {
allJsonReady[languages[i]] = [];
}
for (const row in sheetJson) {
if (Object.hasOwnProperty.call(sheetJson, row)) {
const rowInfo = sheetJson[row];
// 如果id为空或者无效,则跳过
if (!rowInfo['Id'] || rowInfo['Id'] == "") {
continue;
}
// id单独放
idArr.push(rowInfo['Id'])
// 其他放到一个object
for (let i = 0; i < languages.length; i++) {
allJsonReady[languages[i]].push(rowInfo[languages[i]] ? rowInfo[languages[i]] : "")
}
}
}
for (const key in allJsonReady) {
if (Object.hasOwnProperty.call(allJsonReady, key)) {
let idx = languages.findIndex((item) => { return item === key })
if (idx != -1) {
const element = allJsonReady[key];
writeJsonToFile(idArr, element ? element : "", dest_json_path + "language_" + key + ".json")
}
}
}
writeDataToTsFile(idArr, dest_ts_path);
}
// 写入json文件
function writeJsonToFile(ids, langs, fileName) {
var ws = fs.createWriteStream(fileName)
ws.write("{")
for (let i = 0; i < ids.length; i++) {
// 在这里遇到\n换行的问题;采用了json格式的字符串后就解决了。
ws.write("\n\t" + JSON.stringify(ids[i]) + ": " + JSON.stringify(langs[i]) + ((i != ids.length - 1) ? ',' : ''))
}
ws.write("\n}")
ws.close();
}
// ts文件。这个可有可无。因为项目用的ts文件,所以导出id文件为ts。视项目而定
function writeDataToTsFile(ids, fileName) {
var ws = fs.createWriteStream(fileName)
ws.write("export namespace Lan{")
for (let i = 0; i < ids.length; i++) {
ws.write(`\n\texport const ${ids[i]} = "${ids[i]}";`)
}
ws.write("\n}")
ws.close();
}
try {
deal_language()
console.log('Success!')
} catch (error) {
console.log('Fail! ' + error)
}
3.执行脚本
进入到该文件的目录下,执行改命令
node ./exportLan.js
打印出Success后,可以在同目录下生成一个export的文件夹,里面包含了language_en.json。
4.打包可执行程序
用到依赖包pkg(用的mac系统)。
安装依赖包
npm install -g pkg
安装成功后,回到脚本文件目录输入打包命令
pkg exportLan.js
之后在同目录下会生成 三个文件
exportLan-linux
exportLan-macos
exportLan-win.exe
三个文件对应三种平台
这样就可以把改文件夹copy别人,别人不用安装环境就可以直接用。
这里有个小插曲,执行
./exportLan-macos
会出问题,一般是执行改文件权限不足,需要添加执行权限
chmod +x exportLan-macos
再次执行上次的命令就能成功了。
资源:zip