Search This Blog

Monday, July 6, 2020

Solution - Export to CSV not working IE edge - JavaScript


function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {
            //If JSONData is not an object then JSON.parse will parse the JSON string in an Object
            var arrData = typeof JSONData != 'object' ? jQuery.parseJSON(JSONData) : JSONData;

            var CSV = '';
            //Set Report title in first row or line

            //  CSV += ReportTitle + '\r\n\n';

            //This condition will generate the Label/Header
            if (ShowLabel) {
                var row = "";

                //This loop will extract the label from 1st index of on array
                for (var index in arrData[0]) {
                    if (index != 'Edit' && index != 'ResolvedDate1' && index != 'ETA' && index != 'NotifyTo' && index != 'KpiDescription' ) {
                        //Now convert each value to string and comma-seprated
                        row += index + ',';
                    }

                }

                row = row.slice(0, -1);

                //append Label row with line break
                CSV += row + '\r\n';
            }

            //1st loop is to extract each row
            for (var i = 0; i < arrData.length; i++) {
                var row = "";

                //2nd loop will extract each column and convert it in string comma-seprated
                for (var index in arrData[i]) {
                    if (index != 'Edit' && index != 'ResolvedDate1' && index != 'ETA' && index != 'NotifyTo' && index != 'KpiDescription' ) {
                        row += '"' + arrData[i][index] + '",';
                    }
                }

                row.slice(0, row.length - 1);

                //add a line break after each row
                CSV += row + '\r\n';
            }

            if (CSV == '') {
                alert("Invalid data");
                return;
            }

            //Generate a file name
            var fileName = ReportTitle;
            //this will remove the blank-spaces from the title and replace it with an underscore
            fileName = ReportTitle.replace(/ /g"_");

            //Initialize file format you want csv or xls
            //var uri = 'data:text/csv;charset=utf-8,' + escape(CSV);
            var uri; //= 'data:application/csv;charset=utf-8,' + encodeURIComponent(CSV);
            
            if(navigator.msSaveBlob) { // IE 10+
                         var blob = new Blob([CSV], {
                                      "type""text/csv;charset=utf8;"          
                            });
                        navigator.msSaveBlob(blob, fileName + ".csv");                    }
                    else
                    {
                        uri = 'data:application/csv;charset=utf-8,' + encodeURIComponent(CSV);  
                    }
            // Now the little tricky part.
            // you can use either>> window.open(uri);
            // but this will not work in some browsers
            // or you will not get the correct file extension    

            //this trick will generate a temp <a /> tag
            var link = document.createElement("a");
            link.href = uri;

            //set the visibility hidden so it will not effect on your web-layout
            link.style = "visibility:hidden";
            link.download = fileName + ".csv";

            //this part will append the anchor tag and remove it after automatic click
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }

function DownloadReport() {

$.ajax({

type: "POST",

url: "/Knowledge/DownloadKIReport",

contentType: "application/json; charset=utf-8",

datatype: 'json',

data: JSON.stringify({}),

success: function (result) {

if (result == ")

return;

else

JSONToCSVConvertor(result, "TestReport", true);

},

error: function (error, a) {

alert(‘Error in retrieving data..’);

}

});

}
        $(".excelexport").on("click"function (e) {
           DownloadReport();
              });


No comments:

Post a Comment