Skip to content

useExportExcel用于导出 excel hooks

上次更新 2024年10月30日星期三 7:57:13 字数 0 字 时长 0 分钟

js
const useExportExcel = () => {
  /**
   *
   * @description 导出多Sheet表格
   * @param {String} fileName 文件名
   * @param {Array<{json:Array,sheetName:string,header:object}>} data 数据
   */
  const toExcelSheets = (fileName, data) => {
    const excel = XLSX.utils.book_new();
    if (Array.isArray(data) && data.length > 0) {
      data.forEach((sheetData) => {
        if (
          sheetData &&
          sheetData.json &&
          Array.isArray(sheetData.json) &&
          sheetData.header &&
          typeof sheetData.header === "object" &&
          sheetData.sheetName
        ) {
          const jsonData = sheetData.json.map((item) => {
            const res = {};
            for (const key in item) {
              if (sheetData.header.hasOwnProperty(key)) {
                res[sheetData.header[key]] = item[key] ?? "-";
              }
            }
            return res;
          });
          const _data = XLSX.utils.json_to_sheet(jsonData);
          XLSX.utils.book_append_sheet(excel, _data, sheetData.sheetName);
        } else {
          console.error("Invalid sheet data:", sheetData);
        }
      });
    } else {
      console.warn("No valid data provided for Excel sheets.");
    }
    XLSX.writeFile(
      excel,
      fileName ? fileName + ".xlsx" : "生成报告" + ".xlsx",
      {
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      }
    );
  };
  return { toExcelSheets };
};

更多内容请参考