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

js下载功能(JS table下载)

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

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

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
网站的排名怎么提升(如何做网站) html网页设计毕业论文(html5论文参考文献合集)