12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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 + "本体边界坐标");
- };
|