js下载功能(JS table下载)
导读:时间紧任务重推荐第一种,直接把表格整个拿过来;第二种根据表格的配置和数据进行设置...
时间紧任务重推荐第一种 ,直接把表格整个拿过来;第二种根据表格的配置和数据进行设置
1 、html下载 ,原生JS
优点:快
缺点:时间会被转义 ,样式会受页面CSS影响
2 、XLSX
async downTable(type: number) {
let tableColumn: any[] = [], tableData: any[] = [], fileName = ;
if (type === 1) {
tableColumn = this.trendSaleColumn;
tableData = this.trendSaleData;
fileName = 售前介入趋势(销售).xlsx;
}else if (type === 3) {
await this.getPreSalesConvertInfo(this.transferSaleType, 1);
tableColumn = this.transferSaleColumn;
tableData = this.transferSaleData;
fileName = 售前部门转化(销售).xlsx;
}
let data: any[] = [[]];
tableColumn.forEach((item: any) => {
data[0].push(item.label);
})
tableData.forEach((item: any) => {
let row: any[] = [];
tableColumn.forEach((column: any) => {
row.push(item[column.prop]);
})
data.push(row);
})
const sheet = XLSX.utils.aoa_to_sheet(data); //合并单元格配置 ,需要计算需要合并的行列数
if (type === 3 || type === 4) {
if (this.productType[1] > 0 && this.productType[2] > 0) {
sheet[!merges] = [
{s: {r: 1, c: 0}, e: {r: this.productType[1], c: 0}},//s表示开始 ,e表示结束 ,r表示行 ,c表示列;
{s: {r: this.productType[1] + 1, c: 0}, e: {r: this.productType[2], c: 0}}
];
} else if (this.productType[1] > 0 || this.productType[2] > 0) {
sheet[!merges] = [
{s: {r: 1, c: 0}, e: {r: this.productType[1] || this.productType[2], c: 0}},//s表示开始 ,e表示结束 ,r表示行 ,c表示列;
];
}
}
// 通过创建a标签实现
const link = document.createElement("a");
link.href = URL.createObjectURL(sheet2blob(sheet));
// 对下载的文件命名
link.download = fileName;
link.click();
}
sheet2blob(sheet: any, sheetName: string = sheet1) {
const workbook: any = {
SheetNames: [sheetName],
Sheets: {}
};
workbook.Sheets[sheetName] = sheet;
// 生成excel的配置项
const wopts: any = {
bookType: xlsx, // 要生成的文件类型
bookSST: false, // 是否生成Shared String Table ,官方解释是 ,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type: binary
};
const wbout = XLSX.write(workbook, wopts);
const blob = new Blob([s2ab(wbout)], {type: "application/octet-stream"});
// 字符串转ArrayBuffer
function s2ab(s: any) {
const buf = new ArrayBuffer(s.length);
const view = new Uint8Array(buf);
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
return blob;
}
优点:单元格内容可控 ,可以设置单元合并等XLSX支持的配置
缺点:复杂表格需要计算合并单元格的位置和数量 ,比如多级表头
声明:本站所有文章,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!