diff --git a/exportHelper.js b/exportHelper.js new file mode 100644 index 0000000..ea75842 --- /dev/null +++ b/exportHelper.js @@ -0,0 +1,107 @@ +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) +} diff --git a/exportJsonLines-helper.js b/exportJsonLines-helper.js new file mode 100644 index 0000000..9c69bc2 --- /dev/null +++ b/exportJsonLines-helper.js @@ -0,0 +1,67 @@ +const xlsx = require('xlsx') +const fs = require('fs') + +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, +}) + +const exportJsonLines = (xlsxFilePath, sheetName) => { + const table = xlsx.readFile(xlsxFilePath) + const dataPath = `dist/${xlsxFilePath}.${sheetName}.line.json` + const dataJson = xlsx.utils.sheet_to_json(table.Sheets[sheetName]) + // console.log(table.Sheets[sheetName]["!merges"]) + const dataLines = dataJson + .map((obj) => useMap(obj)) + .map((dataItem) => JSON.stringify(dataItem)) + .join('\n') + const dataBuffer = Buffer.from(dataLines) + + fs.writeFileSync(dataPath, dataBuffer) +} + +//运行命令 node exportJsonLines 文件名 表名,即可导出文件 + +// node ./exportJsonLines.js ./狂野飙车9生涯数据-地图.xlsx forJson + +const [, , xlsxFilePath, sheetName] = process.argv + +try { + if (xlsxFilePath && sheetName) { + exportJsonLines(xlsxFilePath, sheetName) + console.log('执行成功') + } +} catch (e) { + console.log(e) +}