如何在csv中导出报告期间删除列?

时间:2014-02-18 19:27:37

标签: jquery csv

我正在使用jquery代码以csv格式导出报告。一切正常,但我想从CSV中隐藏列名列第4列。

这是我的js代码:

$(document).ready(function () {



    function exportTableToCSV($table, filename) {



        var $rows = $table.find('tr:has(td,th)'),



            // Temporary delimiter characters unlikely to be typed by keyboard

            // This is to avoid accidentally splitting the actual contents

            tmpColDelim = String.fromCharCode(11), // vertical tab character

            tmpRowDelim = String.fromCharCode(0), // null character



            // actual delimiter characters for CSV format

            colDelim = '","',

            rowDelim = '"\r\n"',



            // Grab text from table into CSV formatted string

            csv = '"' + $rows.map(function (i, row) {

                var $row = $(row),

                    $cols = $row.find('td, th');



                return $cols.map(function (j, col) {

                    var $col = $(col),

                        text = $col.text();



                    return text.replace('"', '""'); // escape double quotes



                }).get().join(tmpColDelim);



            }).get().join(tmpRowDelim)

                .split(tmpRowDelim).join(rowDelim)

                .split(tmpColDelim).join(colDelim) + '"',



            // Data URI

            csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);



        $(this)

            .attr({

            'download': filename,

                'href': csvData,

                'target': '_blank'

        });

    }



    // This must be a hyperlink

    $(".export").on('click', function (event) {

        // CSV

        exportTableToCSV.apply(this, [$('#dvData>table'), 'export.csv']);



        // IF CSV, don't do event.preventDefault() or return false

        // We actually need this to be a typical hyperlink

    });

});

我在下面给我的工作小提琴:

http://jsfiddle.net/KPEGU/925/

任何想法?如何删除此列?

3 个答案:

答案 0 :(得分:1)

在本节中,修改代码如下:

return $cols.map(function (j, col) {
    if(j != 3){
        var $col = $(col),
        text = $col.text();
        return text.replace('"', '""'); // escape double quotes
    }else{
        return "";
    }

}).get().join(tmpColDelim);

在小提琴中运行它并单击导出按钮,您将看到第4列未包含在csv输出中。

答案 1 :(得分:0)

你可以克隆你的表,这样就不会改变页面上的结果,然后只删除第一个td子项,你也需要为你的TH行执行此操作,但这样做有效。

 $table = $table.clone();
 $table.find("td:nth-child(4)").remove();
$table.find("th:nth-child(4)").remove();

http://jsfiddle.net/KPEGU/929/

编辑刚刚看到你说删除了第四列。更新。

答案 2 :(得分:0)

尝试更改$cols.map(function(…))功能,使其不再打印第4列。

    return $cols.map(function (j, col) { 
        // add this in here since you only want columns 0, 1, and 2
        if(j<3){  
            var $col = $(col),
            text = $col.text();
            return text.replace('"', '""'); // escape double quotes
        }
    }).get().join(tmpColDelim);

您也可以使用相同的逻辑仅打印特定列。例如,条件,

        if(j==0 || j==2){  
            ….
        }

将仅打印第1列和第3列。

更新:刚刚意识到这与@ Nate的答案类似。在我忙着打电话的时候,他没有意识到他已经发布了答案。