利用JavaScript将HTML表格导出为Excel文件

编程 · 2023-08-02 · 222 人浏览

网上各种找

首先,肯定是找一下有没有别人写好的库,自己写不现实的。最终找到了 js-xlsx,评价还不错,不过已经好久没有更新了,将就用用看咯。

js-xlsx 虽然支持修改导出文件的样式,不过是在它的专业版中,其分为社区版和专业版,社区版是开源的,但是却不支持修改导出文件的样式,专业版拥有更多的功能,这其中就包括修改样式。如果需要使用专业版,要邮件联系开发者,去咨询价格,购买它。

好在又找到了 xlsx-style 这个项目(同样的好久没有更新了,凑合着用),它可以对导出的 excel 文件进行一些样式上的修改。

开干

<script src="js/xlsx.extendscript.js"></script>
<script src="js/xlsx-style/xlsx.full.min.js"></script>
<script src="js/export.js"></script>

<script>
  function btn_export() {
    var table1 = document.querySelector("#table1")
    var sheet = XLSX2.utils.table_to_sheet(table1)

    // 设置合并单元格垂直居中
    sheet["!merges"].forEach((item) => {
      var col = "0"
      var row = item.s.r + 1
      switch (item.s.c) {
        case 0:
          col = "A"
          break
        case 1:
          col = "B"
          break
        case 2:
          col = "C"
          break
        case 3:
          col = "D"
          break
      }

      if (col == "D") {
        sheet[col + row].t = "n"
        sheet[col + row].s = {
          alignment: {
            vertical: "center",
            horizontal: "center",
            wrapText: true,
          },
        }
      } else {
        sheet[col + row].s = {
          alignment: {
            vertical: "center",
            wrapText: true,
          },
        }
      }
    })

    //设置D列垂直居中
    for (var i = 2; i <= sheet["!merges"][0].e.r + 1; i++) {
      sheet["D" + i].t = "n"
      sheet["D" + i].s = {
        alignment: {
          vertical: "center",
          horizontal: "center",
          wrapText: true,
        },
      }
    }

    //设置单元格列宽
    sheet["!cols"] = [
      {wch: 14,},
      {wch: 20,},
      {wch: 20,},
    ]

    openDownloadDialog(sheet2blob(sheet), "下载.xlsx")
  }
</script>

一般情况下用xlsx.core.min.js就够了,xlsx.full.min.js则是包含了所有功能模块。

但是,xlsx.full.min.js和xlsx-style/xlsx.full.min.js(两个js都加密了)暴露出来的变量都叫XLSX,xlsx-style这个js文件里又没有XLSX.utils这个方法,还是后引入的,就会把前面的XLSX给覆盖了,所以会报错。

解决方法是删掉xlsx.full.min.js,改用xlsx.extendscript.js(这个js没加密),并把暴露出来的变量修改为XLSX2

其他库

如果觉得 xlsx-style 的功能不够全面,不能实现需求,这里再推荐一个项目 ExcelJS,这个项目的功能更加全面,而且项目也还在维护,可以试试看能否满足需求。

关联资源下载

包含 3 个 js 文件。

下载地址:https://gaga.lanzoum.com/ixnMF0xz6wwj

参考

JavaScript
Theme Jasmine by Kent Liao