jQuery数据表将数据导出到Excel

我试图直接从数据表导出到Excel .

从ajax调用开始:

displayRecords();
function displayRecords()
{
  $.ajax({
    url: 'process/getRecords.php',
    type: 'POST',
    data: '',
    dataType: 'html',
    success: function(data, textStatus, jqXHR)
    {
      var jsonObject = $.parseJSON(data); 
      var table = $('#resultsTable').DataTable({    
      {
        "data": jsonObject,
        "columns": [
          {"data": "JOB_REFERENCE"},
          {"data": "VOYAGE_REFERENCE"},
          // few more columns
        ],
        "iDisplayLength": 25,
        "scrollY": 500,
        "scrollX": true,
        "bDestroy": true,
        "paging": true,
        "stateSave": true
      }
    },
    error: function(jqHHR, textStatus, errorThrown)
    {
      console.log('fail: '+ errorThrown);
    }
  });

   // button click to export results
   var tableresults = $('#resultsTable').dataTable();

   $("#btnExport").on('click', function(e) 
   {
     e.preventDefault();
     window.open('data:application/vnd.ms-excel,' +
       encodeURIComponent(table[0].outerHTML));
   });
}

使用上述所有内容,我可以成功地从数据表中导出结果 . 我甚至可以使用过滤器搜索深入查看较小的数据集,并导出结果 .

我正在使用以下小提琴:http://jsfiddle.net/donpayne/jzdjdo3z/

我遇到的问题在于数据表的Show Entries下拉列表 . 通常,下拉列表设置为10.无论是否过滤搜索,如果总记录数大于“显示条目”下拉列表,Excel工作表将仅返回下拉列表中设置的总金额 .

你可以测试我在小提琴中谈论的内容 . 将Show Entries下拉列表设置为10,然后导出到Excel . 如果您注意到,该表中共有58条记录 . Excel工作表只返回10条记录 .

我需要返回所有记录 . 如果我有2000条记录,并且Show Entries下拉列表设置为10,我需要导出的Excel工作表包含所有2000条记录 .

如果我将搜索过滤到大约56条记录,则相同;当我导出到excel时,我应该在该电子表格上总共有56条记录,无论Show Entries下拉列表设置为什么 .

如上所述,我引用了小提琴中的代码并将其更改为适合我的数据表 .

回答(1)

2 years ago

我认为最好的办法是删除分页,然后进行导出,然后在完成后重新打开分页 .

我做了一些小改动:

$(function () 
{
    var table = $('#example').DataTable();

    $("#btnExport").click(function(e) 
    {
        table.page.len( -1 ).draw();
        window.open('data:application/vnd.ms-excel,' + 
            encodeURIComponent($('#example').parent().html()));
      setTimeout(function(){
        table.page.len(10).draw();
      }, 1000)

    });
});

更新小提琴:http://jsfiddle.net/jzdjdo3z/176/

页面长度文档:https://datatables.net/reference/api/page.len()

分页选项文档:https://datatables.net/reference/option/paging

我不确定为什么使用dataTables和DataTables进行初始化会有所不同,但确实如此 . 所以请留意这一点 .