从 jQuery 数据表中的导出中排除列

Posted

技术标签:

【中文标题】从 jQuery 数据表中的导出中排除列【英文标题】:Exclude column from export in jQuery Datatables 【发布时间】:2016-08-14 07:32:31 【问题描述】:

我正在使用 jQuery 数据表 1.10.11,它的导出按钮功能如 here 所述:

我想跳过最后一列导出到 Excel 文件,因为该列中有编辑/删除按钮。我的列是动态生成的,所以我不能使用以下方法:

    $('#reservation').DataTable(
    dom: 'Bfrtip',
    buttons: [
        
            extend: 'excel',
            text: 'Export Search Results',
            className: 'btn btn-default',
            exportOptions: 
                columns: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
            
        
    ]
);

我知道这个问题被问了多次,但没有一个对我有用,可能是版本问题。

【问题讨论】:

【参考方案1】:

尝试使用排除 columns 选项最后一列的 CSS 选择器。

$('#reservation').DataTable(
   dom: 'Bfrtip',
   buttons: [
      
         extend: 'excel',
         text: 'Export Search Results',
         className: 'btn btn-default',
         exportOptions: 
            columns: 'th:not(:last-child)'
         
      
   ]
);

【讨论】:

【参考方案2】:

你可以添加一个类:

<th class='notexport'>yourColumn</th>

然后按类别排除:

$('#reservation').DataTable(
   dom: 'Bfrtip',
   buttons: [
   
        extend: 'excel',
        text: 'Export Search Results',
        className: 'btn btn-default',
        exportOptions: 
            columns: ':not(.notexport)'
        
    ]
);

【讨论】:

老实说,这是你们大多数人都在寻找的答案。它更具动态性,允许您只需将一个类添加到您不想导出的任何列,这对于许多用例都非常有用。当您有多个导出选项时,这也可以让您更好地控制。 @CodeSpent 是的,我同意这一点。非常适合我的情况【参考方案3】:

我只是想我会添加这个,因为接受的答案只有在您还没有包含其他内容(例如可见列)时才能排除。

为了只包括除最后一列之外的可见列,以便您可以将其与列可见性按钮一起使用,请使用

$('#reservation').DataTable(
    dom: 'Bfrtip',
    buttons: [
    
        extend: 'excel',
        text: 'Export Search Results',
        className: 'btn btn-default',
        exportOptions: 
            columns: ':visible:not(:last-child)'
        
    ]
);

如果你想显式添加你自己的类:

    $('#reservation').DataTable(
    dom: 'Bfrtip',
    buttons: [
    
        extend: 'excel',
        text: 'Export Search Results',
        className: 'btn btn-default',
        exportOptions: 
            columns: ':visible:not(.notexport)'
        
    ]
);    

【讨论】:

非常感谢!!代码:columns: ':visible:not(.notexport)' 一个善于思考的人!这是非常需要的!谢谢【参考方案4】:

适用于 Excel、csv 和 pdf

dom: 'lBfrtip',
buttons: [
    
        extend: 'excelhtml5',
        text: '<i class="fa fa-file-excel-o"></i> Excel',
        titleAttr: 'Export to Excel',
        title: 'Insurance Companies',
        exportOptions: 
            columns: ':not(:last-child)',
        
    ,
    
        extend: 'csvHtml5',
        text: '<i class="fa fa-file-text-o"></i> CSV',
        titleAttr: 'CSV',
        title: 'Insurance Companies',
        exportOptions: 
            columns: ':not(:last-child)',
        
    ,
    
        extend: 'pdfHtml5',
        text: '<i class="fa fa-file-pdf-o"></i> PDF',
        titleAttr: 'PDF',
        title: 'Insurance Companies',
        exportOptions: 
            columns: ':not(:last-child)',
        ,
    ,
]

【讨论】:

谢谢,你发布了完整的代码,所以对我们来说更快。【参考方案5】:

javascript 部分:

$(document).ready(function() 
$('#example').DataTable( 
    dom: 'Bfrtip',
    buttons: [
        
            extend: 'print',
            exportOptions: 
                // columns: ':visible' or
                columns: 'th:not(:last-child)'
            
        ,
        'colvis'
    ],
    columnDefs: [ 
        targets: -1,
        visible: false
     ]
 );

);

以及要包含的js文件:

https://code.jquery.com/jquery-3.3.1.js
https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js
https://cdn.datatables.net/buttons/1.5.2/js/dataTables.buttons.min.js
https://cdn.datatables.net/buttons/1.5.2/js/buttons.print.min.js
https://cdn.datatables.net/buttons/1.5.2/js/buttons.colVis.min.js

希望这对您有所帮助。 谢谢。

【讨论】:

以上是关于从 jQuery 数据表中的导出中排除列的主要内容,如果未能解决你的问题,请参考以下文章

在 Datatables Tabletools 中从导出中排除列

跨两个数据库导入/导出表的某些列并排除 mysql 中的重复电子邮件

用于导出的 jQuery DataTables 格式输出,排除按钮

在引导表中如何隐藏/排除导出列

使用jQuery从数组数组动态生成<table>时如何排除ID列

Primefaces:从p:dataTable中的行选择中排除列