123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- 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
- }
|