import * as XLSX from "xlsx"; import { round, toDegrees } from "./"; import { saveAs } from "./file-serve"; const genXLSLByTemp = (data: ArrayBuffer, tabs: any[][], name: string) => { const workbook = XLSX.read(data); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; XLSX.utils.sheet_add_aoa(worksheet, tabs, { origin: "A2" }); const wbout = XLSX.write(workbook, { // 要生成的文件类型 bookType: "xlsx", type: "binary", }); // 将字符串转ArrayBuffer function s2ab(s: string) { const buf = new ArrayBuffer(s.length); const view = new Uint8Array(buf); for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff; return buf; } const blob = new Blob([s2ab(wbout)], { type: "application/octet-stream", }); return saveAs(blob, `${name}.xls`); }; export const downloadPointsXLSL1 = async ( points: number[][], desc: { title: string; desc: string }[] = [], name: string ) => { const temp = await fetch("/templaten.xls").then((r) => r.arrayBuffer()); const tabs = points.map((point, i) => { const des = desc[i] || { title: "无", desc: "无" }; return [i, des.title, toDegrees(point[1], 4), toDegrees(point[0], 4)]; }); await genXLSLByTemp(temp, tabs, name); }; export const downloadPointsXLSL2 = async ( points: number[][], desc: { title: string; desc: string }[] = [], name: string ) => { const temp = await fetch("/本体边界坐标.xls").then((r) => r.arrayBuffer()); const tabs = points.map((point, i) => { const des = desc[i] || { title: "无", desc: "无" }; return [ toDegrees(point[1], 4), toDegrees(point[0], 4), round(point[2], 4), des.title, des.desc, ]; }); await genXLSLByTemp(temp, tabs, name); }; export const downloadPointsXLSL = async ( points: number[][], desc: { title: string; desc: string }[] = [], name: string ) => { downloadPointsXLSL1(points, desc, name); downloadPointsXLSL2(points, desc, name + "本体边界坐标"); };