同时导出多个excel,并且一个excel中包含多个sheet

前段组内要做一个关于excel的任务,其中一个小业务:一个文件夹下有多个excel,要求导出的一个文件夹代表一个excel,一个excel代表一个sheet,最终导出的是一个excel中包含多个sheet。也就是要合并一个文件夹中的多个excel。

之前我研究完之后,一直没有时间整理,今天就简单的整理一下,方便我以后使用,也希望可以帮到有需要的人。

注意:我下面写的代码需要大家使用的时候结合自己的场景使用,直接复制不会实现结果。

downLoadPL(node, data) {
      console.log(node, data);
      //这一段是只下载一个excel,里面只有多个sheet
      // var wb = XLSX2.utils.book_new();
      // data.children.forEach((item, key) => {
      //   let wb_data = JSON.parse(item.wb);
      //   console.log(wb_data);
      //   XLSX2.utils.book_append_sheet(wb, wb_data, String(key + 1));
      // });
      // console.log(wb);

      //这一段是只下载一个excel,里面只有一个sheet
      // let workbookBlob = this.workbook2blob(wb);
      // this.$prompt("请输入表格名称 :", "提示", {
      //   confirmButtonText: "下载",
      // })
      //   .then((da) => {
      //     console.log(da);
      //     this.openDownloadDialog(workbookBlob, `${da.value || "未命名"}.xlsx`);
      //   })
      //   .catch(() => {});
      // return;
      
      //这是同时下载多个excel,并且包含多个sheet
      let chdata = this.getdownload_type(data);
      chdata.forEach((item) => {
      //这是最主要的新建空间
        var wb = XLSX2.utils.book_new();
        item.children.forEach((itemc, key) => {
          let wb_data = JSON.parse(itemc.wb);
          //一个excel添加多个sheet
          XLSX2.utils.book_append_sheet(wb, wb_data, String(key + 1));
        });
        let workbookBlob = this.workbook2blob(wb);
        this.openDownloadDialog(workbookBlob, `${item.name || "未命名"}.xlsx`);
      });
    },
    getdownload_type(dataa) {
      let childrendata = [];
      let data = (datafor) => {
        datafor.children.forEach((itemf) => {
        //1是文件夹 。2是excel
          if (
            itemf.type == "1" &&
            itemf.children &&
            itemf.children.length > 0
          ) {
            itemf.children.forEach((item) => {
              console.log(item);
              if (item.type == "2") {
                childrendata.push(itemf);
              } else {
                data(item);
              }
            });
          } else {
            childrendata.push(datafor);
          }
        });
      };
      data(dataa);
      childrendata = Array.from(new Set(childrendata));
      return childrendata;
    },
     openDownloadDialog(url, saveName) {
      if (typeof url == "object" && url instanceof Blob) {
        url = URL.createObjectURL(url); // 创建blob地址
      }
      var aLink = document.createElement("a");
      aLink.href = url;
      aLink.download = saveName || ""; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
      var event;
      if (window.MouseEvent) event = new MouseEvent("click");
      else {
        event = document.createEvent("MouseEvents");
        event.initMouseEvent(
          "click",
          true,
          false,
          window,
          0,
          0,
          0,
          0,
          0,
          false,
          false,
          false,
          false,
          0,
          null
        );
      }
      aLink.dispatchEvent(event);
    },

参考了下面大佬的文章,他的是一个excel上面添加多个sheet,我的可以同时导出多个excel,无非就是添加循环的事情。感谢下面这个大佬的文章,当时让我茅塞顿开,帮我解决了大问题。

JavaScript:使用xlsx-style插件导出多个sheet_粉末的沉淀的博客-CSDN博客

SheetJS - Support

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值