Datatables csv下载将自定义列添加到文件中

Datatables csv download add custom columns to file

本文关键字:添加 文件 自定义 csv 下载 Datatables      更新时间:2023-09-26

我已经使用Datatables几天了,我遇到了这个问题:我有一个方法可以从csv文件中的Datatable下载数据,这个表有三列(Id、Type和Quantity):

_mVM.downloadCSV = function (item, event) {
        var table = $("#Table" + item.Id()).DataTable();
        var contentParts = [], rowParts = [], visibleColumns = [], column, data, field;
        var rows = table.rows({ filter: "applied" });
        var rowsData = rows.data();
        var columns = table.columns();
        var columnsCount = columns.data().length;
        //Columns and headers
        for (var i = 0; i < columnsCount; i++) {
            column = table.column(i);
            if (column.visible()) {
                visibleColumns.push(column.dataSrc());
                rowParts.push($(column.header()).html());
            }
        }
        if (rowParts.length > 0) {
            contentParts.push(rowParts.join(","));
        }
        // Rows
        for (var rowNum = 0; rowNum < rowsData.length; rowNum++) {
            rowParts = [];
            for (var j = 0; j < visibleColumns.length; j++) {
                field = visibleColumns[j];
                data = rowsData[rowNum][field];
                rowParts.push($(data).html());
            }
            contentParts.push(rowParts.join(","));
        }
        var test = contentParts.join("'n");
        var dltrData = test;
        var blob = new Blob([dltrData], { type: "text/csv;charset=utf-8;" });
        saveAs(blob, item.selsite() + ".csv");
    }

问题是,在将要下载的文件中,我需要(手动)添加另一列,一个标题为"Extra"的空列,位于数据表中的列的末尾(该列将是第四列)。是否可以使用相同的方法(downloadCSV)添加它,或者只有Datatable列才能进入该文件?

一种大致类似的方法可能会奏效,其中extraHeader是列的名称,extraRowData是按行顺序排列的列的值的数组。您可能希望使此代码更加健壮。

_mVM.downloadCSV = function (item, event, extraHeader, extraRowData) {
    var table = $("#Table" + item.Id()).DataTable();
    var contentParts = [], rowParts = [], visibleColumns = [], column, data, field;
    var rows = table.rows({ filter: "applied" });
    var rowsData = rows.data();
    var columns = table.columns();
    var columnsCount = columns.data().length;
    //Columns and headers
    for (var i = 0; i < columnsCount; i++) {
        column = table.column(i);
        if (column.visible()) {
            visibleColumns.push(column.dataSrc());
            rowParts.push($(column.header()).html());
        }
    }
    if (extraHeader) rowParts.push(extraHeader);
    if (rowParts.length > 0) {
        contentParts.push(rowParts.join(","));
    }
    // Rows
    for (var rowNum = 0; rowNum < rowsData.length; rowNum++) {
        rowParts = [];
        for (var j = 0; j < visibleColumns.length; j++) {
            field = visibleColumns[j];
            data = rowsData[rowNum][field];
            rowParts.push($(data).html());
            if(extraRowData && rowNum < extraRowData.length) rowParts.push(extraRowData[rowNum]);
        }
        contentParts.push(rowParts.join(","));
    }
    var test = contentParts.join("'n");
    var dltrData = test;
    var blob = new Blob([dltrData], { type: "text/csv;charset=utf-8;" });
    saveAs(blob, item.selsite() + ".csv");
}