前端表格导出为excel方法合集

近来遇到了前端表格保存为excel的需求,通过查阅多方资料,总结了3种方法,下面一一进行展示,有不正确的地方,望指正。主要包括两种导出方法——纯前端导出和前端接收后端blob文件流导出。

前端接收后端blob文件流导出

本文采用Vue框架和axios请求,简单发送一个get请求,然后导出为excel文件,代码如下:

//excel导出请求函数
excelRequest(){return this.axios({url:'后端数据请求地址',method: 'get',responseType: 'blob', //必须设置为blod,不然不能保存})},//excel导出功能exportExcel(){this.excelRequest().then(res =>{const blob = new Blob([res.data]);const fileName = 'Excel导出功能模板.xlsx';const elink = document.createElement('a');elink.download = fileName;elink.style.display = 'none';elink.href = URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();URL.revokeObjectURL(elink.href); // 释放URL 对象document.body.removeChild(elink);})}

以上方法参考https://blog.csdn.net/zqqyaa/article/details/85617232

纯前端导出excel

导出html中的表格元素

这种方法导出的excel文件只能导出xls文件,虽然也能打开,提示文件损坏,其实质原理是导出html元素。这种方法没有深入的研究,有兴趣的,可以自行了解下。

通过blob.js和Export2Excel.js导出

这两个js文件可以网上自行下载。可根据自己的需求Export2Excel.js中修改代码,设置导出的Excel样式。
第一步、安装依赖包
npm install -S file-saver xlsx
npm install -S xlsx
npm install -D script-loader
cnpm install --save xlsx-style
第二步、将下载好的blod.js和Export2Excel.js文件放在项目中新建一个文件夹中
第三步、全局引入上面的两个文件,我这里是放在src目录下的excel文件夹下,在main.js文件中引入

import Blob from '@/excel/Blob.js'
import Export2Excel from '@/excel/Export2Excel.js'

第四步、修改配置文件,build–>webpack.base.conf.js
resolve对象中的alias对象中添加路径

'excel': path.resolve(__dirname, '../src/excel')

使用xlsx-style的过程中会出现未发现模块的问题,将在\node_modules\xlsx-style\dist\cpexcel.js 807行 的 var cpt = require(’./cpt’ + ‘able’); 改成 var cpt = cptable;
这种方法在本地运行还可以,在服务器端运行可能会出问题,网上有建议自己将修改后的xlsx-style做一个npm包,然后在项目中引入,本人知识能力有限,暂时还没有尝试。

第五步、在需要导出的地方,添加方法。

exportExcel(handleLabel){var _this = this;this.downLoadLable = handleLabel;require.ensure([],()=>{const {export_json_to_excel} = require('@/excel/Export2Excel');//找到文件的绝对路径var multiHeader = [];//多级表头var list = [];//数据var title='';//下载时的文件名if(_this.downLoadLable === 'basic'){multiHeader = [['规上工业企业综合情况分析报告——基本指标','','','','','','','','','']];//元素个数必须与tHeader相同,用''来填满list = _this.tableBasicData;title = '规上工业企业综合情况分析报告——基本指标';}const  tHeader = ['指标','年份','王店镇','高照街道','洪合镇','王江泾镇','新城街道','新塍镇','油车港镇','全区']//表头const filterVal = ['indicator','year','wangDian','gaoZhao','hongHe','wangJiangJing','xinChengJD','xinCheng','youCheG','all']//表头所对应数据中的属性值const data = _this.formatJson(filterVal, list);//得到需要被合并的单元格的位置,s代表起始位置,e代表终止位置,r代表行号,c代表列号var merges = [{s:{r:0,c:0},e:{r:0,c:9}}];//表示第一行的前10列合并for(let i=0;i< (list.length / list[0].rowcount); i++){let merge = {s:{r:2+i*list[0].rowcount ,c:0},e:{r:2+(i+1)*list[0].rowcount - 1,c:0}};merges.push(merge);}export_json_to_excel(multiHeader,tHeader, data, title,merges);})},formatJson(filterVal, jsonData){return jsonData.map(v => filterVal.map(j => v[j]))},

这里multiHeader,merges是我自己添加的参数,主要目的是为了完成多级表头和单元格合并的功能,需要在Export2Excel.js文件中修改

export function export_json_to_excel(multiHeader, th, jsonData, defaultTitle ,merges,autoWidth = true,)
if(typeof (multiHeader) != undefined){for(let item of multiHeader){data.unshift(item);};};//增加多级表头
/*设置每列的最大宽度*/if (autoWidth) {/*设置worksheet每列的最大宽度*/var colWidth = data.map(row => row.map(val => {/*先判断是否为null/undefined*/if (val == null) {return {'wch': 4};}/*再判断是否为中文*/else if (val.toString().charCodeAt(0) > 255 && val.toString().length >= 16) {return {'wch': 16/*val.toString().length * 3*/};} else {return {'wch': val.toString().length *3};}}))/*以第一行为初始值*/let result = colWidth[0];for (let i = 1; i < colWidth.length; i++) {for (let j = 0; j < colWidth[i].length; j++) {if (result[j]['wch'] < colWidth[i][j]['wch']) {result[j]['wch'] = colWidth[i][j]['wch'];}}}ws['!cols'] = result;}
if(typeof(merges) != undefined ){ws['!merges'] = merges;};//合并单元格

ws[’!col’]控制单元格的宽度,ws[’!merges’]控制单元格的合并,表格样式设置方法,也是在Export2Excel.js中修改

const borderAll = {//单元格外侧框线top: {style: "thin"},bottom: {style: "thin"},left: {style: "thin"},right: {style: "thin"}};
let tableTitleFont = {font: {sz: 14,color: "black",underline: false},alignment: {horizontal: "center",vertical: "center"},border: borderAll};
let dataInfo = wb.Sheets[wb.SheetNames[0]];let keyArr = Object.keys(dataInfo)//将对象的key值转换为数组dataInfo['A1'].s = tableTitleFont;if(typeof(multiHeader) != undefined){for(let i=0;i<multiHeader.length;i++){for(let j=0;j<th.length;j++){dataInfo[keyArr[(i+1)*th.length+j]].s = tableLabelFont;//tableLabelFont类似tableTitleFont,可以自行设置,在复制过程中,请设置,不然报错}}};for(let i=1 + multiHeader.length;i<=colWidth.length - 1;i++){for(let j=0;j<th.length;j++){dataInfo[keyArr[i*th.length+j]].s = tableLabelFont;}}for(let i in dataInfo){if(dataInfo[i].v == ''){dataInfo[i].s = tableLabelFont}};

上述添加的代码可以完成表格的样式调整,如不需要样式,不需要修改Export2Excel.js,在导出方法exportExcel中export_json_to_excel只传入tHeader、data、title即可。以上是我对前端保存excel方法的使用理解,希望能对你们有用,最后一种方法参考https://blog.csdn.net/developerwyg/article/details/105348288
个人理解,有不正确的地方,请指正。

前端表格导出为excel方法合集相关推荐

  1. 前端开发中ui(antd)表格导出为excel。详细步骤一看就会

    我们在开发的时候往往有这样的需求,将页面上的表格导出为excel文件.以随手写的demo为例. 1.首先我们需要下载一个插件,用于将页面中的数据转为excel文件 可以通过我们的package.jso ...

  2. 2000-2020全要素生产率OP法+LP法+OLS和固定效应法三种方法合集含原始数据和计算过程Stata代码

    2000-2020全要素生产率OP法+LP法+OLS和固定效应法三种方法合集含原始数据和计算过程Stata代码 1.时间:OP法:2008-2020年.LP法2000-2020年.OLS和固定效应法2 ...

  3. 界面的表格导出为excel,并下载

    最近,公司做了一个界面上的表格导出为excel并下载的一个功能.下面将具体的做法记录一下,以便后面复习. 首先先说一下需求 一.界面上有一个表格: 就上面这个表格,我是写死的,要在界面上方有一个按钮, ...

  4. 【vue + Excel表格导入与导出】导入Excel并展示在el-table表格中,表格导出为Excel文件

    注:末尾有完整代码 效果图 Excel 1.下载依赖 xlsx是导入所需依赖 file-saver是导出所需依赖 npm install xlsx --save npm install file-sa ...

  5. html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件

    TableExport是一款可以将HTML表格导出为Excel xlsx格式.xls格式,以及csv和txt文件的jQuery插件.TableExport插件使用简单,默认使用Bootstrap的CS ...

  6. html导出表格为csv,可将HTML表格导出为Excel|csv|txt文件的jQuery插件

    TableExport是一款可以将HTML表格导出为Excel xlsx格式.xls格式,以及csv和txt文件的jQuery插件.TableExport插件使用简单,默认使用Bootstrap的CS ...

  7. html excel导出的路径,html 导出多个excel表格数据-如何将html页面中的表格导出到excel表格...

    怎样将html表格导出到excel中啊?我用的是asp.net. stringbuilder拼接的也就是说,是用字符组成的表格,这并不是意义上的表格. 要实现导出EXCEL的较麻烦,给你讲一下解题思路 ...

  8. 将页面表格导出为excel并下载

    将页面表格导出为excel并下载的方式有很多, 本次介绍的是表格div的下载. 这种方式很简单,不需要去创建excel文件,也不需要创建工作簿,然后一点一点的填写数据.只需要将页面的div中的表格下载 ...

  9. 如何将html表格导出到excel,html 页面导出到excel表格数据类型-如何将html里面的table导出成excel...

    怎么把html导出到excel表格 1先,我们打开要转换成THML的表格文件.下是我用的WPS2019版截图,EXCEL软件操作上差不多 2.接下来,点击左上角的[文件] 3.在[文件]菜单里找到并点 ...

最新文章

  1. 4月3日 尤金.卡巴斯基在北大精彩演讲
  2. RDD, DataFrame or Dataset
  3. HDU4372 Count the Buildings
  4. 2021最新基于会话推荐系统长文综述
  5. 揭秘一家网络推广公司的引流变现套路
  6. PYTHON1.day06
  7. 经典排序算法-MFC实现之3:冒泡排序
  8. [求助]谁能给我讲解一下,iOS编程要如何实时显示采集到的图像???
  9. 基础网络函数介绍及其Cpp实例(C++)
  10. python程序员到哪里_Python程序员都知道的入门知识の五
  11. Aaron Swartz Rewriting Reddit中关于web.py的创建思路
  12. DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第2篇声音采集部分)
  13. 兴趣 程序猿宅必备超级好看的动漫
  14. 国内首家!携程周三、周五可在家“躺平”:76%员工主动报名 !网友:我酸了...
  15. 线性回归模型度量参数2- Multiple R R-Squared adjusted R-squared
  16. Ubuntu18.04
  17. android浏览器!6年菜鸟开发面试字节跳动安卓研发岗,大厂面经合集
  18. 【原创】SSD硬盘PC安装WIN7和WIN10双系统全过程
  19. linux管道通信 半双工通信
  20. Unity 鱼的游动

热门文章

  1. U盘制做多系统启动盘
  2. 科学计算机技术标准差,自动化技术_计算机技术_
  3. python考证书-考证那些事儿:Python工程师认证的考试内容和大纲
  4. 基于C++实现一个支持简单交互绘图小程序
  5. Android studio系列:win10上Android studio4.0.2下载安装
  6. 畅想未来的计算机网络科技有限公司,畅想未来科技生活作文
  7. R语言实现可理解的随机森林模型(Random Forest)——iml包
  8. 酷睿i7 12700k和i7 12700kf的区别 i712700k和i712700kf差多少
  9. 这两省软考电子版证书下载已开通
  10. 大数据学习总结(2021版)---Mysql基础