Jeg vet at det er mange spørsmål av denne typen, men jeg trenger å gjøre dette ved hjelp av JavaScript. Jeg bruker Dojo 1.8
og har all attributtinfo i array, som ser slik ut:
[["name1", "city_name1", ...]["name2", "city_name2", ...]]
Noen ide om hvordan jeg kan eksportere dette til CSV
på klientsiden?
Du kan gjøre dette i innebygd JavaScript. Du må analysere dataene dine til riktig CSV-format slik (forutsatt at du bruker en matrise av matriser for dataene dine slik du har beskrevet i spørsmålet):
const rows = [
["name1", "city1", "some other info"],
["name2", "city2", "more info"]
];
let csvContent = "data:text/csv;charset=utf-8,";
rows.forEach(function(rowArray) {
let row = rowArray.join(",");
csvContent += row + "\r\n";
});
eller den kortere veien (ved hjelp av pilfunksjoner):
const rows = [
["name1", "city1", "some other info"],
["name2", "city2", "more info"]
];
let csvContent = "data:text/csv;charset=utf-8,"
+ rows.map(e => e.join(",")).join("\n");
Deretter kan du bruke JavaScript-funksjonene window.open
og encodeURI
for å laste ned CSV-filen på denne måten:
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "my_data.csv".
Jeg kom hit på jakt etter litt mer samsvar med RFC 4180, og jeg klarte ikke å finne en implementering, så jeg laget en (muligens ineffektiv) for mine egne behov. Jeg tenkte jeg ville dele den med alle.
var content = [['1st title', '2nd title', '3rd title', 'another title'], ['a a a', 'bb\nb', 'cc,c', 'dd"d'], ['www', 'xxx', 'yyy', 'zzz']];
var finalVal = '';
for (var i = 0; i < content.length; i++) {
var value = content[i];
for (var j = 0; j < value.length; j++) {
var innerValue = value[j]===null?'':value[j].toString();
var result = innerValue.replace(/"/g, '""');
if (result.search(/("|,|\n)/g) >= 0)
result = '"' + result + '"';
if (j > 0)
finalVal += ',';
finalVal += result;
}
finalVal += '\n';
}
console.log(finalVal);
var download = document.getElementById('download');
download.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(finalVal));
download.setAttribute('download', 'test.csv');
Forhåpentligvis vil dette hjelpe noen i fremtiden. Dette kombinerer både koding av CSV sammen med muligheten til å laste ned filen. I mitt eksempel på [jsfiddle](
). Du kan laste ned filen (forutsatt HTML 5-nettleser) eller se utdataene i konsollen.UPDATE:UPDATE:
Chrome ser nå ut til å ha mistet muligheten til å navngi filen. Jeg er ikke sikker på hva som har skjedd eller hvordan jeg kan fikse det, men når jeg bruker denne koden (inkludert jsfiddle), heter den nedlastede filen nå download.csv
.
Løsningen fra @Default fungerer perfekt på Chrome (tusen takk for det!), men jeg hadde et problem med IE.
Her er en løsning (fungerer på IE10):
var csvContent=data; //here we load our csv data
var blob = new Blob([csvContent],{
type: "text/csv;charset=utf-8;"
});
navigator.msSaveBlob(blob, "filename.csv")