You need to sign in to do that
Don't have an account?
Sidhartha Mohapatra 16
split semicolon separated values into multiple rows with other data lightning javascript
i have this below result from apex
i am able to generate csv as below -
i am want to create a csv file out of the above data, basically splitting semicolon separated values into multiple rows with other data
JS -
result = [ { "Id":"0012v00002InPVmAAN", "Test__c":"India; Africa; Mombasa", "Test1__c":"AFR; TFR; GFR" } ]
i am able to generate csv as below -
"Id,Test__c,Test1__c "0012v00002InPVmAAN","India; Africa; Mombasa","AFR; TFR; GFR"
i am want to create a csv file out of the above data, basically splitting semicolon separated values into multiple rows with other data
"Id,Test__c,Test1__c "0012v00002InPVmAAN","India","AFR" "0012v00002InPVmAAN","Africa","TFR" "0012v00002InPVmAAN","Mombasa","GFR"
JS -
downloadCSVFile() { let rowEnd = '\n'; let csvString = ''; // this set elminates the duplicates if have any duplicate keys let rowData = new Set(); // getting keys from data this.data.forEach(function (record) { Object.keys(record).forEach(function (key) { rowData.add(key); }); }); // Array.from() method returns an Array object from any object with a length property or an iterable object. rowData = Array.from(rowData); // splitting using ',' csvString += rowData.join(','); csvString += rowEnd; // main for loop to get the data based on key value for (let i = 0; i < this.data.length; i++) { let colValue = 0; // validating keys in data for (let key in rowData) { if (rowData.hasOwnProperty(key)) { // Key value // Ex: Id, Name let rowKey = rowData[key]; // add , after every value except the first. if (colValue > 0) { csvString += ','; } // If the column is undefined, it as blank in the CSV file. let value = this.data[i][rowKey] === undefined ? '' : this.data[i][rowKey]; csvString += '"' + value + '"'; colValue++; } } csvString += rowEnd; }
Greetings to you!
You can use following methods to download csv file and convert list of objects to csv string.
// method to download csv file
downloadCsv : function(component,event,helper){
// get the Records list from result (which is return from apex)
var stockData = component.get("v.result");
// call the helper function which "return" the CSV data as a String
var csv = helper.convertArrayOfObjectsToCSV(component,stockData);
if (csv == null){return;}
// ####--code for create a temp. <a> html tag [link tag] for download the CSV file--####
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
hiddenElement.target = '_self'; //
hiddenElement.download = 'ExportData.csv'; // CSV file Name* you can change it.[only name not .csv]
document.body.appendChild(hiddenElement); // Required for FireFox browser
hiddenElement.click(); // using click() js function to download csv file
}
// Method to convert ListofObjects to string as csv file
convertArrayOfObjectsToCSV : function(component,objectRecords){
// declare variables
var csvStringResult, counter, keys, columnDivider, lineDivider;
// check if "objectRecords" parameter is null, then return from function
if (objectRecords == null || !objectRecords.length) {
return null;
}
// store ,[comma] in columnDivider variabel for sparate CSV values and
// for start next line use '\n' [new line] in lineDivider varaible
columnDivider = ',';
lineDivider = '\n';
// in the keys valirable store fields API Names as a key
// this labels use in CSV file header
keys = ['Name','Account Number','Type','Account Source','Phone' ];
csvStringResult = '';
csvStringResult += keys.join(columnDivider);
csvStringResult += lineDivider;
for(var i=0; i < objectRecords.length; i++){
counter = 0;
for(var sTempkey in keys) {
var skey = keys[sTempkey] ;
// add , [comma] after every String value,. [except first]
if(counter > 0){
csvStringResult += columnDivider;
}
csvStringResult += '"'+ objectRecords[i][skey]+'"';
counter++;
} // inner for loop close
csvStringResult += lineDivider;
}// outer main for loop close
// return the CSV formate String
return csvStringResult;
}
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks and Regards,
Deepali Kulshrestha