将所有表导出到单个 csv

Posted

技术标签:

【中文标题】将所有表导出到单个 csv【英文标题】:export all tables to single csv 【发布时间】:2021-12-02 08:36:08 【问题描述】:

我使用 datatables.net,我的一些页面有多个表。我不知道如何遍历每个表,将数据保存到变量中,以便在单击导出按钮时将其作为单个 csv 推出。

有些表有不同的标题,这都很好。我只想将整个表中的所有 th 和 td 值输出到单个 csv。如果数据表不以某种迂回的方式支持这一点,那么如果它是 jquery 或 javascript 就可以了。

提前致谢

【问题讨论】:

你想用javascript做这个吗? 请展示您尝试过的内容,并明确说明您的挑战所在。请在此处发布为实际代码。 这样的 CSV 文件会是什么样子?一个 CSV 文件通常只有一个标题行,并且所有数据行都具有与该标题行相同数量的字段。如果您有多个表格,您也有多个不同的标题行 - 以及可能具有不同列数的表格。 【参考方案1】:

试试这个方法

<table id="example1" class="table" style="width:100%">  
</table>

<table id="example2" class="table" style="width:100%">
</table>

JS:

var table = $('#example1').DataTable();
var data = table.buttons.exportData();
// Do something with the 'data' variable

buttons.exportData()

【讨论】:

【参考方案2】:

这对我有用。谢谢。

$( "#exportalltocsv" ).on( "click", function(e) 
    e.preventDefault();
    let csvstring = "";
        $('.dataTable').each( function () 
            var columns = [];
            $(this).DataTable().columns().eq(0).each( function ( index ) 
                var column = this.column( index ).header();
                columns.push($(column).html());
             );
            csvstring += columns.map(th => '"' + th.replace('"', '\"') + '"').toString() + "\n";
            $(this).DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) 
                csvstring += this.data().map(value => '"' + value.replace('"', '\"') + '"').toString() + "\n";
             );
            csvstring += "\n\n";
        );
    var hiddenElement = document.createElement('a');
    hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvstring);
    hiddenElement.target = '_blank';
    hiddenElement.download = '<?=$pagetitle.date(' Y-m-d H-i-s')?>.csv';
    hiddenElement.click();
);

【讨论】:

一些注意事项,以防它们帮助未来的访问者获得此答案:(1) 此答案似乎基于此其他答案的代码:Export and append object to csv。 (2) 最终结果不是有效的 CSV 文件 - 但在这种情况下,也许 OP 可以接受。 (3) 此处的代码无法正确处理双引号:value.replace('"', '\"')。这会将" 替换为"。它也只会替换给定字符串中"first 出现,因为它正在替换文字,而不是使用正则表达式。代码需要使用value.replaceAll('"', '\\"')。 (4) 由于该方法不使用 CSV 库,因此可能存在其他方式导致导出的数据不是有效的 CSV 数据。

以上是关于将所有表导出到单个 csv的主要内容,如果未能解决你的问题,请参考以下文章

pgsql某一个库所有表导出前1000行,CSV格式

MySQL:将多个表导出到 CSV 文件

使用fputcsv导出到csv时是否可以使标题文本变为粗体?

sh 将sqlite数据库中的所有表导出为CSV。

将多个 CSV 文件加载到 MYSQL 中的单个表中 [重复]

如何将表数据导出到csv wordpress