const xlsx = require('xlsx') const fs = require('fs') const dayjs = require('dayjs') const dayFromExcel = (value) => dayjs('1900-01-01') .add(value + 2 * 365, 'day') .format('YYYY-MM-DD') const useMap = (obj, server) => ({ server, fullName: obj.fullName, car_id: obj.car_id, brand: obj.brand, nickName: obj.nickName, keyWords: obj.keyWords, carClass: obj.carClass, carClassOrder: { D: 1, C: 2, B: 3, A: 4, S: 5, R: 10, }[obj.carClass], star: obj.star, quality: obj.quality === 'ruby' ? 'legendary' : obj.quality, bps: [ obj.star_1 > 0 ? obj.star_1 : 0, obj.star_2 > 0 ? obj.star_2 : 0, obj.star_3 > 0 ? obj.star_3 : 0, obj.star_4 > 0 ? obj.star_4 : 0, obj.star_5 > 0 ? obj.star_5 : 0, obj.star_6 > 0 ? obj.star_6 : 0, ], isKeyCar: obj.star_1 === '🔑', decals: [], decalsExclusive: [], bodyKit: !!obj.bodyParts, roadster: { 无顶: 'nofold', 可开合: 'fold', '': null }[obj.openCar] || null, nitroVisualsCount: 0, releaseVersion: obj.releaseVersion, rank: obj.rank, topSpeed: obj.topSpeed, acceleration: obj.acceleration, handling: obj.handling, nitro: obj.nitro, nitroDuration: obj.nitroDuration, speedNitro: obj.nitroSpeed, speedBlue: obj.blueSpeed, speedOrange: 0, speedPurple: 0, speedAir: airSpeed, stageCount: 0, costList: [], stageCost: 0, uncommonPartCost: 0, uncommonPart: obj.uncommonPart, rarePart: obj.rarePart, epicPart: obj.epicPart, legendaryPart: 0, partCost: 0, totalCost: 0, }) const copy = (obj) => JSON.parse(JSON.stringify(obj)) const useHandle = (obj, handle) => { let res = copy(obj) Object.keys(handle).forEach((key) => { if (res[key]) { res[key] = handle[key](res[key]) } }) return res } const exportJsonLines = (xlsxFilePath, sheetName) => { const table = xlsx.readFile(xlsxFilePath) const dataPath = `dist\\${xlsxFilePath}.${sheetName}.sed.json` const dataJson = xlsx.utils.sheet_to_json(table.Sheets[sheetName]) // console.log(table.Sheets[sheetName]["!merges"]) const dataLines = dataJson.map((obj) => useMap(obj)) const dataBuffer = Buffer.from(JSON.stringify(dataLines)) fs.writeFileSync(dataPath, dataBuffer) } //运行命令 node exportJson文件名 表名,即可导出文件 // node ./exportJson.js ./狂野飙车9生涯数据-地图.xlsx forJson const [, , xlsxFilePath, sheetName] = process.argv try { if (xlsxFilePath && sheetName) { exportJsonLines(xlsxFilePath, sheetName) console.log('执行成功') } } catch (e) { console.log(e) }