Download a excel file using jquery and ajax

671 views Asked by At

I want to download the file in .xlsx format.Previously I have done this to download csv file. But now I need to change the file format to .xlsx. If I can convert to csv file to xlsx format using a library, it is also fine. There's a data just like

{"device_token":"ABC1234222","device_code":"1234567890","product_name":"DDDDD","domain_name":"SSS"}

So If I use comma(,) as a delimiter this data separated into parts. But I need to put this data into one cell. Anyway to do this.

enter image description here

I have added the code in below

if(response.result.tripDetails.length != 0 || response.result.requestedData.length != 0) {
                   let rows1 = [
                       ["Trip ID", "Trip", "Country", "Add Date Time GMT", "Add Date Time Local", "Remove Date Time GMT", "Remove Date Time Local","Create Date"]
                   ];
                   let rows2 = [
                       ["Request", "Local Time", "GMT Time", "Created Date"]
                   ];
                   response.result.tripDetails.forEach(function (locationTrackingTripData) {
                        let row = [locationTrackingTripData.tripId, locationTrackingTripData.trip, locationTrackingTripData.country, locationTrackingTripData.addDateTimeGMT, locationTrackingTripData.addDateTimeLocal, locationTrackingTripData.removeDateTimeGMT, locationTrackingTripData.removeDateTimeLocal, locationTrackingTripData.createdDate];
                                  rows1.push(row);
                   });
                   response.result.requestedData.forEach(function (locationTrackingRequestedData) {
                        let row = [locationTrackingRequestedData.request, locationTrackingRequestedData.localTime, locationTrackingRequestedData.GMTTime, locationTrackingRequestedData.createdDate];
                                  rows2.push(row);
                   });
                   let excelContent = "data:application/vnd.ms-excel" + rows1.map(e => e.join(",")).join("\n") +('\n\n')+ rows2.map(e => e.join(",")).join("\n");
                   var encodedUri = encodeURI(excelContent);
                   var link = document.createElement("a");
                   link.setAttribute("href", encodedUri);
                   link.setAttribute("download", "locationTrackingDetails.csv");
                   document.body.appendChild(link);
                   link.click();
        }

Hope your support to solve this.

1

There are 1 answers

0
Dulani Maheshi On BEST ANSWER

I solved my issue. So think to share my answer.

I replace the " from "\. I'm getting data as a dynamic one.

var req = {"device_token":"ABC1234222","device_code":"1234567890","product_name":"DDDDD","domain_name":"SSS"}

let requestCol = "\"" + req.replace(/\"/g,'\"\"') + "\"";

whole code

    if(response.result.tripDetails.length != 0 || response.result.requestedData.length != 0) {
                       let rows1 = [
                           ["Trip ID", "Trip", "Country", "Add Date Time GMT", "Add Date Time Local", "Remove Date Time GMT", "Remove Date Time Local","Create Date"]
                       ];
                       let rows2 = [
                           ["Request", "Local Time", "GMT Time", "Created Date"]
                       ];
                       response.result.tripDetails.forEach(function (locationTrackingTripData) {
                            let row = [locationTrackingTripData.tripId, locationTrackingTripData.trip, locationTrackingTripData.country, locationTrackingTripData.addDateTimeGMT, locationTrackingTripData.addDateTimeLocal, locationTrackingTripData.removeDateTimeGMT, locationTrackingTripData.removeDateTimeLocal, locationTrackingTripData.createdDate];
                                      rows1.push(row);
                       });
                       response.result.requestedData.forEach(function (locationTrackingRequestedData) {
                       let requestCol = "\"" + locationTrackingRequestedData.request.replace(/\"/g,'\"\"') + "\"";
                            let row = [requestCol, locationTrackingRequestedData.localTime, locationTrackingRequestedData.GMTTime, locationTrackingRequestedData.createdDate];
                                      rows2.push(row);
                       });
                       let excelContent = "data:application/vnd.ms-excel" + rows1.map(e => e.join(",")).join("\n") +('\n\n')+ rows2.map(e => e.join(",")).join("\n");
                       var encodedUri = encodeURI(excelContent);
                       var link = document.createElement("a");
                       link.setAttribute("href", encodedUri);
                       link.setAttribute("download", "locationTrackingDetails.xlsx");
                       document.body.appendChild(link);
                       link.click();
            }

Instead of above way, We can use this method also. We can replace , from |. So we can get the whole line without breaking the formatting.

let requestCol = req.replace(/\,/g,'|');

{"device_token":"ABC1234222"|"device_code":"1234567890"|"product_name":"DDDDD"|"domain_name":"SSS"}