|
@@ -0,0 +1,120 @@
|
|
|
+let path = require('path');
|
|
|
+let xlsx = require('node-xlsx');
|
|
|
+let fm = require('./fileManager');
|
|
|
+let config = require('../config.json');
|
|
|
+
|
|
|
+function exportXlsxToTs(sheetPath, name) {
|
|
|
+ console.log('excelToTs')
|
|
|
+ if (name.indexOf('meta') != -1) return;
|
|
|
+ if (name.indexOf('~') != -1) return;
|
|
|
+ let fullPath = path.resolve(sheetPath, name);
|
|
|
+ let fileName = name.split('.')[0];
|
|
|
+ let sheets = xlsx.parse(fullPath);
|
|
|
+ if (!sheets) {
|
|
|
+ console.error("表" + name + "不存在!可能是路径错误!");
|
|
|
+ }
|
|
|
+ let sheetLen = sheets.length;
|
|
|
+ console.log("准备解析表格:" + name);
|
|
|
+
|
|
|
+ let str = '';
|
|
|
+
|
|
|
+ for (let i = 0; i < sheetLen; i++) {
|
|
|
+ let sheetInfo = sheets[i];
|
|
|
+ if (sheetInfo) {
|
|
|
+ let sheetName = sheetInfo.name;
|
|
|
+ let sheetData = sheetInfo.data;
|
|
|
+ if (!sheetName) {
|
|
|
+ console.error(fullPath + "中表名不存在!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!sheetData) {
|
|
|
+ console.error(fullPath + "中表数据不存在!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (sheetData && sheetData.length <= 0) {
|
|
|
+ console.error(fullPath + "中表为空!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let startIdx = 4;
|
|
|
+ console.log("开始解析表:" + sheetName + " 共" + (sheetData.length - startIdx) + "条数据...");
|
|
|
+
|
|
|
+ str += `export const cfg_${fileName}_${sheetName} = [\n`
|
|
|
+
|
|
|
+ let propName = [];
|
|
|
+ let types = sheetData[2]
|
|
|
+ for (let j = 0; j < sheetData.length; j++) {
|
|
|
+ let data = sheetData[j];
|
|
|
+ if (data) {
|
|
|
+ if (j == 1) {
|
|
|
+ //读取key
|
|
|
+ for (let k = 0; k < data.length; k++) {
|
|
|
+ propName.push(data[k]);
|
|
|
+ }
|
|
|
+ } else if (j >= startIdx && data.length > 0) {
|
|
|
+ //读取值
|
|
|
+ str += '\t{\n'
|
|
|
+ for (let m = 0; m < data.length; m++) {
|
|
|
+ let value = data[m];
|
|
|
+ let type = types[m];
|
|
|
+ value = typeConvert(value, type)
|
|
|
+ str += '\t\t'
|
|
|
+ if (type.includes("array")) {
|
|
|
+ str += `${propName[m]}: [${value}],\n`
|
|
|
+ } else {
|
|
|
+ str += `${propName[m]}: ${value},\n`
|
|
|
+ }
|
|
|
+ }
|
|
|
+ str += '\t},\n'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ str += ']\n'
|
|
|
+
|
|
|
+ } else {
|
|
|
+ console.error("表解析错误!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fm.writeFile(path.resolve(config.exportTsPath, "cfg_" + fileName + ".ts"), str);
|
|
|
+ console.log("表格" + name + "解析完毕!\n");
|
|
|
+}
|
|
|
+function typeConvert(value, type) {
|
|
|
+ switch (type) {
|
|
|
+ case "string":
|
|
|
+ return `"${value}"`
|
|
|
+ case "int":
|
|
|
+ var v = parseInt(value)
|
|
|
+ return isNaN(v) ? 0 : v
|
|
|
+ case "float":
|
|
|
+ var v = parseFloat(value)
|
|
|
+ return isNaN(v) ? 0 : v
|
|
|
+ case "bool":
|
|
|
+ return parseInt(value)
|
|
|
+ case "string_array":
|
|
|
+ case "array":
|
|
|
+ return value ? value.split(",") : []
|
|
|
+ case "number_array":
|
|
|
+ if (typeof value == "number") return [value]
|
|
|
+ console.log(value)
|
|
|
+ var v = value ? value.split(",").map(Number) : []
|
|
|
+ return v
|
|
|
+ case "number_array2":
|
|
|
+ const regex = /\[(.*?)\]/g;
|
|
|
+ var res = value.match(regex)
|
|
|
+ var v = ''
|
|
|
+ for (let i = 0; i < res.length; i++) {
|
|
|
+ const r = res[i]
|
|
|
+ v += r
|
|
|
+ if (i < res.length - 1) {
|
|
|
+ v += ','
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return v
|
|
|
+ default:
|
|
|
+ return value
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = {
|
|
|
+ exportXlsxToTs
|
|
|
+}
|