jQuery DataTable如何在导出到excel pdf

时间:2019-02-13 08:32:23

标签: jquery datatables

我正在使用dataTables上的自定义过滤器选择框,并尝试实现导出按钮。但是,我正在从选择中获得显示为出口标题的信息。 我想从标题中删除下拉过滤器选择值,同时导出到excel pdf或在此处打印是我的代码,我也附上输出屏幕截图 我用来生成选择过滤器的代码是:

Attached screen shot

 $(document).ready(function() {
        $('#invoicetable').DataTable( {
            dom: 'lBfrtip',
            buttons: [
        { extend: 'print', filename: 'Pay Summary',title: 'Pay Summary',footer: true },
        { extend: 'excelHtml5', filename: 'Pay Summary',title: 'Pay Summary',footer: true },
        { extend: 'pdfHtml5', filename: 'Pay Summary', title: 'Pay Summary', footer: true },
    ],
            initComplete: function () {
                this.api().columns([0,2]).every( function () {
                    var column = this;
                    var select = $('<select><option value=""></option></select>')
                        .appendTo( $(column.header()).empty() )
                        .on( 'change', function () {
                            var val = $.fn.dataTable.util.escapeRegex(
                                $(this).val()
                            );

                            column
                                .search( val ? '^'+val+'$' : '', true, false )
                                .draw();
                        } );

                    column.data().unique().sort().each( function ( d, j ) {
                        select.append( '<option value="'+d+'">'+d+'</option>' )
                    } );
                } );
            },

            "footerCallback": function ( row, data, start, end, display ) {
        var totapi = this.api(), data;

        // Remove the formatting to get integer data for summation
        var intVal = function ( i ) {
            return typeof i === 'string' ?
                i.replace(/[\$,]/g, '')*1 :
                typeof i === 'number' ?
                    i : 0;
        };
        pageTotal = totapi
            .column( 3, { page: 'current'} )
            .data()
            .reduce( function (a, b) {
                return intVal(a) + intVal(b);
            }, 0 );

            saltot = totapi
            .column( 5, { page: 'current'} )
            .data()
            .reduce( function (a, b) {
                return intVal(a) + intVal(b);
            }, 0 );

            dectot = totapi
            .column( 6, { page: 'current'} )
            .data()
            .reduce( function (a, b) {
                return intVal(a) + intVal(b);
            }, 0 );

            salpay = totapi
            .column( 7, { page: 'current'} )
            .data()
            .reduce( function (a, b) {
                return intVal(a) + intVal(b);
            }, 0 );

        // Update footer
        $( totapi.column( 3 ).footer() ).html(pageTotal);
        $( totapi.column( 5 ).footer() ).html(saltot);
        $( totapi.column( 6 ).footer() ).html(dectot);
        $( totapi.column( 7 ).footer() ).html(salpay);
    }

        } );

    } );

3 个答案:

答案 0 :(得分:1)

这对我有用(表的第一列以外的所有列都有下拉列表):

我的列标题文本包装在<a> html标记内。例如:<a>Column 1</a>

然后在我的dataTables按钮中:

exportOptions: {
                columns: ":visible",
                format: {
                    header: function (data, column, row) {
                        if (column > 0) {
                            return $(data).prev('a').text();
                        }
                        else
                            return data;

                    }
                }

            }

答案 1 :(得分:0)

您可以使用

exportOptions: { 
            format: {
                header: function ( data, column, row )
                    {
                        return data.substring(data.indexOf("value")+9,data.indexOf("</option"));
                    }
             }
        },

对我有用

答案 2 :(得分:0)

在我的解决方案中,我也为我的数据表使用了页脚来解决此问题。 隐藏页眉:还将隐藏下拉菜单,并将页脚推到表格的第一行

Product 1-N order_type N-N order_data