月球大数据地理空间分析展示平台-【前端】-月球2期前端
WX
2023-09-15 d91053e5cbe7fac6deee994c22c0529fd1b08755
src/utils/downloadCSV.js
@@ -21,7 +21,6 @@
  //   XLSXS.utils.book_append_sheet(wb, ws, "Sheet1");
  //   XLSXS.writeFile(wb, "data-region.xlsx");
  //============================================================================
  console.log(data, name, merges);
  // data是点击导出按钮传递过来要导出的数据,name是导出的文件名,merges是合并的单元格
  // 将数据源转成我们需要的二维数组,序号、姓名这些是表格的表头
  const body = data.map((x) => [
@@ -221,3 +220,163 @@
  XLSXS.utils.book_append_sheet(workbook, sheet); // 向 workbook 中添加 sheet
  XLSXS.writeFile(workbook, "data-region" + ".xlsx"); // 导出 workbook
}
export function saveFSDZJsonToExcelLine(data) {
  //   const data = [
  //     { 姓名: "张三", 年龄: 18, 性别: "男" },
  //     { 姓名: "李四", 年龄: 20, 性别: "女" },
  //     { 姓名: "王五", 年龄: 22, 性别: "男" },
  //   ];
  //   const wb = XLSX.utils.book_new();
  //   const ws = XLSX.utils.json_to_sheet(data);
  //   ws["!cols"] = [
  //     {
  //       wpx: 150,
  //     },
  //     {
  //       wpx: 500,
  //     },
  //     {
  //       wpx: 100,
  //     },
  //   ];
  //   XLSXS.utils.book_append_sheet(wb, ws, "Sheet1");
  //   XLSXS.writeFile(wb, "data-region.xlsx");
  //============================================================================
  // data是点击导出按钮传递过来要导出的数据,name是导出的文件名,merges是合并的单元格
  // 将数据源转成我们需要的二维数组,序号、姓名这些是表格的表头
  const body = data.map((x) => [
    x["layerName"],
    x["values"],
    x["lon"],
    x["lat"],
  ]);
  const header = [
    // 这个是设置excel表格的标题,即在A1单元格的标题
    [
      {
        v: ``,
        t: "s", // 指定标题的样式
      },
    ],
    // 这是对应body常量的表头
    ["layerName", "values", "lon", "lat"],
  ];
  body.unshift(...header); // 将定义好的表头添加到 body 中
  const sheet = XLSXS.utils.aoa_to_sheet(body); // aoa_to_sheet 将二维数组转成 sheet
  // 此处开始合并列,即相同名字的表格合并单元格
  let includeB = [];
  let includesBnumber = [];
  // 设置列宽
  const cols = [{ wch: 100 }, { wch: 15 }, { wch: 12 }, { wch: 12 }];
  sheet["!cols"] = cols; // 将cols添加到sheet中
  //   const rows = [{ hpx: 20 }, { hpx: 16 }, { hpx: 18 }];
  //   sheet["!rows"] = rows; // 将rows添加到sheet中,设置行高
  Object.keys(sheet).forEach((key, i) => {
    // 设置单元格样式
    if (key.indexOf("!") < 0) {
      if (key == "A1") {
        // 设置标题
        sheet[key].s = {
          alignment: {
            horizontal: "center", //水平居中
            vertical: "center", //竖直居中
          },
          font: {
            bold: true,
            // sz: 14,
            // name: "宋体",
          },
        };
      } else if (
        key == "A2" ||
        key == "B2" ||
        key == "C2" ||
        key == "D2" ||
        key == "E2" ||
        key == "F2" ||
        key == "G2" ||
        key == "H2" ||
        key == "I2"
      ) {
        // 设置表头
        sheet[key].s = {
          fill: {
            fgColor: { rgb: "A6A6A6" },
          },
          border: {
            top: { style: "thin" },
            left: { style: "thin" },
            bottom: { style: "thin" },
            right: { style: "thin" },
          },
          font: {
            bold: true,
            // sz: 12,
            // name: "宋体",
          },
        };
      } else {
        if (key.includes("A")) {
          // 序列所在列
          if (typeof sheet[key].v == "number") {
            // 列表列要求序号要居中,合计和总合计居左(应该是系统默认的,如果要设置居左或居右,也可以自己设置下alignment属性)
            sheet[key].s = {
              alignment: {
                horizontal: "center",
                vertical: "center",
              },
              border: {
                top: { style: "thin" },
                left: { style: "thin" },
                bottom: { style: "thin" },
                right: { style: "thin" },
              },
            };
          } else {
            sheet[key].s = {
              border: {
                top: { style: "thin" },
                left: { style: "thin" },
                bottom: { style: "thin" },
                right: { style: "thin" },
              },
            };
          }
        } else {
          sheet[key].s = {
            border: {
              top: { style: "thin" },
              left: { style: "thin" },
              bottom: { style: "thin" },
              right: { style: "thin" },
            },
            alignment: {
              horizontal: "left",
              vertical: "center",
            },
          };
        }
      }
    }
  });
  // 设置结尾的表格
  //   let sheetBorder = sheet["!ref"].substring(4); // 因为导出的单元格行数不确定,所以拿到最后一行的数字
  //   let endSheetBorder = ["C", "D", "E", "F", "G", "H"]; //因为最后一行的合并的列是一样的,所以这里可以直接将列的单元格序号写个定值
  //   endSheetBorder.forEach((e) => {
  //     let addBorder = e + sheetBorder;
  //     sheet[addBorder] = {
  //       v: "",
  //       t: "s",
  //       s: {
  //         border: {
  //           top: { style: "thin" },
  //           bottom: { style: "thin" },
  //         },
  //       },
  //     };
  //   });
  const workbook = XLSXS.utils.book_new(); // 创建虚拟的 workbook
  XLSXS.utils.book_append_sheet(workbook, sheet); // 向 workbook 中添加 sheet
  XLSXS.writeFile(workbook, "data-region" + ".xlsx"); // 导出 workbook
}