tableData数据:
tableData: [
{ column1: '值1-1', column2: '值1-2' },
{ column1: '值2-1', column2: '值2-2' },
{ column1: '值3-1', column2: '值3-2' }
],
exportToCSV() {
// 将表格数据转化为CSV格式
const csvContent = this.convertArrayOfObjectsToCSV(this.tableData);
// 创建下载链接,用于下载生成的CSV文件
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
if (link.download !== undefined) {
const url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', 'data.csv');
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
},
convertArrayOfObjectsToCSV(data) {
const csvRows = [];
const headers = Object.keys(data[0]);
console.log('headers',headers);
// 添加表头
csvRows.push(headers.join(','));
// 添加表格数据
for (const row of data) {
const values = headers.map(header => {
const escapeQuotes = row[header]
return `"${escapeQuotes}"`;
});
csvRows.push(values.join(','));
}
// 返回CSV内容
return csvRows.join('\n');
},
结果如下:
如果想要将表头替换为文字,可以重新遍历循环tableData,例如将【column1】转化为【第一列】
exportToCSV() {
// 将表格数据转化为CSV格式
const keyMapping = {
column1: '第一列',
}
const modifiedTableData =[]
this.tableDatas.map(obj => {
const modifiedObj = {};
for (let key in obj) {
if (keyMapping.hasOwnProperty(key)) {
const newKey = keyMapping[key];
modifiedObj[newKey] = obj[key];
} else {
modifiedObj[key] = obj[key];
}
}
modifiedTableData.push(modifiedObj)
});
const csvContent = this.convertArrayOfObjectsToCSV(modifiedTableData);
// 创建下载链接,用于下载生成的CSV文件
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
if (link.download !== undefined) {
const url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', 'data.csv');
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
},
convertArrayOfObjectsToCSV(data) {
const csvRows = [];
const headers = Object.keys(data[0]);
console.log('headers',headers);
// 添加表头
csvRows.push(headers.join(','));
// 添加表格数据
for (const row of data) {
const values = headers.map(header => {
const escapeQuotes = row[header]
return `"${escapeQuotes}"`;
});
csvRows.push(values.join(','));
}
// 返回CSV内容
return csvRows.join('\n');
},
效果图:
方法二:
使用json2csv 插件