build-park-excel-attrs.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * 从 docs/青浦区产业地块信息表.xlsx 生成 src/views/parkExcelAttrs.js
  3. * 运行: node scripts/build-park-excel-attrs.js
  4. */
  5. const fs = require("fs");
  6. const path = require("path");
  7. const XLSX = require("xlsx");
  8. const root = path.join(__dirname, "..");
  9. const xlsxPath = path.join(root, "docs", "青浦区产业地块信息表.xlsx");
  10. const outPath = path.join(root, "src", "views", "parkExcelAttrs.js");
  11. const wb = XLSX.readFile(xlsxPath);
  12. const rows = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], {
  13. header: 1,
  14. defval: "",
  15. });
  16. const dataRows = rows.slice(2).filter((r) => r[0]);
  17. const obj = {};
  18. for (const r of dataRows) {
  19. const name = String(r[0]).trim();
  20. const gsgy = Number(r[1]) || 0;
  21. const gsqy = Number(r[2]) || 0;
  22. const areaRaw = r[7];
  23. const area =
  24. typeof areaRaw === "number"
  25. ? areaRaw
  26. : parseFloat(String(areaRaw).replace(/,/g, "")) || 0;
  27. obj[name] = {
  28. 规上工业服务业企业数量: gsgy,
  29. 高企数量: gsqy,
  30. 入驻企业数量: gsgy + gsqy,
  31. 四至边界: {
  32. 东: String(r[3] || "").trim(),
  33. 南: String(r[4] || "").trim(),
  34. 西: String(r[5] || "").trim(),
  35. 北: String(r[6] || "").trim(),
  36. },
  37. 用地面积公顷: area,
  38. 备注: String(r[8] || "").trim(),
  39. };
  40. }
  41. const banner = `/**
  42. * 甲方《青浦区产业地块信息表.xlsx》解析结果。
  43. * 键与 parkDatas 中 properties.name2 一致。
  44. * 更新数据请修改 Excel 后执行: node scripts/build-park-excel-attrs.js
  45. */
  46. `;
  47. const body = `export const PARK_EXCEL_ATTRS_BY_NAME = ${JSON.stringify(obj, null, 2)};
  48. `;
  49. fs.writeFileSync(outPath, banner + body, "utf8");
  50. console.log("Wrote", outPath, "parks:", Object.keys(obj).length);