DataTables.net导出按钮未生成Excel文件

问题描述

单击Datatables.net的“导出”按钮时出现以下错误

以下是我的代码

 $.ajax({
    type: "POST",url: uri,data: JSON.stringify(args),contentType: "application/json;charset=utf-8",success: function (data,status,xhr) {
        //alert("The result is : " + data);            
        if (!data.d) {
            $("#gvCurr").DataTable();
        }
        else {
            $("#gvCurr").DataTable({
                "aaData": JSON.parse(data.d),"bDestroy": true,dom: 'Bfrtip',deferRender: true,"bLengthChange": false,"bPaginate": false,buttons: [
                    {
                        extend: 'excel',text: '<i class="fas fa-file-excel"></i> Export',className: "btn btn-primary",filename: 'DomesticInvoiceReport - ' + moment().format("DD-MMM-YYYY"),}
                ],"columns": [                        
                    { "data": "ProjectNo" },{ "data": "CountryName" },{ "data": "StateName" },{ "data": "SectorName" },{ "data": "CoOrdName" },{ "data": "Curr1" },{ "data": "InvoiceNo_1" },{ "data": "InvoiceDate_1" },{ "data": "Month_1" },{ "data": "Year_1" },{ "data": "TotalFee_1" },{ "data": "EscalationAmt_1" },{ "data": "CurrentOPEAmt_1" },{ "data": "CGSTPerc" },{ "data": "SGSTPerc" },{ "data": "TotalTaxPerc_1" },{ "data": "TotalTaxAmt_1" },{ "data": "CurrentInvoiceAmt_1" },{
                        mRender: function (data,type,row) {
                            if (row.IsWithheld_1 == "" || row.IsWithheld_1 == 0)
                                return 'No';
                        }
                    },{ "data": "Withheldamt_1" },{ "data": "BalanceInHandUptoThisInv_1" }
                    
                ],"order": [[0,"asc"]]
            });
        }
        $("#entry").hide();
        $("#list").show();
    },error: function (xhr) {
        alert(xhr.responseText);
    }
});

如果您看到的是int代码,如果我将{“ data”:“ Year_1”}之后的列注释掉,则它正在生成excel文件,如果在此之后包含列,则会给我显示以下错误附加的图像。因此,这不是代码错误或js文件顺序错误的问题

我已将这些设置包含在web.config

<httpRuntime targetFramework="4.7.2" maxRequestLength="2147483647" requestLengthdiskThreshold="2097152" executionTimeout="240" />    

<jsonSerialization maxJsonLength="2147483644" />

检索时正确显示记录。在导出时,它给出了错误。我不确定我在这里想念什么。

ExportError

解决方法

我相信您有这个问题:

{
  mRender: function (data,type,row) {
     if (row.IsWithheld_1 == "" || row.IsWithheld_1 == 0)
         return 'No';
     }
},
  1. 渲染回调适用于列定义,它们不能单独存在
  2. 必须返回一个值,如果返回undefined,则会得到“ trim不是函数

正确的方法是

{ 
  data: "IsWithheld_1",render: function(data,row) {
    return (data === '' || data == 0) ? 'No' : ''
  }
}