Žinau, kad yra daug tokio pobūdžio klausimų, bet man reikia tai padaryti naudojant "JavaScript". Naudoju Dojo 1.8
ir turiu visą atributų informaciją masyve, kuris atrodo taip:
[["name1", "city_name1", ...]["name2", "city_name2", ...]]
Ar žinote, kaip galėčiau tai eksportuoti į CSV
kliento pusėje?
Tai galite padaryti "JavaScript" gimtojoje kalboje. Turėsite išrinkti savo duomenis į tinkamą CSV formatą (darant prielaidą, kad savo duomenims naudojate masyvų masyvą, kaip aprašėte klausime):
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";
});
arba trumpesniu būdu (naudojant rodyklių funkcijas):
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");
Tada galite naudoti JavaScript's window.open
ir encodeURI
funkcijas, kad atsisiųstumėte CSV failą taip:
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".
Atėjau čia ieškodamas šiek tiek daugiau RFC 4180 atitikimo ir man nepavyko rasti įgyvendinimo, todėl aš padariau (galbūt neveiksmingą) savo reikmėms. Pagalvojau, kad pasidalinsiu juo su visais.
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');
Tikiuosi, kad tai kam nors padės ateityje. Tai apjungia CSV kodavimą kartu su galimybe atsisiųsti failą. Mano pavyzdyje [jsfiddle](
). Galite atsisiųsti failą (darant prielaidą, kad naršyklė yra HTML 5) arba peržiūrėti išvestį konsolėje.UPDATE:
Atrodo, kad dabar "Chrome" prarado galimybę pavadinti failą. Nežinau, kas atsitiko ir kaip tai ištaisyti, bet kai tik naudoju šį kodą (įskaitant jsfiddle), atsisiųstas failas dabar pavadinamas download.csv
.
Sprendimas iš @Default puikiai veikia "Chrome" (ačiū labai už tai!), bet turėjau problemų su IE.
Štai sprendimas (veikia 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")