import fs from "fs"; import path from "path"; import ExcelJS from "exceljs"; /** * 读取指定路径下的所有.stl文件 * @param dirPath 要搜索的目录路径 * @returns 返回包含所有.stl文件名的数组 */ export const findSTLFiles = (dirPath: string): Promise => { return new Promise((resolve) => { // 检查路径是否存在 if (!fs.existsSync(dirPath)) { resolve([]); // 路径不存在时返回空数组 return; } // 异步读取目录内容 fs.readdir(dirPath, (err, files) => { if (err) { resolve([]); // 读取错误时返回空数组 } else { // 过滤出.stl文件 const stlFiles = files.filter( (file) => path.extname(file).toLowerCase() === ".stl" ); resolve(stlFiles); } }); }); }; /** * json存excel */ export const createExcelFile = async (savePath: string, measurement) => { // 创建一个新的工作簿 const workbook = new ExcelJS.Workbook(); // 添加一个工作表 const worksheet = workbook.addWorksheet("My Sheet"); // const columns = [ // { header: "左室流出道", key: "LVOT_plane", width: 10 }, // { header: "瓦氏窦", key: "SOV_plane", width: 10 }, // { header: "窦管交接", key: "STJ_plane", width: 10 }, // { header: "瓣环平面", key: "annulus_plane", width: 10 }, // { header: "瓣环上4cm平面", key: "cor_mid_plane", width: 10 }, // { header: "升主动脉最宽处", key: "actual_aorta_plane", width: 10 }, // ]; // 添加列标题 worksheet.columns = [ { key: "1", header: "瓣环平面周长", width: 10 }, { key: "2", header: "瓣环平面周长导出径", width: 10 }, { key: "3", header: "瓣环平面面积", width: 10 }, { key: "4", header: "瓣环平面面积导出径", width: 10 }, { key: "5", header: "瓣环平面长径", width: 10 }, { key: "6", header: "瓣环平面短径", width: 10 }, { key: "7", header: "瓣环平面平均径", width: 10 }, // { key: "8", header: "窦管交界周长", width: 10 }, { key: "9", header: "窦管交界周长导出径", width: 10 }, { key: "10", header: "窦管交界面积", width: 10 }, { key: "11", header: "窦管交界面积导出径", width: 10 }, { key: "12", header: "窦管交界长径", width: 10 }, { key: "13", header: "窦管交界短径", width: 10 }, { key: "14", header: "窦管交界平均径", width: 10 }, // { key: "15", header: "左室流出道周长", width: 10 }, { key: "16", header: "左室流出道周长导出径", width: 10 }, { key: "17", header: "左室流出道面积", width: 10 }, { key: "18", header: "左室流出道面积导出径", width: 10 }, { key: "19", header: "左室流出道长径", width: 10 }, { key: "20", header: "左室流出道短径", width: 10 }, { key: "21", header: "左室流出道平均径", width: 10 }, // { key: "22", header: "升主动脉(瓣环上4cm)周长", width: 10 }, { key: "23", header: "升主动脉(瓣环上4cm)周长导出径", width: 10 }, { key: "24", header: "升主动脉(瓣环上4cm)面积", width: 10 }, { key: "25", header: "升主动脉(瓣环上4cm)面积导出径", width: 10 }, { key: "26", header: "升主动脉(瓣环上4cm)长径", width: 10 }, { key: "27", header: "升主动脉(瓣环上4cm)短径", width: 10 }, { key: "28", header: "升主动脉(瓣环上4cm)平均径", width: 10 }, // { key: "29", header: "升主动脉(瓣环上4cm)周长", width: 10 }, { key: "30", header: "升主动脉(瓣环上4cm)周长导出径", width: 10 }, { key: "31", header: "升主动脉(瓣环上4cm)面积", width: 10 }, { key: "32", header: "升主动脉(瓣环上4cm)面积导出径", width: 10 }, { key: "33", header: "升主动脉(瓣环上4cm)长径", width: 10 }, { key: "34", header: "升主动脉(瓣环上4cm)短径", width: 10 }, { key: "35", header: "升主动脉(瓣环上4cm)平均径", width: 10 }, // { key: "36", header: "左侧冠脉开口高度", width: 10 }, { key: "37", header: "右侧冠脉开口高度", width: 10 }, { key: "38", header: "钙化信息", width: 10 }, { key: "39", header: "主动脉夹角", width: 10 }, ]; const annulus_plane = measurement["annulus_plane"]; const STJ_plane = measurement["STJ_plane"]; const LVOT_plane = measurement["LVOT_plane"]; const nominal_aorta_plane = measurement["nominal_aorta_plane"]; const SOV_plane = measurement["SOV_plane"]; const calcification_analysis = measurement["calcification_analysis"]["HU_statistic"]; worksheet.addRow({ 1: annulus_plane["perimeter"], 2: annulus_plane["PED"], 3: annulus_plane["area"], 4: annulus_plane["AED"], 5: annulus_plane["max_dist"], 6: annulus_plane["min_dist"], 7: annulus_plane["average_dist"], // 8: STJ_plane["perimeter"], 9: STJ_plane["PED"], 10: STJ_plane["area"], 11: STJ_plane["AED"], 12: STJ_plane["max_dist"], 13: STJ_plane["min_dist"], 14: STJ_plane["average_dist"], // 15: LVOT_plane["perimeter"], 16: LVOT_plane["PED"], 17: LVOT_plane["area"], 18: LVOT_plane["AED"], 19: LVOT_plane["max_dist"], 20: LVOT_plane["min_dist"], 21: LVOT_plane["average_dist"], // 22: nominal_aorta_plane["perimeter"], 23: nominal_aorta_plane["PED"], 24: nominal_aorta_plane["area"], 25: nominal_aorta_plane["AED"], 26: nominal_aorta_plane["max_dist"], 27: nominal_aorta_plane["min_dist"], 28: nominal_aorta_plane["average_dist"], // 29: SOV_plane["perimeter"], 30: SOV_plane["PED"], 31: SOV_plane["area"], 32: SOV_plane["AED"], 33: SOV_plane["max_dist"], 34: SOV_plane["min_dist"], 35: SOV_plane["average_dist"], // 38: calcification_analysis.map((i) => `HU${i.key}:${i.value}`).join(";"), 39: annulus_plane["horizontal_angle"], }); // 设置样式 worksheet.getRow(1).font = { bold: true }; console.log("生成测量excel"); // 保存到文件 await workbook.xlsx.writeFile(path.join(savePath)); };