数据转Excel

168 阅读1分钟

所用插件

XLSX

代码实现

import * as XLSX from "xlsx";// 下载XLSX插件 npm i XLSX
 
 export default {
    exportExcel(columnHeaders, data, cellStyle, fileName) { // columnHeaders 表头信息  data数据  cellStyle 列宽度 fileName 导出文件名
        function outputXlsxFile(data, wscols, xlsxName) { // 用于生成并保存 Excel 文件
          const sheetNames = [];// 存储 sheet 名称
          const sheetsList = {};// 存储所有 sheet 的数据
          const wb = XLSX.utils.book_new();// 创建了一个新的工作簿对象 wb
          for (const key in data) {
            sheetNames.push(key);
            const columnHeader = columnHeaders[key] // 获取当前 sheet 对应的列头信息 columnHeader
            const temp = transferData(data[key], columnHeader);
            sheetsList[key] = XLSX.utils.aoa_to_sheet(temp);// 创建 sheet 对象
            sheetsList[key]["!cols"] = wscols;// 当前 sheet 设置列宽 wscols
          }
          wb.SheetNames = sheetNames;
          wb.Sheets = sheetsList;
          XLSX.writeFile(wb, xlsxName + ".xlsx");// 将工作簿保存为 Excel 文件
        }
       
        function transferData(data, columnHeader) { // 将数据按照列头信息进行转换,将每一行的数据转换成一个数组
          const content = [];
          content.push(columnHeader);
          data.forEach((item, index) => {
            const arr = [];// 用于存储当前行的数据
            columnHeader.map(column => {
              arr.push(item[column]);// 使用 map 方法遍历 columnHeader,将每个列头对应的属性值添加到 arr 数组中
            })
            content.push(arr);// 将 arr 数组添加到 content 数组中
          });
          return content;
        }
        outputXlsxFile(
          data,
          cellStyle,
          fileName
        );
    }
 }

使用

xlsc.exportExcel(columnHeaders, data, cellStyle, fileName);
columnHeaders 表头
data 表数据
cellStyle 表样式设置每列宽度 wch
fileName 表名