2023-02-13 21:11:16 +08:00
|
|
|
|
export function exportCsv(filename: string, columns: string[], datas: []) {
|
|
|
|
|
|
// 二维数组
|
|
|
|
|
|
const cvsData = [columns];
|
|
|
|
|
|
for (let data of datas) {
|
|
|
|
|
|
// 数据值组成的一维数组
|
|
|
|
|
|
let dataValueArr: any = [];
|
|
|
|
|
|
for (let column of columns) {
|
|
|
|
|
|
let val: any = data[column];
|
2023-08-29 21:31:08 +08:00
|
|
|
|
if (val == null || val == undefined) {
|
|
|
|
|
|
dataValueArr.push('');
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-02-13 21:11:16 +08:00
|
|
|
|
if (typeof val == 'string' && val) {
|
2023-07-06 20:59:22 +08:00
|
|
|
|
// csv格式如果有逗号,整体用双引号括起来;如果里面还有双引号就替换成两个双引号,这样导出来的格式就不会有问题了
|
2023-02-13 21:11:16 +08:00
|
|
|
|
if (val.indexOf(',') != -1) {
|
|
|
|
|
|
// 如果还有双引号,先将双引号转义,避免两边加了双引号后转义错误
|
|
|
|
|
|
if (val.indexOf('"') != -1) {
|
2023-07-06 20:59:22 +08:00
|
|
|
|
val = val.replace(/\"/g, '""');
|
2023-02-13 21:11:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
// 再将逗号转义
|
|
|
|
|
|
val = `"${val}"`;
|
|
|
|
|
|
}
|
2023-08-29 21:31:08 +08:00
|
|
|
|
dataValueArr.push(val + '\t');
|
2023-02-13 21:11:16 +08:00
|
|
|
|
} else {
|
2023-08-29 21:31:08 +08:00
|
|
|
|
dataValueArr.push(val + '\t');
|
2023-02-13 21:11:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
cvsData.push(dataValueArr);
|
|
|
|
|
|
}
|
|
|
|
|
|
const csvString = cvsData.map((e) => e.join(',')).join('\n');
|
2023-11-18 15:22:25 +08:00
|
|
|
|
exportFile(`${filename}.csv`, csvString);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function exportFile(filename: string, content: string) {
|
2023-02-13 21:11:16 +08:00
|
|
|
|
// 导出
|
|
|
|
|
|
let link = document.createElement('a');
|
|
|
|
|
|
let exportContent = '\uFEFF';
|
2023-11-18 15:22:25 +08:00
|
|
|
|
let blob = new Blob([exportContent + content], {
|
2023-08-25 10:20:32 +08:00
|
|
|
|
type: 'text/plain;charset=utf-8',
|
2023-02-13 21:11:16 +08:00
|
|
|
|
});
|
2023-11-18 15:22:25 +08:00
|
|
|
|
link.id = 'download-file';
|
2023-02-13 21:11:16 +08:00
|
|
|
|
link.setAttribute('href', URL.createObjectURL(blob));
|
2023-11-18 15:22:25 +08:00
|
|
|
|
link.setAttribute('download', `${filename}`);
|
2023-02-13 21:11:16 +08:00
|
|
|
|
document.body.appendChild(link);
|
|
|
|
|
|
link.click();
|
2023-07-06 20:59:22 +08:00
|
|
|
|
}
|