分享

vue JSON数据导出为 多个sheet表的excel文件

 丰收书屋 2020-07-21
复制代码
<!DOCTYPE html>
<html lang="en">
  <head></head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <script src="https://cdn./xlsx/0.15.1/xlsx.full.min.js"></script>
  </head>
  <body>
    <script>
      // 数据
      let data = { '基本信息': [{name: '李四', sex: 'nan', age: 12}], '成绩': [{class: '计算机', teacher: 'Mrs wang', score: 90}] };
      let columnHeaders = { '基本信息': ['name', 'sex', 'age'], '成绩': ['class', 'teacher', 'score']}
      outputXlsxFile(
        data,
        [{ wch: 50 }, { wch: 50 }, { wch: 10 }],
        "test-xlsx"
      );

      function outputXlsxFile(data, wscols, xlsxName) {
        let sheetNames = [];
        let sheetsList = {};
        const wb = XLSX.utils.book_new();

        for (let key in data) {
          sheetNames.push(key);
          let columnHeader = columnHeaders[key] // 此处是每个sheet的表头
          let temp = transferData(data[key], columnHeader);
          sheetsList[key] = XLSX.utils.aoa_to_sheet(temp);
          sheetsList[key]["!cols"] = wscols;
        }

        wb["SheetNames"] = sheetNames;
        wb["Sheets"] = sheetsList;

        XLSX.writeFile(wb, xlsxName + ".xlsx");
      }

      function transferData(data, columnHeader) {
        let content = [];
        content.push(columnHeader);
        data.forEach((item, index) => {
          let arr = [];
          columnHeader.map(column =>{
            arr.push(item[column]);
          })
          content.push(arr);
        });
        return content;
      }
    </script>
  </body>
</html>

复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多