在做一些后台管理系统中,经常会遇到table 组件;然后需要导出excel.开发中实现方法如下:

第一类:后端来做导出功能(后端做更合适)

1. 后端生成excel,返回一个url地址;前端直接利用浏览器下载

2.后端接口返回二进制流文件,前端处理流文件(参见:二进制流文件下载_卡卡罗特的博客-CSDN博客)

第二类:前端来做导出工作

1. 安装相关现有的插件来处理:xlsx file-saver(自行百度)

2. 这里记录一下,自己见到一种新方法,前端自己生文件下载;这里就用到encodeURIComponent() 函数;

定义和用法

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

语法

encodeURIComponent(uri)

数不多说上代码,定义导出数据格式:

//导出excel的数据exportJsonData: {tHeader: [], //表头中文例如 ["时间",“名称”, “金额”]filterVal: [], //表头key例如 ["time", "name", "money"]list: [], //表格数据total_info: '' //总计信息数据,可以没有为空,表格顶部做统计使用},

后端获取的数据,自己需要整理一下exportCsv(),形成上面的结构:然后执行下载方法exportPathMethod(),导出表格字段信息格式,可以自己参函数内部配置。文件后缀名称自己定义

csv可以改成 xlsx

// 导出表格数据处理exportCsv(){// 整合数据let { dataList, tableHeader } = this;if(dataList.length < 1 || tableHeader.length < 1) {this.$message.error("暂无数据");return false;}let tHeader = tableHeader.map(item => item.label);let filterVal = tableHeader.map(item => item.key);this.exportJsonData.tHeader = tHeader //表头中文this.exportJsonData.filterVal = filterVal; //表头keythis.exportJsonData.list = dataList; //表体数据// 执行导出方法this.exportPathMethod(this.exportJsonData, "账单报表");},//导出数据组合exportPathMethod(data, setName) {/**注:csv文件:","逗号换列,\n换行,\t防止excel将长数字变科学计算法等样式*///要导出的json数据let mainLists = data; //主表//## 数据处理//一级表let mainTitle = mainLists.tHeader; //一级标题let mainTitleForKey = mainLists.filterVal; //一级过滤let mainList = mainLists.list; //一级数据let mainStr = [];//当总计有,时替换if (mainLists.total_info.indexOf(",") > -1) {mainLists.total_info = mainLists.total_info.replace(/,/g, "")}mainStr.push(mainLists.total_info + "\n"); //总计信息:添加上换列转成字符串并存进数组mainStr.push(mainTitle.join(",") + "\n"); //标题添加上换列转成字符串并存进数组console.log(" mainList mainTitleForKey", mainList, mainTitleForKey)mainList.forEach(e => {let temp = [];mainTitleForKey.forEach(f => {if (f.indexOf(".") > -1) { //当有.时temp.push(e[f.split(".")[0]][f.split(".")[1]]); //根据过滤器拿出对应的值} else if (Array.isArray(e[f])) { //当是数组时let s = e[f].join(' ')temp.push(s); //根据过滤器拿出对应的值} else if (e[f] && (typeof (e[f]) == 'string') && e[f].indexOf(',') > -1) { //当有逗号时let s = e[f].replace(/,/g, "")temp.push(s); //根据过滤器拿出对应的值} else if (!isNaN(e[f])) { //当是数字时let s = "¥" + e[f];temp.push(s); //根据过滤器拿出对应的值} else {temp.push(e[f]); //根据过滤器拿出对应的值}})console.log(" temp temp", temp)mainStr.push(temp.join(",") + "\n"); //取出来的值加上逗号换列转字符串存数组})//两个表数组转成字符串合并let merged = mainStr.join("");//## 导出操作// encodeURIComponent解决中文乱码const uri ="data:text/csv;charset=utf-8,\ufeff" +encodeURIComponent(merged);// 通过创建a标签实现let link = document.createElement("a");link.href = uri;// 对下载的文件命名link.download = setName + `.csv`;document.body.appendChild(link);link.click();},

前端table导出excel表格方法汇总相关推荐

  1. 前端 table 导出excel表格方法

    需求:获取后台数据,动态生成table后,导出excel表格,要求格式与table格式一致 直接上代码: <a id="export">导出</a> < ...

  2. 前端自己导出excel表格 不需要调接口(可导出全部的数据)

    前端自己导出excel表格 不需要调接口(可导出全部的数据) 1.下载 npm install -S file-saver xlsx 2.把js放在对应的位置 全部复制(Export2Excel.js ...

  3. 纯前端,使用xlsx库,封装导出Excel表格方法

    1.安装xlsx npm i xlsx 2.代码 const XLSX = require("xlsx")/*** @data 表格数据 data = [{}] 默认为[[]] 数 ...

  4. sheetJs+xlsx-style——前端实现导出excel表格——设置单元格背景色,居中,自动换行,宽度,百分数展示等

    之前写过一篇博客,是关于elementUi-table组件+xlsx插件实现导出--sheetJs的,之前实现的功能有: 根据dom获取内容 创建工作簿 调整单元格的宽度 实现百分数的展示 插入到工作 ...

  5. asp.net里导出excel表方法汇总

    1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName)     {     HttpRespons ...

  6. 前端JS导出Excel表格 可筛选列 table2excel

    git地址 table2excel 本文参考了 (14条消息) table2excel 导出表格有边框,文字居中_狂吃狂吃的瘦子的博客-CSDN博客_table2exc​​​​​​el 边框 效果如图 ...

  7. 推荐一款简单易懂的VUE导出Tbale导出excel表格插件[ Table-excel ]

    1.插件地址 将前端 table 导出 excel , 基于 exceljs + file-saver , 适用于所有表格 基于 数据源的定制化导出 具大佬所说,是公司给俩星期开发时间开发出来的导出插 ...

  8. php导出excel表格例子,PHP导出excel表格示例

    方法一:适合单独导出 $filename='提现列表-' . date('Ymd',time()); header("Content-type: application/vnd.ms-exc ...

  9. 前端导出Excel表格

    vue + xlsx实现Excel导出 简单粗暴步骤,无需花里胡哨 第一步:npm install --save xlsx@0.14.3 第二步:全局封装公共方法(或者局部定义) import XLS ...

最新文章

  1. 3步告别忙累压力大没成绩
  2. Istio 中的 Sidecar 注入及透明流量劫持过程详解
  3. python数组的切片操作_对Python 数组的切片操作
  4. fatal error LNK1169: 找到一个或多个多重定义的符号 解决方案
  5. 平板电脑刷机加供电系统改造
  6. 联想“重组症”:仅靠重组是不够的
  7. 如何给程序添加数字签名 sign
  8. Hi,欢迎大家来到阿毛小猪的博客,分享自己学习中的经验,默默的前行,聆听心的声音...
  9. Nginx实现反向代理(同一服务器下不同端口服务映射到80端口)
  10. OSError: [WinError 127] 找不到指定的程序。 Error loading “C:\Anaconda3\envs\Machine_Learning\lib\site-package
  11. 01-Java中的集合
  12. VMware WorKstation虚拟机上 Linux 6最小化安装和基本网络环境配置
  13. Laragon 在 Windows 中搭建 Laravel 开发环境
  14. Vue实现页面的局部刷新
  15. java bufferedimage 内存溢出_大图片内存溢出问题!!!
  16. tomcat使用详解(week4_day2)--技术流ken
  17. 计算机自检后反复重启 主引导,电脑开机停留在商标界面-电脑一开机就停留在主板标志界面,进不了bios设置,重启也一样,怎么办?...
  18. VSLAM 硬件(FPGA、ASIC)架构设计论文汇总(一直更新)
  19. java入门到成神之路的宝藏资源
  20. 阿里云图数据库GDB揭秘

热门文章

  1. 阿里毕玄:阿里十年,从分布式到云时代的架构演进之路
  2. 使用C语言编写测速程序
  3. 关于c++的qt官方网站下载慢的解决方案(qt的下载方法,清华镜像)
  4. HTML5期末大作业:家居/家电/家居网站设计——html家具装饰网站设计30页(含论文) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机...
  5. dbg 寻找main函数
  6. 嵌入式操作系统复习总结
  7. 银河麒麟crontab下班自动关机
  8. redhat 安装Qt中遇到的问题
  9. 【转】花开正当时,十四款120/128GB SSD横向评测
  10. Android优化篇之APK体积优化