Hello,
Trying to save an ArrayList of
Admin Account o4AwA6wGJrQ7WLP6m 4.5
Sergo Saan bjHmCyiDonR7LbnFb 0
Anton Lodat TTFEkaDsnWxnsLA2v 0
to a CSV file.
So far my code looks like
'click .exportMo1': function(event, template){
event.preventDefault();
var data = [];
let query = Meteor.users.find().fetch().map(function(u){
var userFirst = u.profile.name_first;
var userLast = u.profile.name_last;
var currentId = u._id;
try {
var sum = Salaries.findOne({"userId": {$eq: currentId}, "month": {$eq: 1}, "year": {$eq: parseFloat(earningFilterYear.get())} } , {sort:{createdAt: -1}}).amount;
}catch(e){
}
if(!sum)
sum = 0;
console.log(userFirst, userLast, currentId, sum );
//data.push(userFirst+","+userLast+","+sum);
data.push(userFirst+","+userLast+","+sum);
});
var json = Object.assign({}, data);
console.log(json);
var link = document.createElement('a');
var mimeType = 'text/plain';
link.setAttribute('download', "Export_Jan_"+earningFilterYear.get()+".csv");
link.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + data);
link.click();
// saveAs(json, "Export_Jan_"+earningFilterYear.get()+".csv");
Bert.alert('CSV exported successfully', 'success' );
},
Only issue that my code saves it all on a SINGLE line, I need First Name, Last Name, Amount, new Row, Data for person 1, New Row, etc
sbr464
July 13, 2017, 5:20pm
2
Maybe you need to add the \r\n or \n new line character since you are building the csv manually and not using Papa Parse/Unparse lib.
such as
jsonText = '{\r\n\t"text": "' + origText + '"\r\n}', or variant
// Utility Functions for Making the CSV Client Side and initiating the Download.
function makeCSV(data, config) {
if (!config) {
config = {
quotes: false,
delimiter: ",",
newline: "\r\n"
}
}
return Papa.unparse(data, config)
}
function downloadCSV(csv, exportFilename) {
const csvData = new Blob([csv], {
type: 'text/csv;charset=utf-8;'
})
if (navigator.msSaveBlob) {
navigator.msSaveBlob(csvData, exportFilename)
} else {
const link = document.createElement('a')
link.href = window.URL.createObjectURL(csvData)
link.setAttribute('download', exportFilename)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
}
sbr464
July 13, 2017, 5:25pm
3
Meteor.call('getCsvData', formValues, function(err, res) {
if (err) {
console.log('err:', err)
}
if (res) {
const config = lo_.get(template, 'csvConfig', false)
const csv = makeCSV(res, config)
downloadCSV(csv, formValues.filenameFormatted)
$('#collectionForm').trigger("reset")
}
})
What do I parse onto the csv var in the downloadCSV(csv, exportFilename)
Is it the ArrayList or the JSON object? How do I push data onto array string along with the new lines?
var data = [];
let query = Meteor.users.find().fetch().map(function(u){
var userFirst = u.profile.name_first;
var userLast = u.profile.name_last;
var currentId = u._id;
//SOME LOOP
data.push('{\r\n\t"text": "' userFirst+","+userLast+","+sum '"\r\n}');
OR
var json = Object.assign({}, data);
I ended up going with a HTML file instead of CSV
event.preventDefault();
var data = [];
var montnNo = 11;
data.push('<HTML>');
data.push('<HEAD>');
data.push('<Title> Monthly export '+earningFilterYear.get()+' </Title>');
data.push('</HEAD>');
data.push('<BODY BGCOLOR="FFFFFF">');
data.push('<table border="1" cellpadding="5" cellspacing="5" ');
data.push('<tr> <th>Person</th> <th>Salary</th> </tr>')
let query = Meteor.users.find().fetch().map(function(u){
var userFirst = u.profile.name_first;
var userLast = u.profile.name_last;
var currentId = u._id;
try {
var sum = Salaries.findOne({"userId": {$eq: currentId}, "month": {$eq: montnNo}, "year": {$eq: parseFloat(earningFilterYear.get())} } , {sort:{createdAt: -1}}).amount;
}catch(e){
}
if(!sum)
sum = 0;
data.push('<tr>')
data.push('<td> '+userFirst+' '+userLast+' </td>');
data.push('<td> '+sum+' </td>');
data.push('</tr>')
});
data.push('</BODY>');
data.push('</HEAD>');
var link = document.createElement('a');
link.setAttribute('download', "Export_"+montnNo+"_"+earningFilterYear.get()+".html");
link.setAttribute('href', 'data:text/html;charset=utf-8;' + data);
link.click();
Bert.alert('Data exported successfully', 'success' );