前端JS自定义导出excel表格

文章介绍了如何利用xlsx库在JavaScript中实现自定义的Excel表格导出功能。它涉及到将JSON数据转换为工作表,处理表头和数据,并通过创建二进制对象实现文件下载。示例代码展示了整个过程,包括字符串转字符流、数据转换以及触发下载的步骤。
摘要由CSDN通过智能技术生成

利用 xlsx 实现JS自定义导出excel表格

xlsx 包介绍 npm

准备步骤:引入资源

<script lang="javascript" src="dist/xlsx.full.min.js"></script>

封装方法库

// 字符串转字符流
function s2ab(s) {
  const buf = new ArrayBuffer(s.length);
  const view = new Uint8Array(buf);
  for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
  return buf;
}

/**
 * 将 js 对象的数组转换为工作表。
 * @param {string[]} header - 表头
 * @param {Object} headerDisplay - 表头名称
 * @param {object[]} sheetData - 表数据
 * @param {Boolean} skipHeader - 是否隐藏表头
 * @returns 工作表
 */
function jsonToSheet(header, headerDisplay, sheetData, skipHeader) {
  const newSheetData = skipHeader ? [headerDisplay, ...sheetData] : sheetData;
  const ws = window.XLSX.utils.json_to_sheet(newSheetData, {
    header,
    skipHeader,
  });

  return ws;
}

/**
 * 自定义将js数据导出下载excel
 * 
 * sheetHeaderDisplay(表头名称) 不存在时,默认使用 sheetHeader(表头key) 当做表头名称
 * @param {Object[]} data - 所有表信息
 * @param {string} data[].sheetName - 表名称
 * @param {string[]} data[].sheetHeader - 表头key
 * @param {Object} data[].sheetHeaderDisplay - 表头名称
 * @param {Object[]} data[].sheet - 表数据
 * @param {string} excelName - 导出的excel名称
 * @example 
  [
    {
      sheetName: 'Tom and Jerry',
      sheetHeader: ['name', 'age', 'sex'],
      sheetHeaderDisplay: {name: '名字', age: '年龄', sex: '性别'},
      sheet: [
        { name: 'Tom', age: 3, sex: '男' },
        { name: 'Jerry', age: 2, sex: '女' },
        { name: 'Spike', age: 4, sex: '男' },
      ],
    },
  ];
 */
function Xlsx(data, excelName) {
  const tmpWB = {
    SheetNames: [], // 保存的表标题
    Sheets: {}, // 表数据
  };

  // 生成excel的配置项
  data.forEach(item => {
    const skipHeader =
      Object.prototype.toString.call(item.sheetHeaderDisplay) === '[object Object]' && Object.keys(item.sheetHeaderDisplay).length > 0;
    tmpWB.SheetNames.push(item.sheetName);
    tmpWB.Sheets[item.sheetName] = Object.assign({}, jsonToSheet(item.sheetHeader, item.sheetHeaderDisplay, item.sheet, skipHeader), {});
  });

  // 创建二进制对象写入转换好的字节流
  const tmpDown = new Blob(
    [
      s2ab(
        // write 用来把数据写入并生成 xlsx 文件的 API
        window.XLSX.write(
          tmpWB,
          {
            // 要生成的文件类型: 'xlsx'|'xlsm'|'xlsb'
            bookType: 'xlsx',
            bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
            type: 'binary',
          }, // 这里的数据是用来定义导出的格式类型
        ),
      ),
    ],
    {
      type: '',
    },
  );

  const outFile = document.createElement('a');
  const href = URL.createObjectURL(tmpDown); // 创建对象超链接
  outFile.download = `${excelName || 'export'}.xlsx`; // 下载名称
  outFile.style.display = 'none';
  outFile.href = href; // 绑定a标签
  document.body.appendChild(outFile);
  outFile.click(); // 模拟点击实现下载
  setTimeout(() => {
    // 延时释放
    URL.revokeObjectURL(tmpDown); // 用URL.revokeObjectURL()来释放这个object URL
    document.body.removeChild(outFile);
  }, 100);
}

export default Xlsx;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在前端实现导出数据为Excel表格,你可以使用以下方法之一: 1. 使用现有的库或插件:许多JavaScript库和插件可以帮助你在前端导出数据为Excel表格,如 `xlsx`、`exceljs`、`FileSaver.js` 等。这些库提供了方便的方法和功能来处理Excel文件的创建和导出。 2. 手动构建Excel文件:你可以使用JavaScript生成Excel文件的格式(如CSV、XML或XLSX)并将其下载到用户的设备上。这需要一些编码工作,但是可以根据你的需求来实现自定义功能。 以下是两种方法的示例: 使用 `xlsx` 库: ```javascript import XLSX from 'xlsx'; function exportToExcel(data, filename) { const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.aoa_to_sheet(data); XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSX.writeFile(workbook, filename); } ``` 使用纯JavaScript手动构建Excel文件(CSV格式): ```javascript function exportToExcel(data, filename) { let csv = 'data:text/csv;charset=utf-8,'; data.forEach(row => { csv += row.join(',') + '\n'; }); const encodedUri = encodeURI(csv); const link = document.createElement('a'); link.setAttribute('href', encodedUri); link.setAttribute('download', filename); document.body.appendChild(link); link.click(); document.body.removeChild(link); } ``` 在上述示例中,你需要提供一个二维数组 `data`,其中每个子数组表示一行数据,然后将其传递给 `exportToExcel` 函数以导出Excel表格。 `filename` 参数是要保存的文件名。 请确保在使用这些代码之前,你已经引入了相关的库或插件,或者在手动构建Excel文件时做了必要的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值