You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用datatables或JS/jQuery将页面多个表格导出为单个CSV文件

实现方案

核心思路

  • 不依赖Datatables自带导出组件,自定义导出逻辑适配多表差异表头需求
  • 遍历所有目标表格,分别处理表头和表体内容,按CSV格式规范拼接所有内容
  • 拼接完成后生成Blob对象,触发浏览器下载即可

注意事项

  • 必须处理CSV特殊字符:内容包含逗号、双引号、换行时,需要用双引号包裹内容,内容内部的双引号要转成两个双引号,避免列错位
  • 如果表格开启了Datatables分页,优先用Datatables API获取数据,避免只拿到当前页的部分内容
  • 不需要导出所有表格的话,给目标表格加统一类名筛选即可

代码实现

方案1:基于Datatables API实现(推荐,可获取全量/过滤后数据)

// 导出所有Datatables为单个CSV
function exportAllTablesToCSV() {
  let csvContent = '';
  // CSV特殊字符转义
  const escapeCSV = (str) => {
    str = str ?? '';
    if (str.includes(',') || str.includes('"') || str.includes('\n')) {
      return `"${str.replace(/"/g, '""')}"`;
    }
    return str;
  };

  // 遍历所有已初始化的Datatables实例,visible设为false可包含隐藏表格
  $.fn.dataTable.tables({ visible: true, api: true }).each(function () {
    const table = this;
    // 拼接表头
    const headers = table.columns().header().toArray().map(th => escapeCSV(th.textContent.trim()));
    csvContent += headers.join(',') + '\r\n';
    // 拼接数据行,保留搜索过滤结果的话保留{search:'applied'},要全量数据删掉该参数
    const rows = table.rows({ search: 'applied' }).data().toArray();
    rows.forEach(row => {
      const processedRow = row.map(cell => escapeCSV(cell?.toString().trim() ?? ''));
      csvContent += processedRow.join(',') + '\r\n';
    });
    // 不同表格之间加空行分隔,不需要可删除
    csvContent += '\r\n';
  });

  // 触发下载
  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  const url = URL.createObjectURL(blob);
  const downloadLink = document.createElement('a');
  downloadLink.href = url;
  downloadLink.download = '表格汇总导出.csv';
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
  URL.revokeObjectURL(url);
}

// 绑定到导出按钮
$('#export-all-btn').on('click', exportAllTablesToCSV);

方案2:原生JS遍历DOM实现(无Datatables依赖)

function exportAllDomTablesToCSV() {
  let csvContent = '';
  const escapeCSV = (str) => {
    str = str ?? '';
    if (str.includes(',') || str.includes('"') || str.includes('\n')) {
      return `"${str.replace(/"/g, '""')}"`;
    }
    return str;
  };

  // 选择目标表格,可替换为自定义类名选择器如'.export-target'
  document.querySelectorAll('table').forEach(table => {
    // 拼接表头
    const headers = Array.from(table.querySelectorAll('thead th')).map(th => escapeCSV(th.textContent.trim()));
    csvContent += headers.join(',') + '\r\n';
    // 拼接数据行
    Array.from(table.querySelectorAll('tbody tr')).forEach(tr => {
      const cells = Array.from(tr.querySelectorAll('td')).map(td => escapeCSV(td.textContent.trim()));
      csvContent += cells.join(',') + '\r\n';
    });
    // 表格分隔空行,不需要可删除
    csvContent += '\r\n';
  });

  // 下载逻辑
  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  const url = URL.createObjectURL(blob);
  const downloadLink = document.createElement('a');
  downloadLink.href = url;
  downloadLink.download = '表格汇总导出.csv';
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
  URL.revokeObjectURL(url);
}

内容的提问来源于stack exchange,提问作者jdag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:09:02