首页IT科技js下载功能(JS table下载)

js下载功能(JS table下载)

时间2025-05-05 20:21:56分类IT科技浏览3263
导读:时间紧任务重推荐第一种,直接把表格整个拿过来;第二种根据表格的配置和数据进行设置...

时间紧任务重推荐第一种          ,直接把表格整个拿过来;第二种根据表格的配置和数据进行设置

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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
uniapp蓝牙通信(记录–『uni-app、小程序』蓝牙连接、读写数据全过程) 个性化设置 web平台自定义设置(搭建个性化网站,从零开始,快速上手WordPress设置)