pc4xlsl.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import * as XLSX from "xlsx";
  2. import { round, toDegrees } from "./";
  3. import { saveAs } from "./file-serve";
  4. const genXLSLByTemp = (data: ArrayBuffer, tabs: any[][], name: string) => {
  5. const workbook = XLSX.read(data);
  6. const sheetName = workbook.SheetNames[0];
  7. const worksheet = workbook.Sheets[sheetName];
  8. XLSX.utils.sheet_add_aoa(worksheet, tabs, { origin: "A2" });
  9. const wbout = XLSX.write(workbook, {
  10. // 要生成的文件类型
  11. bookType: "xlsx",
  12. type: "binary",
  13. });
  14. // 将字符串转ArrayBuffer
  15. function s2ab(s: string) {
  16. const buf = new ArrayBuffer(s.length);
  17. const view = new Uint8Array(buf);
  18. for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
  19. return buf;
  20. }
  21. const blob = new Blob([s2ab(wbout)], {
  22. type: "application/octet-stream",
  23. });
  24. return saveAs(blob, `${name}.xls`);
  25. };
  26. export const downloadPointsXLSL1 = async (
  27. points: number[][],
  28. desc: { title: string; desc: string }[] = [],
  29. name: string
  30. ) => {
  31. const temp = await fetch("/templaten.xls").then((r) => r.arrayBuffer());
  32. const tabs = points.map((point, i) => {
  33. const des = desc[i] || { title: "无", desc: "无" };
  34. return [i, des.title, toDegrees(point[1], 4), toDegrees(point[0], 4)];
  35. });
  36. await genXLSLByTemp(temp, tabs, name);
  37. };
  38. export const downloadPointsXLSL2 = async (
  39. points: number[][],
  40. desc: { title: string; desc: string }[] = [],
  41. name: string
  42. ) => {
  43. const temp = await fetch("/本体边界坐标.xls").then((r) => r.arrayBuffer());
  44. const tabs = points.map((point, i) => {
  45. const des = desc[i] || { title: "无", desc: "无" };
  46. return [
  47. toDegrees(point[1], 4),
  48. toDegrees(point[0], 4),
  49. round(point[2], 4),
  50. des.title,
  51. des.desc,
  52. ];
  53. });
  54. await genXLSLByTemp(temp, tabs, name);
  55. };
  56. export const downloadPointsXLSL = async (
  57. points: number[][],
  58. desc: { title: string; desc: string }[] = [],
  59. name: string
  60. ) => {
  61. downloadPointsXLSL1(points, desc, name);
  62. downloadPointsXLSL2(points, desc, name + "本体边界坐标");
  63. };