excel.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. let process = require('process');
  2. let path = require('path');
  3. let nodeXlsx = require('node-xlsx');
  4. let jsonBeautifully = require('json-beautifully');
  5. let fs = require('fs');
  6. let cwd = process.cwd();
  7. console.log(process.cwd());
  8. let excelArray = [
  9. {
  10. fullPath: "excel/全局表.xls",
  11. isUse: true,
  12. name: "全局表.xls",
  13. sheet: "all",
  14. },
  15. {
  16. fullPath: "excel/关卡.xls",
  17. isUse: true,
  18. name: "关卡.xls",
  19. sheet: "smallLevel",
  20. },
  21. {
  22. fullPath: "excel/关卡.xls",
  23. isUse: true,
  24. name: "关卡.xls",
  25. sheet: "nest",
  26. }
  27. ];
  28. jsonSavePath = path.join(cwd, '../preview-templates/json');
  29. excelArray = excelArray.map((v)=>{
  30. v.fullPath = path.join(cwd, v.fullPath);
  31. return v;
  32. });
  33. // console.log(excelArray);
  34. // return;
  35. function _getJsonSaveData(excelData, itemSheet) {
  36. let title = excelData[0];
  37. let desc = excelData[1];
  38. let ret = null;
  39. let useFormat1 = false;
  40. if (useFormat1) {
  41. let saveData1 = [];// 格式1:对应的为数组
  42. for (let i = 2; i < excelData.length; i++) {
  43. let lineData = excelData[i];
  44. // if (lineData.length < title.length) {
  45. // continue;
  46. // } else if (lineData.length > title.length) {
  47. // continue;
  48. // }
  49. if(!lineData) continue;
  50. let saveLineData = {};
  51. for (let j = 0; j < title.length; j++) {
  52. let key = title[j];
  53. let value = lineData[j];
  54. if (value === undefined) {
  55. value = "";
  56. }
  57. // this._addLog("" + value);
  58. saveLineData[key] = value;
  59. }
  60. saveData1.push(saveLineData);
  61. }
  62. ret = saveData1;
  63. } else {
  64. let saveData2 = {};// 格式2:id作为索引
  65. for (let i = 2; i < excelData.length; i++) {
  66. let lineData = excelData[i];
  67. // if (lineData.length < title.length) {
  68. // continue;
  69. // } else if (lineData.length > title.length) {
  70. // continue;
  71. // }
  72. if(!lineData) continue;
  73. let saveLineData = {};
  74. for (let j = 1; j < title.length; j++) {
  75. let key = title[j];
  76. let value = lineData[j];
  77. if (value === undefined) {
  78. value = "";
  79. }
  80. // this._addLog("" + value);
  81. saveLineData[key] = value;
  82. }
  83. saveData2[lineData[0].toString()] = saveLineData;
  84. }
  85. ret = saveData2;
  86. }
  87. return ret;
  88. }
  89. function _addLog(str){
  90. console.log(str);
  91. }
  92. let jsonAllSaveData = {};// 保存的json数据
  93. for (let k in excelArray) {
  94. let itemSheet = excelArray[k];
  95. if (itemSheet.isUse) {
  96. let excelData = nodeXlsx.parse(itemSheet.fullPath);
  97. let sheetData = null;
  98. for (let j in excelData) {
  99. if (excelData[j].name === itemSheet.sheet) {
  100. sheetData = excelData[j].data;
  101. }
  102. }
  103. if (sheetData) {
  104. if (sheetData.length > 2) {
  105. // 保存为json
  106. let jsonSaveData = _getJsonSaveData(sheetData, itemSheet);
  107. {
  108. let saveStr = JSON.stringify(jsonSaveData);
  109. saveStr = jsonBeautifully(saveStr);
  110. let saveFileFullPath = path.join(jsonSavePath, itemSheet.sheet + ".json");
  111. fs.writeFileSync(saveFileFullPath, saveStr);
  112. _addLog("[Json]:" + saveFileFullPath);
  113. }
  114. } else {
  115. _addLog("行数低于2行,无效sheet:" + itemSheet.sheet);
  116. }
  117. } else {
  118. _addLog("未发现数据");
  119. }
  120. } else {
  121. console.log("忽略配置: " + itemSheet.fullPath + ' - ' + itemSheet.sheet);
  122. }
  123. }