安装依赖

npm install xlsx --save

template-用的element

          <el-upload:file-list="fileList"accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"class="btn":auto-upload="false":show-file-list="false":limit="1":on-change="uploadfile">导入</el-upload>

导入表格

接受el-input传过来的文件流,使用xlsx读取内容

    uploadfile(file) {console.log("上传的文件", file);let _this = this;let f = file.raw;let rABS = false; //是否将文件读取为二进制字符串let reader = new FileReader();//if (!FileReader.prototype.readAsBinaryString) {FileReader.prototype.readAsBinaryString = function (f) {let binary = "";let rABS = false; //是否将文件读取为二进制字符串let wb; //读取完成的数据let outdata;let reader = new FileReader();reader.onload = function (e) {let bytes = new Uint8Array(reader.result);let length = bytes.byteLength;for (let i = 0; i < length; i++) {binary += String.fromCharCode(bytes[i]);}let XLSX = require("xlsx");if (rABS) {wb = XLSX.read(btoa(fixdata(binary)), {//手动转化type: "base64",});} else {wb = XLSX.read(binary, {type: "binary",});}outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); //outdata就是你想要的东西const keyObj = {序号: "id",情况跟踪: "track",日期: "date",标题: "title",状态: "status",结果: "result",预警: "warning",};outdata.forEach((item) => {// 将中文的键名替换成英文的for (let k in keyObj) {let newKey = keyObj[k];if (newKey) {item[newKey] = item[k];delete item[k];}}});console.log(outdata);};reader.readAsArrayBuffer(f);};if (rABS) {reader.readAsArrayBuffer(f);} else {reader.readAsBinaryString(f);}},

上传的文件

读取结果

导出文件

创建exportExcel.js

/* eslint-disable */
/* 导出excel文件 *//*** 导出excel文件实现思路分析** 1.通过XLSX插件的 XLSX.utils.book_new()方法,创建excel工作蒲对象wb。* 2.按需插入第一行数据,通过数组的unshift()方法。* 3.通过XLSX.utils.json_to_sheet(),创建excel表格对象ws。* 4.通过json_to_array(key,data),结合自定义的字段名key,和数据记录data,生成新数组。* 5.通过auto_width(),对ws和新生成的数组,自动计算各列col宽。* 6.通过XLSX.utils.book_append_sheet(),生成实际excel工作蒲,并使用XLSX.writeFile()生成excel文件。*/import XLSX from 'xlsx'// 自动计算col列宽
function auto_width (ws, data) {/*set worksheet max width per col*/const colWidth = data.map(row => row.map(val => {/*if null/undefined*/if (val == null) {return { 'wch': 10 }}/*if chinese*/else if (val.toString().charCodeAt(0) > 255) {return { 'wch': val.toString().length * 2 }} else {return { 'wch': val.toString().length }}}))/*start in the first row*/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
}// 将json数据转换成数组
function json_to_array (key, jsonData) {return jsonData.map(v => key.map(j => {return v[j]}))
}/*** @param header Object,表头* @param data Array,表体数据* @param key Array,字段名* @param title String,标题(会居中显示),即excel表格第一行* @param filename String,文件名* @param autoWidth Boolean,是否自动根据key自定义列宽度*/
export const exportJsonToExcel = ({header,data,key,title,filename,autoWidth
}) => {const wb = XLSX.utils.book_new()if (header) {data.unshift(header)}if (title) {data.unshift(title)}const ws = XLSX.utils.json_to_sheet(data, {header: key,skipHeader: true})if (autoWidth) {const arr = json_to_array(key, data)auto_width(ws, arr)}XLSX.utils.book_append_sheet(wb, ws, filename)XLSX.writeFile(wb, filename + '.xlsx')
}
export default {exportJsonToExcel
}

在页面引入这个js,传递要导出的数据

import exportExcel from "../../components/exportExcel.js"
    beforeExport(arr) {// 导出表格if(arr && arr.length>0){let data = JSON.parse(JSON.stringify(arr));console.log(data)this.loading=true;let title ={}let key =[]//循环字段,这段看自己的表单需要哪些字段this.keys.forEach((item)=>{if(item.key){key.push(item.key);}title[item.key]=item.title})let obj ={header:title,data:data,key:key,title:"",filename:"事项清单",autoWidth:true}exportExcel.exportJsonToExcel(obj);this.loading=false;}},

下载模板

用的vue3,把模板放在可以被调用静态资源的文件夹中,我放在了public/static/file下


使用a标签,写上路径&download属性,就可以了,这里的路径是相对于public的index.html写的

          <a class="btn" href="./static/file/temp.xls" download="temp.xls"><Download class="addarea" />//图标来的下载</a>

XLSX + VUE获取表格内容,实现下载模板、导入表格、导出表格功能相关推荐

  1. VUE+ElementUI生成Excel模板 导入数据生成表格(自适应)

    VUE+ElementUI生成Excel模板 导入数据生成表格(自适应) 最近项目需求,需要根据条件查询对应数据的参数(每条数据的参数名称和个数都不一样) ,生成Excel表格模板,再通过Excel模 ...

  2. easypoi 模板导入、导出合并excel单元格功能

    easypoi 模板导入.导出合并单元格功能 参考: hutool 导出复杂excel(动态合并行和列) java使用poi读取跨行跨列excel springboot集成easypoi并使用其模板导 ...

  3. vue+iView实现导入与导出excel功能

    vue+iView实现导入与导出excel功能 一,需求: 1,导入导出的必要性 导入与导出在日常项目开发中经常用到, 批量导入功能可以快速插入添加数据. 导出功能则可方便直观明了拿到所需展示的重要数 ...

  4. java poi word 复制_Java 使用POI填充Word表格内容和复制模板行属性方法示例代码

    1、填充Word表格内容/** * 循环填充表格内容 * @param xwpfDocument * @param params * @param tableIndex * @throws Excep ...

  5. JAVA ( EasyExcel 通过模板 导入、导出、下载模板)——亲测有用

    本文参考:https://liuyanzhao.com/10060.html 先说两个实体类对象. 我这里举例 Student 和 StudentExcel Student 就是你数据库表的对象 St ...

  6. 使用EasyExcel实现模板下载、导入和导出功能

    最近项目中需要用到Excel表格的上传下载功能,于是选择了EasyExcel这款工具,总的来说非常的好用,下面就做一个简单的演示. 官方文档地址 https://www.yuque.com/easye ...

  7. java获取excle表格对象_Java使用excel工具类导出对象功能示例

    本文实例讲述了Java使用excel工具类导出对象功能.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.ss.use ...

  8. 基于PyQt5的快速开发模板系统-Excle数据批量导入及导出表格数据为Excle

    基于Python和PyQt5的快速开发模板系统-Excle数据批量导入显示及表格数据导出 基于PyQt5按钮控制实现excle数据批量导入及当前表格存在数据的批量导出,可在此基础上进行功能扩展. 1. ...

  9. 【xlsx+vue】前端生成可下载的xlsx表格

     组件引入: <script type="text/javascript" src="./xlsx.core.min.js"></script ...

最新文章

  1. tensorflow练习
  2. 一个 bug / Masonry的引入
  3. Super Jumping! Jumping! Jumping! HDU - 1087
  4. _thread_in_vm_Java Thread类的静态void sleep(long time_in_ms,int time_in_ns)方法,带示例
  5. VC中为对话框添加背景图片
  6. Angular Web App部署Linux Nginx Https
  7. NodeJS配置国内源
  8. 【计算机组成原理】计算机系统概论
  9. 在linux下编译iperf3,Linux内网网络测速(打流)工具iperf3使用教程
  10. Head First Java 中文高清版 免费分享
  11. jq ui datepicker添加时分秒
  12. java自动化键盘组合键_SELENIUM自动化模拟键盘快捷键操作实现解析
  13. c# spire.xls 设置文字为微软雅黑_微软推出的逆天神器,让我抛弃用了5年的 Chrome。...
  14. 华为android是什么文件夹,华为手机里的文件夹代表什么?哪些可以清除?看完秒懂!...
  15. 回文联对联大全_回文对联大全
  16. 阿里用技术帮用户剁手——《尽在双11——阿里巴巴技术演进与超越》
  17. 普顿外汇告诉大家如何在外汇市场保持良好的心态?
  18. ORACLE中RECORD的使用
  19. 机械臂—ROS下UR10e+ft300+2f-140gripper ur机械臂配置夹爪及问题解决
  20. 龙芯开始支持主流开发栈: Java, .Net以及NodeJS

热门文章

  1. 7本Python必读的入门书籍
  2. access查询女教师所有的信息_2013年计算机等考二级Access全真模拟试题(含答案)三 2...
  3. 想让数据分析表扬你?先闯过这八关
  4. centos7 yum安装tomcat9[亲测可用]
  5. 详解Instagram价值7.5亿美元的简洁技术(PPT)
  6. [苏飞开发助手V1.0测试版]官方教程与升级报告
  7. matlab矩阵维度不允许,如何解决索引超过矩阵维度 - MATLAB
  8. python 实现漂亮的烟花,樱花,玫瑰花
  9. fritzing导入元件_【工具】【电子设计】超屌的 fritzing 新建元件
  10. ajax中fileelementid,使用 ajaxFileUpload 进行图片上传