问题
I just started out using jQuery DataTables.
using the tableTools of DataTables, is it possible to only export visible rows instead of all the rows? If for example the pagination was set to 10 I would expect only 10 rows to be exported. The same goes for a search result.
Here's part of the code:
$(document).ready(function() {
var table = $('#example').DataTable({
"pagingType": "full_numbers",
"iDisplayLength" : 10,
dom: 'T<"clear">lfrtip',
"oTableTools": {
"aButtons": [
{ "sExtends": "copy", "mColumns": "visible", "bSelectedOnly": true },
{ "sExtends": "xls", "mColumns": "visible" },
{ "sExtends": "print", "mColumns": "visible" }
], "sRowSelect": "multi"},
"order": [[ 0, "asc" ]]
} ) ;...
Thank you.
回答1:
You can achieve that behavior by selecting all visible rows before saving, then deselecting them after saving completed.
$(document).ready(function() {
$('#example').DataTable( {
dom: 'T<"clear">lfrtip',
"oTableTools": {
"sRowSelect": "multi",
"aButtons": [
{
"sExtends": "csv",
"bSelectedOnly": true,
"fnComplete": function ( nButton, oConfig, oFlash, sFlash ) {
var oTT = TableTools.fnGetInstance( 'example' );
var nRow = $('#example tbody tr');
oTT.fnDeselect(nRow);
}
}
]
}
} );
$('a.DTTT_button_csv').mousedown(function(){
var oTT = TableTools.fnGetInstance( 'example' );
var nRow = $('#example tbody tr');
oTT.fnSelect(nRow);
});
} );
回答2:
I used this solution and it worked. Try this:
<script>
$(document).ready(function() {
var table = $('#example').DataTable( {
"pagingType": "full_numbers",
"iDisplayLength": 10,
"dom": 'T<"clear">lfrtip',
"oTableTools": {
"aButtons": [
{'sExtends':'copy',
"oSelectorOpts": { filter: 'applied', order: 'current' },
},
{'sExtends':'xls',
"oSelectorOpts": { filter: 'applied', order: 'current' },
},
{'sExtends':'print',
"oSelectorOpts": { filter: 'applied', order: 'current' },
}
]
},
});
});
</script>
回答3:
You may set the selection of the page to current page for specific export.
Ref: http://datatables.net/docs/DataTables/1.9.4/#$
{ "sExtends": "xls", "mColumns": "visible", "oSelectorOpts": { page: "current" } }
回答4:
If you are using flash to export, need to mention swf path to work.
$("#example").dataTable( {
"sDom": 'T<"clear">lfrtip',
"oTableTools": {
"sSwfPath": "Path to your copy_csv_xls_pdf.swf files comes with TableTools",
"aButtons": [
{
"sExtends": "copy",
"sButtonText": "Copy to clipboard",
"oSelectorOpts": { filter: "applied", order: "current" }
},
{
"sExtends": "csv",
"sButtonText": "Export to CSV",
"oSelectorOpts": { filter: "applied", order: "current" }
},
{
"sExtends": "print",
"sButtonText": "Print",
"oSelectorOpts": { filter: "applied", order: "current" }
}
]
}
} );
There are few additional options also available to aButtons object.
"mColumns": [1, 2,...] - List of columns to include in export result
"sTitle": "filename" - desire filename for export file
------------------Update---------------------------
In the newer version of datatable - datatableTools is retired
Please use buttons extension
buttons: [
{
extend: 'copyHtml5',
exportOptions: {
columns: [ 0, ':visible' ]
}
},
{
extend: 'excelHtml5',
exportOptions: {
columns: ':visible'
}
},
{
extend: 'pdfHtml5',
exportOptions: {
columns: [ 0, 1, 2, 5 ]
}
},
]
来源:https://stackoverflow.com/questions/23912100/jquery-datatables-tabletools-export-only-visible-rows