/** * 从 docs/青浦区产业地块信息表.xlsx 生成 src/views/parkExcelAttrs.js * 运行: node scripts/build-park-excel-attrs.js */ const fs = require("fs"); const path = require("path"); const XLSX = require("xlsx"); const root = path.join(__dirname, ".."); const xlsxPath = path.join(root, "docs", "青浦区产业地块信息表.xlsx"); const outPath = path.join(root, "src", "views", "parkExcelAttrs.js"); const wb = XLSX.readFile(xlsxPath); const rows = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { header: 1, defval: "", }); const dataRows = rows.slice(2).filter((r) => r[0]); const obj = {}; for (const r of dataRows) { const name = String(r[0]).trim(); const gsgy = Number(r[1]) || 0; const gsqy = Number(r[2]) || 0; const areaRaw = r[7]; const area = typeof areaRaw === "number" ? areaRaw : parseFloat(String(areaRaw).replace(/,/g, "")) || 0; obj[name] = { 规上工业服务业企业数量: gsgy, 高企数量: gsqy, 入驻企业数量: gsgy + gsqy, 四至边界: { 东: String(r[3] || "").trim(), 南: String(r[4] || "").trim(), 西: String(r[5] || "").trim(), 北: String(r[6] || "").trim(), }, 用地面积公顷: area, 备注: String(r[8] || "").trim(), }; } const banner = `/** * 甲方《青浦区产业地块信息表.xlsx》解析结果。 * 键与 parkDatas 中 properties.name2 一致。 * 更新数据请修改 Excel 后执行: node scripts/build-park-excel-attrs.js */ `; const body = `export const PARK_EXCEL_ATTRS_BY_NAME = ${JSON.stringify(obj, null, 2)}; `; fs.writeFileSync(outPath, banner + body, "utf8"); console.log("Wrote", outPath, "parks:", Object.keys(obj).length);