将el-table表格显示的内容导出到Excel

本文详细介绍了如何使用JavaScript和XLSX库将HTML表格中的数据转换为Excel文件,包括导入库、创建导出函数、处理表格数据和触发下载的过程,以及注意事项如处理虚拟表格和input节点问题。
摘要由CSDN通过智能技术生成

在现代 Web 开发中,经常需要将数据从 Web 应用程序导出到 Excel 文件中。本文将指导你如何使用 JavaScript 和 XLSX 库实现此功能,将 HTML 表格中的数据导出为 Excel 文件。

步骤 1:导入 XLSX 库

首先,需要在项目中导入 XLSX 库。这是一个用于处理 Excel 文件的流行 JavaScript 库。你可以使用以下命令通过 npm 安装它:

Copy

npm install xlsx

步骤 2:创建导出函数

接下来,创建一个名为 copyTableToClipboard 的公共函数,用于将指定的 HTML 表格导出为 Excel 文件。该函数将接受两个参数:要导出的表格元素和输出 Excel 文件的名称。

Copy

export function copyTableToClipboard(table, name) {
  // ...
}

步骤 3:将 HTML 表格转换为二维数组

要将 HTML 表格导出为 Excel,需要将其内容转换为一个二维数组,其中每一行对应表格的一行,每一列对应表格的一列。可以使用 twoArray 函数实现此转换:

Copy

function twoArray(table) {
  // ...
}

步骤 4:根据二维数组创建 Excel 文件

一旦有了二维数组,就可以使用 createExcelFromData 函数创建 Excel 文件。此函数将接受二维数组和输出 Excel 文件的名称作为参数:

Copy

function createExcelFromData(array, name) {
  // ...
}

步骤 5:触发下载

最后,调用 createExcelFromData 函数创建 Excel 文件并触发下载。此函数将使用 XLSX 库将工作簿转换为 Excel 文件的缓冲区,然后创建一个 Blob 对象并触发下载:

Copy

createExcelFromData(tableString, name);

完整示例

以下是完整示例代码,展示如何使用 copyTableToClipboard 函数将 HTML 表格导出为 Excel 文件:

Copy

import * as XLSX from "xlsx";

export function copyTableToClipboard(table, name) {
  const tableString = twoArray(table);
  createExcelFromData(tableString, name);
}

function twoArray(table) {
  const rows = table.querySelectorAll('tr');
  let tableString = '';

  rows.forEach(row => {
    const cells = row.querySelectorAll('th, td');
    const rowContent = [];

    cells.forEach(cell => {
      const data = cell.innerText;
      rowContent.push(`"${data.replace(/"/g, '""')}"`);
    });

    tableString += rowContent.join(',') + '\n';
  });

  const string = tableString.split('\n');
  const transformedData = string.map(row => {
    return row
      .split('","')
      .map(cell => cell.replace(/"/g, ''));
  });

  return transformedData;
}

function createExcelFromData(array, name) {
  const removeQuotes = (str) => {
    if (typeof str === 'string') {
      return str.replace(/"(.*)"/g, '$1');
    }
    return str;
  };

  const cleanedData = array.map(row => row.map(removeQuotes));
  const workSheet = XLSX.utils.aoa_to_sheet(cleanedData);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, workSheet, 'Sheet1');
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
  const data = new Blob([excelBuffer], { type: 'application/octet-stream' });
  const url = URL.createObjectURL(data);
  const link = document.createElement('a');
  link.href = url;
  link.download = name + '.xlsx';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  URL.revokeObjectURL(url);
}

现在,你可以使用 copyTableToClipboard 函数将任何 HTML 表格导出为 Excel 文件。只需将表格元素和输出 Excel 文件的名称作为参数传递给该函数即可。

PS:

  • 遇到虚拟表格只能导出视图内容,
  • 导出表格带选择框会空一列(自己调就行)
  • 无法识别input节点
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值