You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.5 KiB
107 lines
2.5 KiB
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)
|
|
}
|
|
|