vue 前端一键导出excel文件并附带表格样式

news2024/11/18 1:22:47

1、安装xlsx、xlsx-style、file-saver三个包

//xlsx与file-saver指定版本安装,解决默认安装utils未定义的问题
npm install --save xlsx@0.17.0 
npm install --save file-saver@2.0.5
npm install xlsx-style --save 

2、在使用的页面引入

import XLSX from 'xlsx' // 导入导出都要用到的插件
import FileSaver from 'file-saver' // 导出需要用到的插件
import XLSXStyle from 'xlsx-style';//导出引入样式

3、封装导出处理函数

//导出excel文件-并修改表头样式
export function exportExcelData(data,titles,filename){
  Object.prototype.toString.call();
  let proV = toString.call(titles[0]);
  let headerValue = proV === '[object Object]' ? toArray(titles,'value') : titles;//表头value
  let headerName = proV === '[object Object]' ? toArray(titles,'name') : titles;//表头名称

  let dataArr = [headerName];//表格数据
  for (let i = 0; i< data.length; i++){
    let arr = headerValue.map((item,index)=>{
      return data[i][item];
    });
    dataArr.push(arr)
  }
  var sheet = XLSX.utils.json_to_sheet(dataArr, {
    skipHeader: true,
  });
  /**设置标题头背景色 */
  for (const key in sheet) {
    // 第一行,表头
    if (key.replace(/[^0-9]/ig, '') === '1') {
      sheet[key].s = {
        fill: { //背景色
          fgColor: {
            rgb: 'C0C0C0'
          }
        },
        font: {//字体
          name: '宋体',
          sz: 12,
          bold: true
        },
        border: {//边框
          bottom: {
            style: 'thin',
            color: '#9a9a9a'
          }
        },
        alignment:{
          horizontal:'center' //水平居中
        }
      }
    }else if (Number(key.replace(/[^0-9]/ig, '')) > 1){
      sheet[key].s = {
        alignment:{
          horizontal:'center' //水平居中
        }
      }
    }
    let colsP = headerName.map((item,index)=>{
      let obj = {
        'wch': 20 //列宽
      }
      if (item == '序号'){
        obj['wch'] = 10
      }else {
        obj['wch'] = 18
      }
      return obj;
    })
    sheet['!cols']  = colsP;//列宽
  }
  openDownload(sheet2blob(sheet,filename), filename+".xlsx");
}
function sheet2blob(sheet, sheetName) {
  let wb = XLSX.utils.book_new();
  wb.SheetNames.push(sheetName)
  wb.Sheets[sheetName] = sheet;
  var wbout = XLSXStyle.write(wb, { bookType: '', bookSST: false, type: 'binary' })
  var blob = new Blob([s2ab(wbout)], { type: "" },sheetName);
  // 字符串转ArrayBuffer
  function s2ab(s) {
    var buf = new ArrayBuffer(s.length);
    var view = new Uint8Array(buf);
    for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
    return buf;
  }
  return blob;
}
function openDownload(url, saveName) {
  if (typeof url == "object" && url instanceof Blob) {
    url = URL.createObjectURL(url); // 创建blob地址
  }
  var aLink = document.createElement("a");
  aLink.href = url;
  aLink.download = saveName || ""; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
  var event;
  if (window.MouseEvent) event = new MouseEvent("click");
  else {
    event = document.createEvent("MouseEvents");
    event.initMouseEvent(
      "click",
      true,
      false,
      window,
      0,
      0,
      0,
      0,
      0,
      false,
      false,
      false,
      false,
      0,
      null
    );
  }
  aLink.dispatchEvent(event);
}

4、vue页面引入使用

import {exportExcelData} from '@/utils/index.js'
methods方法里面的代码
// 导出按钮触发事件
//this.tableDataOne:表格数据;this.tableHeadOne:表头;"绿色交易合同信息管理":导出文件名称
      getExport() {
        exportExcelData(this.tableDataOne,this.tableHeadOne,"绿色交易合同信息管理");
      },

5、导出效果如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/816555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对顶堆算法

对顶堆可以动态维护一个序列上的第k大的数&#xff0c;由一个大根堆和一个小根堆组成&#xff0c; 小根堆维护前k大的数(包含第k个)大根堆维护比第k个数小的数 [CSP-J2020] 直播获奖 题目描述 NOI2130 即将举行。为了增加观赏性&#xff0c;CCF 决定逐一评出每个选手的成绩&a…

【暑期每日一练】 day10

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一 …

Klipper seria.c 文件代码分析

一. 前言 Klipper 底层硬件的串口模块程序写的是否正确是决定下位机与上位机能否正常通信的前提&#xff0c;如果这个文件的驱动没写好&#xff0c;那上位机控制下位机就无从谈起&#xff0c;更无法通过上位机去验证下位机程序的正确性。 本篇博文将详细解析 Klipper src 文件夹…

提词器怎么用?这个方法看一看

提词器怎么用&#xff1f;在现代社会中&#xff0c;提词器的应用场景非常广泛。除了学习、工作、听力障碍和翻译&#xff0c;它还可以应用于其他领域&#xff0c;如演讲、广播、新闻报道等。比如说&#xff0c;在演讲中&#xff0c;提词器可以帮助演讲者更好地掌握演讲内容。演…

网络防御之VPN

配置IKE 第一阶段 [r1]ike proposal 1 [r1-ike-proposal-1]encryption-algorithm aes-cbc-128 [r1-ike-proposal-1]authentication-algorithm sha1 [r1-ike-proposal-1]dh group2 [r1-ike-proposal-1]authentication-method pre-share[r1]ike peer aaa v1 [r1-ike-peer-aaa…

提升数据质量的四大有效方式

在数字时代的今天&#xff0c;企业对于高质量、值得信赖的数据的需求越来越高。 目前&#xff0c;已经有很多企业将数据质量视为技术问题而非业务问题&#xff0c;这也是获取高质量数据的最大限制因素。只有查找技术缺陷&#xff0c;例如重复数据、缺失值、乱序序列&#xff0…

api自动化测试

API测试已成为日常的测试任务之一&#xff0c;为了提高测试效率&#xff0c;减少重复的手工操作&#xff0c;API自动化测试也逐渐变得愈加重要&#xff0c;本文是自己在API自动化测试方面的一些经验积累和心得、汇总成文&#xff0c;以飨读者 我相信自动化技能已经成为高级测试…

uniapp跨域解决

uniapp跨域解决 跨域是什么 跨域指的是浏览器不能执行其他网站的脚本&#xff0c;当一个网页去请求另一个域名的资源时&#xff0c;域名、端口、协议任一不同&#xff0c;就会存在跨域。跨域是由浏览器的同源策略造成的&#xff0c;是浏览器对JavaScript施加的安全限制。 报错…

直线导轨的精密等级以及划分依据

直线导轨的作用&#xff0c;是用来支撑和引导运动部件&#xff0c;按给定的方向做往复直线运动的&#xff0c;直线导轨是高精密度的传动元件&#xff0c;广泛使用在各行各业中。 直线导轨的精密等级是判断产品质量的一个重要指标。在众多种类的直线导轨产品中&#xff0c;精密等…

【BASH】回顾与知识点梳理(一)

【BASH】回顾与知识点梳理 一 前言一. 认识与学习 BASH1.1 硬件、核心与 Shell1.2 为何要学文字接口的 shell&#xff1f;1.3 系统的合法 shell 与 /etc/shells 功能1.4 Bash shell 的功能1.5 查询指令是否为 Bash shell 的内建命令&#xff1a; type1.6 指令的下达与快速编辑按…

vue3搭建Arco design UI框架

技术&#xff1a;Vue3.2.40 UI框架&#xff1a;Arco design 2.44.7 需要安装:yarn 1.22.19 和npm 8.19.4 1.第一步安装本地全局arco脚手架 管理员运行CMD npm i -g arco-cli安装成功后如下&#xff1a; 2.第二步在需要存放项目的文件夹拉取项目 我这里把项目存放在 D:\W…

CTF:信息泄露.(CTFHub靶场环境)

CTF&#xff1a;信息泄露.&#xff08;CTFHub靶场环境&#xff09; “ 信息泄露 ” 是指网站无意间向用户泄露敏感信息&#xff0c;泄露了有关于其他用户的数据&#xff0c;例如&#xff1a;另一个用户名的财务信息&#xff0c;敏感的商业 或 商业数据 &#xff0c;还有一些有…

【枚举+结论】icpc2022 济南 A

Problem - A - Codeforces 题意&#xff1a; 思路&#xff1a; 本来的思路是这样的 考虑最后会变成什么数&#xff0c;手摸了几个发现&#xff0c;都是2&#xff0c;不论本来的集合是不是包含2 然后就是猜测是不是直接变成2就好了 然后要去掉m个&#xff0c;直接考虑去掉最…

高速过孔同进同出?到底是什么一种设计体验

高速先生成员--黄刚 每当来一个比较新的概念时&#xff0c;高速先生总是非常的喜欢&#xff0c;随之而来的求知欲也会爆发个小宇宙。其实问题的来源是我们公司的北京分部的资深设计工程师&#xff0c;北京分部本身也是我司全国20多个分部里设计能力最强的分部之一了&#xff0c…

类的封装和包(JAVA)

封装 所有的OOP语言都会有三个特征&#xff1a; 封装&#xff1b;继承&#xff1b;多态。 本篇文章会为大家带来有关封装的知识。 在我们日常生活中可以看到电视就只有那么几个按键&#xff08;开关&#xff0c;菜单……&#xff09;和一些接口&#xff0c;而而我们通过这些东…

Day08-作业(MySQLMybatis入门)

作业1&#xff1a;多表查询 数据准备&#xff1a; 重新创建一个数据库 db03_homework 执行如下脚本&#xff0c;创建表结构&#xff0c;导入测试数据 -- 部门管理 create table tb_dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not n…

想了解好用的翻译pdf的软件吗?

在全球化的时代背景下&#xff0c;跨国贸易越来越普遍&#xff0c;跨语言沟通也越来越频繁。小黄是一家跨国公司的员工&#xff0c;他梦想能在全球各地拓展自己的业务&#xff0c;奈何遇到了一个巨大的挑战&#xff1a;跨语言沟通。在这其中&#xff0c;pdf文件是他经常接收到的…

CNN-NER论文详解

论文&#xff1a;https://arxiv.org/abs/2208.04534 代码&#xff1a;https://github.com/yhcc/CNN_Nested_NER/tree/master 文章目录 有关工作前期介绍CNN-NER模型介绍 代码讲解主类多头biaffineCNNLoss解码数据传入格式 参考资料 有关工作 前期介绍 过去一共主要有四类方式…

基于canvas画布的实用类Fabric.js的使用

目录 前言 一、Fabric.js简介 二、开始 1、引入Fabric.js 2、在main.js中使用 3、初始化画布 三、方法 四、事件 1、常用事件 2、事件绑定 3、事件解绑 五、canvas常用属性 六、对象属性 1、基本属性 2、扩展属性 七、图层层级操作 八、复制和粘贴 1、复制 2…

高并发架构去重难?架构必备技能 - 布隆过滤器

系列文章目录 当Dubbo遇到高并发&#xff1a;探究流量控制解决方案 主从选举机制&#xff0c;架构高可用性的不二选择 高并发架构去重难&#xff1f;架构必备技能 - 布隆过滤器 系列文章目录前言一、布隆过滤器简介二、特性与应用场景三、参数定制四、java版本的Demo五、总结 …