[英]Downloading a CSV of file using Vue and JS
我有一個名為csvdata
的字段,其中包含以下格式的數組:
[
[1,2,3],
[4,5,6],
[7,8,9]
]
我正在嘗試下載此數據的 CSV 文件。 我正在使用 Vue,所以它看起來像:
<button type="button" class="btn btn-info action_btn" v-on:click="downloadCSVData">
Download
</button>
downloadCSVData
的CSVData function 應該是什么樣子?
我認為您可以創建一個this
的方法,假設csvdata
是您的 Vue 組件中可以訪問的數據屬性:
downloadCSVData() => { let csv = 'Put,Column,Titles,Here\n'; this.csvdata.forEach((row) => { csv += row.join(','); csv += "\n"; }); const anchor = document.createElement('a'); anchor.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv); anchor.target = '_blank'; anchor.download = 'nameYourFileHere.csv'; anchor.click(); }
let data = [[1,2,3], [4,5,6], [7,8,9]].join('\r\n').toString()
)let encoded_data = btoa(data)
)let iframe = document.createElement('iframe'); iframe.src = "data:application/octet-stream;base64," + encoded_data
document.body.appendChild(iframe)
。但是,這種方法有一些缺點:
更好的方法是在服務器上創建一個臨時文件並為用戶提供該文件的鏈接。
這是在 vue 中下載 csv 文件的工作代碼
此示例代碼將對象數組轉換為帶有標題的完美 csv 文件調用 function exportCSVFile(headers, items, fileTitle)
headers = { name: 'Name' // 格式化的列名,age: 'Age' }
items = [ { name: 'Joo', age: 21 }, { name: 'ant', age: 20 } ]
文件名 = 'somefilename.csv'
function convertToCSV(objArray) {
const array = typeof objArray !== 'object' ? JSON.parse(objArray) : objArray;
let str = '';
for (let i = 0; i < array.length; i++) { // eslint-disable-line
let line = '';
for (const index in array[i]) { // eslint-disable-line
if (line !== '') line += ',';
line += array[i][index];
}
str += line + '\r\n'; // eslint-disable-line
}
return str;
}
function exportCSVFile(headers, items, fileTitle) {
if (headers) {
items.unshift(headers);
}
const jsonObject = JSON.stringify(items);
const csv = convertToCSV(jsonObject);
const exportedFilenmae = fileTitle + '.csv' || 'export.csv'; // eslint-disable-line
const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, exportedFilenmae);
} else {
const link = document.createElement('a');
if (link.download !== undefined) {
const url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', exportedFilenmae);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
export default exportCSVFile;
如果給定的值是二維數組,只需使用這個 function
function downloadCSVData () {
var array = [
[1,2,3],
[4,5,6],
[7,8,9]
];
var str = '';
for (var i = 0; i < array.length; i++) {
let line = '';
line = array[i].join(",");
str += line + '\r\n';
}
var blob = new Blob([str], { type: 'text/csv;charset=utf-8;' });
var link = document.createElement('a');
var url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', 'csvfilename.csv');
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.