<Button onClick={exportData}>数据导出</Button>
function exportData() {
const { conditionData } = toJS(store);
const { title } = toJS(prepareStore);
const name = title ?? '新图表';
if (conditionData.length === 0) return message.warning('请先拖拽字段!');
confirm({
title: '数据导出',
content: '确认导出当前工作区数据?',
onOk() {
downloadDataAsCSV(conditionData, name, 'csv');
},
onCancel() {
console.log('Cancel');
},
});
}
export function downloadDataAsCSV(source, fileName, type = 'csv') {
let csvRows = [];
if (!Array.isArray(source)) {
return;
}
for (let j = 0; j < source.length; j++) {
csvRows.push(source[j].join(','));
}
let csvString = csvRows.join('\n');
// BOM的方式解决EXCEL乱码问题
const BOM = '\uFEFF';
csvString = BOM + csvString;
let downloadLink = document.createElement('a');
downloadLink.href = `data:attachment/${type},` + encodeURI(csvString);
downloadLink.download = fileName + `.${type}` || `temp.${type}`;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
source的数据结构(二维数组):
后记:测试测出来#不能被正常导出,所以应将 encodeURI 换成 encodeURIComponent