将Bootstrap Data表的所有行导出到Excel

Gag*_*ags 3 excel jquery datatables twitter-bootstrap

我正面临将Bootstrap数据表行导出到Excel的问题.

对于将数据导出到Excel我使用的是一个名为的外部插件jquery.table2excel.js.

导出数据表的代码如下所示:

<script type="text/javascript" src="js/jquery.table2excel.js">
</script>
<script>
 $(function() {
    var startDate = $(".startDate").val();
    var endDate = $(".endDate").val();
    $("#exportExcel").click(function(){
        $("#table_id").table2excel({
            exclude: ".noExl",
            //name: "Excel Document Name",
            filename:  "Data from " + startDate + " to " + endDate
        }); 
     });
    $("#table_id").dataTable();
  });
</script>
Run Code Online (Sandbox Code Playgroud)

对于Datatable,我使用下面的库:

<script type="text/javascript" src="js/jquery.dataTables.min.js">
</script>
<script type="text/javascript" src="js/dataTables.bootstrap.js">
</script>
Run Code Online (Sandbox Code Playgroud)

表如下:

<table id="table_id" class="table table-striped table-condensed table-
bordered">
  <thead>`Table Headers here`</thead>
  <tbody>`Rows from Database here`</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

问题描述如下:

  1. 当我尝试使用导出功能时,只有Visible Rows会导出到excel而不是分页行.

例如假设我每页有10行,那么只会导出前10行,当我将每页行数更改为25时,则导出所有25行.

我想用我正在使用的插件一次导出所有行.有什么想法吗?

Gyr*_*com 6

您可以使用$()方法来访问甚至不存在于DOM中的所有行,并使用这些行构造新表.然后,您可以table2excel()在新构造的表上执行以获取包含所有行的Excel文件.

例如:

$(function() {
   var startDate = $(".startDate").val();
   var endDate = $(".endDate").val();

   $("#exportExcel").click(function(){
      $('<table>')
         .append(
            $("#table_id").DataTable().$('tr').clone()
         )
         .table2excel({
            exclude: ".excludeThisClass",
            name: "Worksheet Name",
            filename: "SomeFile" //do not include extension
         });
   });

   $("#table_id").dataTable();
});
Run Code Online (Sandbox Code Playgroud)

DEMO

有关代码和演示,请参阅此页面.

笔记

打开生成的文件时,Excel 2013显示以下错误table2excel.js.

Excel无法打开文件,[filename]因为文件格式或文件扩展名无效.验证文件是否已损坏,以及文件扩展名是否与文件格式匹配.

由于这个错误,我宁愿使用DataTables TableTools插件,即使它只能生成CSV文件并使用Flash.