Skip to content

Commit

Permalink
chore: add support of csv file
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier Zheng authored and Xavier Zheng committed Jul 14, 2021
1 parent 0713db5 commit 225ffca
Showing 1 changed file with 35 additions and 34 deletions.
69 changes: 35 additions & 34 deletions scripts/excel_2_kv.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const fs = require('fs-extra');
const keyvalues = require('keyvalues-node');
const program = require('commander');
const chokidar = require('chokidar');
const path = require('path');
const xlsx = require('node-xlsx');
const { read_all_files, read_sub_directories } = require('./utils');
const fs = require("fs-extra");
const keyvalues = require("keyvalues-node");
const program = require("commander");
const chokidar = require("chokidar");
const path = require("path");
const xlsx = require("node-xlsx");
const { read_all_files, read_sub_directories } = require("./utils");

// 需要读取的excel路径
const excel_path = 'excels';
const kv_path = 'game/scripts/npc';
const excel_path = "excels";
const kv_path = "game/scripts/npc";

String.format = function () {
var param = [];
Expand All @@ -23,23 +23,23 @@ String.format = function () {
};

function row_data_to_dict(dct, key_names, row_data, i, parent_name) {
if (parent_name == null) parent_name = '';
if (parent_name == null) parent_name = "";
while (i < row_data.length && i < key_names.length) {
key_name = key_names[i];
if (key_name == null) {
i++;
continue;
}
key_name = key_name.toString();
if (key_name.indexOf('[{]') >= 0) {
if (key_name.indexOf("[{]") >= 0) {
i++;
let pn = key_name.replace('[{]', '');
let pn = key_name.replace("[{]", "");
let ret_val = row_data_to_dict({}, key_names, row_data, i, pn);
dct[pn] = ret_val.dct;
i = ret_val.i + 1;
} else if (key_name.indexOf('[}]') >= 0) {
} else if (key_name.indexOf("[}]") >= 0) {
return { dct: dct, i: i };
} else if (key_name != null && key_name != '') {
} else if (key_name != null && key_name != "") {
data = row_data[i];

const clean_data = (da) => {
Expand All @@ -51,26 +51,26 @@ function row_data_to_dict(dct, key_names, row_data, i, parent_name) {
};

// 处理AttachWearables
if (parent_name == 'AttachWearables' && data != '' && data != null) {
if (parent_name == "AttachWearables" && data != "" && data != null) {
dct[key_name] = { ItemDef: clean_data(data) };
} else if (parent_name == 'AbilitySpecial' && data != '' && data != null) {
} else if (parent_name == "AbilitySpecial" && data != "" && data != null) {
// 写入ability specials
let datas = data.toString().split(' ');
let datas = data.toString().split(" ");
let has_float = false;
let special_key_name;
datas.forEach((d) => {
if (isNaN(d)) special_key_name = d;
else if (parseFloat(d) % 1 != 0) has_float = true;
});
data = clean_data(data)
.replace(special_key_name + ' ', '')
.replace(special_key_name, '');
dct[key_name] = { var_type: has_float ? 'FIELD_FLOAT' : 'FIELD_INTEGER', [special_key_name != null ? special_key_name : 'var_' + key_name]: data };
} else if (data != null && data !== '') {
.replace(special_key_name + " ", "")
.replace(special_key_name, "");
dct[key_name] = { var_type: has_float ? "FIELD_FLOAT" : "FIELD_INTEGER", [special_key_name != null ? special_key_name : "var_" + key_name]: data };
} else if (data != null && data !== "") {
dct[key_name] = clean_data(data);
} else if (key_name.indexOf('Ability') >= 0) {
} else if (key_name.indexOf("Ability") >= 0) {
// 这里要注意,只要定义了技能的key,哪怕没有数据,也要填一个"”,否则不能正确覆盖为空技能
dct[key_name] = '';
dct[key_name] = "";
}
i++;
}
Expand All @@ -79,7 +79,7 @@ function row_data_to_dict(dct, key_names, row_data, i, parent_name) {
}

function col_excel_to_kv(sheet) {
console.log('single excel to kv');
console.log("single excel to kv");
let kv_data = { XLSXContent: {} };
for (i = 2; i < sheet.data.length; ++i) {
let row_data = sheet.data[i];
Expand All @@ -105,8 +105,9 @@ function xy_excel_to_kv(sheet) {
}

function single_excel_to_kv(file) {
if ((path.extname(file) != '.xlsx' && path.extname(file) != '.xls') || file.indexOf('~$') >= 0) {
console.log('excel 2 kv compiler ingore non-excel file=>', file);
const ext = path.extname(file);
if (![".xlsx", ".xls", ".xlsm", ".csv"].includes(ext) || file.indexOf("~$") >= 0) {
console.log("excel 2 kv compiler ingore non-excel file=>", file);
return;
}
let sheets = xlsx.parse(file);
Expand All @@ -115,23 +116,23 @@ function single_excel_to_kv(file) {
let rows = sheet.data;
let nrows = rows.length;
if (nrows < 3) {
console.log('ignore empty file=>', file, 'REQUIRES AT LEAST 3 LINES(comment, key data)');
console.log("ignore empty file=>", file, "REQUIRES AT LEAST 3 LINES(comment, key data)");
return;
}

if (sheet.data[1][0] == 'vertical_keys') {
if (sheet.data[1][0] == "vertical_keys") {
kv_data = col_excel_to_kv(sheet);
} else {
kv_data = xy_excel_to_kv(sheet);
}

if (Object.keys(kv_data.XLSXContent).length <= 0) return;
let outpath = file.replace(excel_path, kv_path).replace('.xlsx', '.txt');
let parent_i = outpath.lastIndexOf('/');
let outpath = file.replace(excel_path, kv_path).replace(".xlsx", ".txt");
let parent_i = outpath.lastIndexOf("/");
let out_dir = outpath.substr(0, parent_i);
if (!fs.existsSync(out_dir)) fs.mkdirSync(out_dir);
fs.writeFileSync(outpath, "// generate with Xavier's kv generator https://github.com/XavierCHN/x-template\n" + keyvalues.encode(kv_data));
console.log('success xlsx->kv', outpath, ', total items count ->', Object.keys(kv_data.XLSXContent).length);
console.log("success xlsx->kv", outpath, ", total items count ->", Object.keys(kv_data.XLSXContent).length);
}

const all_excel_to_kv = async (path) => {
Expand All @@ -143,10 +144,10 @@ const all_excel_to_kv = async (path) => {

(async () => {
all_excel_to_kv();
program.option('-w, --watch', 'Watch Mode').parse(process.argv);
program.option("-w, --watch", "Watch Mode").parse(process.argv);
if (program.watch) {
console.log('start with watch mode');
chokidar.watch(excel_path).on('change', (file) => {
console.log("start with watch mode");
chokidar.watch(excel_path).on("change", (file) => {
single_excel_to_kv(file);
});
}
Expand Down

0 comments on commit 225ffca

Please sign in to comment.