excelExport.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. let path = require('path');
  2. let xlsx = require('node-xlsx');
  3. let fm = require('./fileManager');
  4. let config = require('../config.json');
  5. function exportXlsxToTs(sheetPath, name) {
  6. console.log('excelToTs')
  7. if (name.indexOf('meta') != -1) return;
  8. if (name.indexOf('~') != -1) return;
  9. let fullPath = path.resolve(sheetPath, name);
  10. let fileName = name.split('.')[0];
  11. let sheets = xlsx.parse(fullPath);
  12. if (!sheets) {
  13. console.error("表" + name + "不存在!可能是路径错误!");
  14. }
  15. let sheetLen = sheets.length;
  16. console.log("准备解析表格:" + name);
  17. let str = '';
  18. for (let i = 0; i < sheetLen; i++) {
  19. let sheetInfo = sheets[i];
  20. if (sheetInfo) {
  21. let sheetName = sheetInfo.name;
  22. let sheetData = sheetInfo.data;
  23. if (!sheetName) {
  24. console.error(fullPath + "中表名不存在!");
  25. return;
  26. }
  27. if (!sheetData) {
  28. console.error(fullPath + "中表数据不存在!");
  29. return;
  30. }
  31. if (sheetData && sheetData.length <= 0) {
  32. console.error(fullPath + "中表为空!");
  33. return;
  34. }
  35. let startIdx = 4;
  36. console.log("开始解析表:" + sheetName + " 共" + (sheetData.length - startIdx) + "条数据...");
  37. str += `export const cfg_${fileName}_${sheetName} = [\n`
  38. let propName = [];
  39. let types = sheetData[2]
  40. for (let j = 0; j < sheetData.length; j++) {
  41. let data = sheetData[j];
  42. if (data) {
  43. if (j == 1) {
  44. //读取key
  45. for (let k = 0; k < data.length; k++) {
  46. propName.push(data[k]);
  47. }
  48. } else if (j >= startIdx && data.length > 0) {
  49. //读取值
  50. str += '\t{\n'
  51. for (let m = 0; m < data.length; m++) {
  52. let value = data[m];
  53. let type = types[m];
  54. value = typeConvert(value, type)
  55. str += '\t\t'
  56. if (type.includes("array")) {
  57. str += `${propName[m]}: [${value}],\n`
  58. } else {
  59. str += `${propName[m]}: ${value},\n`
  60. }
  61. }
  62. str += '\t},\n'
  63. }
  64. }
  65. }
  66. str += ']\n'
  67. } else {
  68. console.error("表解析错误!");
  69. }
  70. }
  71. fm.writeFile(path.resolve(config.exportTsPath, "cfg_" + fileName + ".ts"), str);
  72. console.log("表格" + name + "解析完毕!\n");
  73. }
  74. function typeConvert(value, type) {
  75. switch (type) {
  76. case "string":
  77. return `"${value}"`
  78. case "int":
  79. var v = parseInt(value)
  80. return isNaN(v) ? 0 : v
  81. case "float":
  82. var v = parseFloat(value)
  83. return isNaN(v) ? 0 : v
  84. case "bool":
  85. return parseInt(value)
  86. case "string_array":
  87. case "array":
  88. return value ? value.split(",") : []
  89. case "number_array":
  90. if (typeof value == "number") return [value]
  91. console.log(value)
  92. var v = value ? value.split(",").map(Number) : []
  93. return v
  94. case "number_array2":
  95. const regex = /\[(.*?)\]/g;
  96. var res = value.match(regex)
  97. var v = ''
  98. for (let i = 0; i < res.length; i++) {
  99. const r = res[i]
  100. v += r
  101. if (i < res.length - 1) {
  102. v += ','
  103. }
  104. }
  105. return v
  106. default:
  107. return value
  108. }
  109. }
  110. module.exports = {
  111. exportXlsxToTs
  112. }