1

I'm very new to salesforce and lwc , i'm trying to Export some static and some dynamic data in a csv using LWC Salesforce and succeeded in that( except with a new column has been added from the second line .) ![enter image description here

In the above image : There are two issues i'm facing :

  1. First row (A1) name needs to be just Name . i have passed just 'Name',You can see in below code s=[] ( Undefined is added automatically ).Due to the lwc example i'm using . I need some help in removing unwanted code.
  2. From the second row , Unwanted column is being added, Whenever i used '\n' to change row . The following is the lwc code**
****/*  Row 1 : Static Data (so adding directly in array S[]) */****
exportToCSV() {  
    let s =["Name", "Example Data", "Field Type", "Data Category", "Data Category Definition", "Data Classification"]; 
              ==>  [this.columnHeaderLists1] ==> Data from Apex 
    for(let d in this.columnHeaderLists1){
        s.push("\"" + this.columnHeaderLists1[d] + "\"");
    }
    s.push("\n");
    
****/*  Row 2 :Dynaimic data fetching from Apex using Lwc Wire */****
    for(let key in this.columnHeaderList){
        let t;
              ==> [this.columnHeaderLists] ==> Data from Apex
        t = this.columnHeaderList[key].subcolumn;
        for(let key in t){
            s.push("\"" + t[key] + "\"");
        }
    }
    s.push("\n");
}
      
//Passing the s[] to column headers 
let columnHeader = s;

**[ I'm not using the below code , which requires a pojo*/
   /* Our code has data from multiple queries so , it is complex to add a pojo and utilize the below code ]**
let jsonKeys = [];
var jsonRecordsData = []; 
console.log('length ',jsonRecordsData.length);
let csvIterativeData;  
let csvSeperator  
let newLineCharacter;  
csvSeperator = ",";  
newLineCharacter = "\n";  
// csvIterativeData = "";  
csvIterativeData += columnHeader.join(csvSeperator);  
csvIterativeData += newLineCharacter;  
for (let i = 0; i < jsonRecordsData.length; i++) {  
    let counter = 0;  
    for (let iteratorObj in jsonKeys) {  
        let dataKey = jsonKeys[iteratorObj];  
        if (counter > 0) {  csvIterativeData += csvSeperator;  }  
        if (  jsonRecordsData[i][dataKey] !== null && jsonRecordsData[i][dataKey] !== undefined ) { 
            csvIterativeData += '"' + jsonRecordsData[i][dataKey] + '"';
        } else {  
            csvIterativeData += '""';  
        }  
        counter++;  
    }  
    csvIterativeData += newLineCharacter;  
}  
console.log("csvIterativeData", csvIterativeData);  
this.hrefdata = "data:text/csv;charset=utf-8," + encodeURI(csvIterativeData);  
}
}

Exaplanation:

We are basically passing the data to array S[] (using s.push) . We have pushed data to row . After 1 row of data we are using '\n' to go new line . . Right after using '\n' cursor is moving to next row and also an empty column is being created in the next row. (Can be observed from row:2)

  1. In row2 we need to pass data from A2 . But Due to empty column . Data is populating from B2. I need help in resolving this . Is that a right approach of passing values to the csv Desired Out-put : enter image description here Any suggestion is appreciated , Thankyou .
4
  • Hi Tarun, Please use the edit tools to format your code properly. Commented Nov 6, 2020 at 8:25
  • Could you edit to show an example of what a complete outcome is supposed to look like? I don't understand this multi-level header thing you have going on.
    – David Reed
    Commented Nov 6, 2020 at 15:06
  • Note also that your CSV generation is missing large parts of the CSV spec (such as it is). You are failing to handle embedded quotes and commas, in particular. Consider using a popular library like PapaParse instead of reinventing the wheel.
    – David Reed
    Commented Nov 6, 2020 at 15:07
  • Hi , Thanks for the response . Apologize for not explaining it right , i have edited and added explanation of what is happenning and what is desired output . Any suggestion would be helpful . Thankyou.
    – Tarun teja
    Commented Nov 6, 2020 at 18:47

0

You must log in to answer this question.