【问题标题】:Datatable set title from response data list specific column value in excel exportexcel导出中响应数据列表特定列值的数据表集标题
【发布时间】:2020-08-21 20:37:02
【问题描述】:

我正在使用 jquery Datatable,并且我正在正确获取我的数据列表。我正在返回一个列表数据。现在我想从我的返回列表中设置 excel 标题。我有一列返回我的客户的name,现在我想在导出excel时打印我的第一行第二列值Imean客户名称,如列表(data[0].Name)。但我无法将第一行第二列值设置为我的 excel 标题。谁能帮我做这件事?

var clientN;
$(document).ready(function () {
    //datatable configuration
    debugger;
    var test = [];
    
    var citDatatable2 = $("#citCollectionTable2").DataTable({
        //"dom": 'Blfrtip',
        "dom": '<"row"fr<"ml-auto"B>> <"row" <"ml-auto mt-2"l>>' +
            't' +
            `<i><p>`,
        "oLengthChange": true,
        "oLanguage": {
            "sSearch": "Search",
            "sProcessing": "Fetching Data. Please Wait..."
        },
        "ajax": {
            "url": "GetCollections",
            "type": "POST",
            "datatype": "json",
            "data": function (data) {
                var startDate = $("#FromDate").val();
                var endDate = $("#ToDate").val();               
            }, 
           
            dataFilter: function (response) {
                test = response;
                JSON.stringify(test);
                clientN = response.data[0].Name;
                return response
            },
        },
        "columnDefs": [
            {
                "targets": -1,
                "data": null,
                "defaultContent": "<button>Click!</button>"
            }
        ],
        "columns": [
            {
                "data": "cId",
                "name": "CId",
            },
            {
                data: "name", name: "Name",
                
            },          
        ],

        "serverSide": "true",
        "processing": "true",
        "language": {
            "processing": "Please wait..."
        },
        "buttons": ["excel", {

            extend: 'excelHtml5',
            text: 'Sauver en tant que fichier Excel',
            title: "Client Name" +  clientN // **`I want to print the client name here`**
        }, "csv"],
        "initComplete": function () {
            $('.buttons-excel').html('<i class="fas fa-file-excel"></i> Export to Excel');
            $('.buttons-excel').removeClass("dt-button").addClass("btn btn-primary");
            $('.buttons-csv').html('<i class="fas fa-file-excel"></i> Export to CSV');
            $('.buttons-csv').removeClass("dt-button").addClass("btn btn-primary");
        },      
    })

 });

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    您可以使用函数获取第一行和第二列单元格的内容 - 并将该函数的结果传递给 title 属性。

    title: function() {
       var selectedCell = $('#citCollectionTable2').dataTable().api().cell(0, 1).data();
       return "Client Name: " + selectedCell;
    }
    

    行和列是零索引的,所以在这种情况下我们使用cell(0, 1)

    这将导致您的 Excel 文件在工作表的第 1 行的合并单元格中显示此数据。

    这里有一点很重要:行索引基于数据首次加载到 DataTables 中的顺序 - 不一定是数据在表中显示的顺序(在排序和过滤之后) )。

    【讨论】:

    • 非常感谢。如果我想使用新行添加多个标题,它不起作用。它打印同一行。如何设置新行? title: function() { var selectedCell = $('#citCollectionTable2').dataTable().api().cell(0, 1).data(); var selectedId = $('#citCollectionTable2').dataTable().api().cell(0, 3).data(); return "Client Name: " + selectedCell + '/n' + selectedId }
    • 您可以使用 "\r\n" (注意使用退格键!)作为字符串来表示新行(回车 + 换行) - 但是当我尝试将其插入我的标题时文本,它被添加到 Excel 中,但直到我手动单击 Excel 单元格时它才被“激活”。然后我还必须手动调整行高才能看到第二行。不满意。所以,不——不幸的是,我不知道有什么好的、简单的方法来做到这一点。
    • 一种更复杂的方法是不使用title 选项,而是将新行插入 Excel 工作表的顶部(将所有现有数据向下移动),然后将您的自定义标题数据写入这些行。在this answer 中可以看到一个示例。这涉及操作电子表格使用的底层 XML。
    猜你喜欢
    • 2015-04-04
    • 2019-10-09
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多