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

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

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

提前致谢

【问题讨论】:

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

标签: javascript datatables datatables-1.10


【解决方案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 数据。
    猜你喜欢
    • 2021-09-23
    • 2014-06-16
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多