使用Jquery Datatable不会在生成的文件(pdf,excel)中导出自动生成的索引列

时间:2017-03-01 08:54:35

标签: jquery datatables

我使用Datatable创建了一个表,并且还导出了数据id pdf和excel。有一列序列号(S.No。),其索引号。是1.Table正在网页中工作。但是当文件导出时,标题显示的是序列号但文件中没有显示数字。 请参阅下面的代码。 如果有任何解决方案。请告诉我。 感谢

$(document).ready(function() {
var t = $('#log').DataTable( {           
    dom: 'Blfrtip',
    buttons: [
   {
       extend: 'pdf',
       title: 'Activity Report',
       footer: true,
       exportOptions: {
            columns: [1,2,3,4,5]
        }
   },
   {
       extend: 'excel',
       title: 'Activity Report',
       exportOptions: {
            columns: [1,2,3,4,5]
        },
       footer: false
   } , 
   {
       extend: 'print',
       title: 'Login Activity Report',
       exportOptions: {
            columns: [1,2,3,4,5]
        },
       footer: true
   }       
]  
});
  t.on( 'order.dt search.dt', function () {
  t.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
        cell.innerHTML = i+1;
     });
    }).draw();
});

4 个答案:

答案 0 :(得分:1)

我假设您的列名来自数据库,并且您在运行时为所有列分配值。我还假设您的列名如下NAME,ACCOUNT,AGE,SALARY,然后将列呈现给数据库时,通过以下方式在其中添加一个名为srno的空列。

 "aoColumns": [
   {
             "data": "srno",
             "defaultContent":  "" // WHICH IS CHANGED TO SR NO 
   },]

这里我们将空值分配给第0列。因此在导出选项中,您必须将其更改为

  exportOptions: {
        columns: [0,1,2,3,4]
    }

我们这样做是因为columns是数据表jquery中的一个数组。

 $(document).ready(function() {
 var t = $('#log').DataTable( {           
 dom: 'Blfrtip',
 buttons: [
 {
   extend: 'pdf',
   title: 'Activity Report',
   footer: true,
   exportOptions: {
        columns: [0,1,2,3,4]
    }
  },
 {
   extend: 'excel',
   title: 'Activity Report',
   exportOptions: {
        columns: [0,1,2,3,4]
    },
   footer: false
  } , 
  {
   extend: 'print',
   title: 'Login Activity Report',
   exportOptions: {
        columns: [0,1,2,3,4]
   },
   footer: true
  }       
]
"aoColumns": [
   {
             "data": "srno",
             "defaultContent":  "" // WHICH IS CHANGED TO SR NO 
   },
   { "mData": "NAME" },
   { "mData": "ACCOUNT" },
   { "mData": "AGE" },
   { "mData": "SALARY" }
    ]  
 });
 t.on( 'order.dt search.dt', function () {
 t.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
    cell.innerHTML = i+1;
  });
  }).draw();
}); 

今天我遇到了同样的问题,经过一些R& D我来到这个解决方案。虽然现在解决问题为时已晚,但我希望它能帮助我们社区的其他读者。

答案 1 :(得分:1)

据我所知,您需要在PDF页面上打印索引列,该页面将显示在您的网页上,即它应始终以1开头。

    t.on( 'order.dt search.dt', function () {
        t.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
            cell.innerHTML = i+1;
            t.cell(cell).invalidate('dom');
            });
        }).draw();

答案 2 :(得分:0)

对于序列号列,我们需要根据参考数据表论坛link

导出时更改字符串的值

以下解决方案有效

$(function()
    {
        var oTable = $('#ReportsOrdersTable').DataTable({
        bFilter: false,
        dom: 'lBfrtip',
        processing: true,
        serverSide: true,
        responsive: true,
        autoWidth:true,
        buttons: [
            {
                extend: 'excelHtml5',
                exportOptions: { orthogonal: 'export' }
            },
            {
                extend: 'pdfHtml5',
                exportOptions: { orthogonal: 'export' }
            }
        ],
        ajax: {
            url: 'reports/report_customer_order_list',
            type: 'POST',
            data: function (d) {
                d.from         = $('input[name=from]').val();
                d.to           = $('input[name=to]').val();
                d.order_status = $('#order_status').val();
            },
        },
        columnDefs: [ {
               targets  : 'no-sort',
               orderable: false,
        }],
        "order": [[ 0, "desc" ]],
        columns: [
                { data: 'id', name: 'id', render: function (data, type, row) {
                return type === 'export' ?
                    data.toString() :
                    data;
                }},
                { data: 'firstname', name: 'firstname' },
                { data: 'email', name: 'email' },
                { data: 'booking_count', name: 'booking_count',render: function (data, type, row) {
                return type === 'export' ?
                    data.toString() :
                    data;
                } },
                { data: 'payments_amount', name: 'payments_amount' },
            ],            
        });
    });

答案 3 :(得分:0)

使用Jquery数据表未将自动生成的索引列导出到生成的文件(pdf,excel)中

t.on('draw', function () {
         t.rows({ search: 'applied', order: 'applied', filter: 'applied' }).data().each(function (d, i) {
             d[0] = i + 1;
         });
     });

 t.on('order.dt search.dt', function () {
     t.column(0, { search: 'applied', order: 'applied' }).nodes().each(function (cell, i) {
          cell.innerHTML = i + 1;
     });
 }).draw(false);

此功能正常工作