1.安装xlsx依赖

npm install xlsx --save

2.创建一个js作为外部引入,命名为excel.js

/* eslint-disable */
import XLSX from 'xlsx';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;
}function json_to_array(key, jsonData){return jsonData.map(v => key.map(j => { return v[j] }));
}// fix data,return string
function fixdata(data) {let o = ''let l = 0const w = 10240for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)))o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)))return o
}// get head from excel file,return array
function get_header_row(sheet) {const headers = []const range = XLSX.utils.decode_range(sheet['!ref'])let Cconst R = range.s.r /* start in the first row */for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */var cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })] /* find the cell in the first row */var hdr = 'UNKNOWN ' + C // <-- replace with your desired defaultif (cell && cell.t) hdr = XLSX.utils.format_cell(cell)headers.push(hdr)}return headers
}export const export_table_to_excel= (id, filename) => {const table = document.getElementById(id);const wb = XLSX.utils.table_to_book(table);XLSX.writeFile(wb, filename);
}export const export_json_to_excel = ({data, key, title, filename, autoWidth}) => {const wb = XLSX.utils.book_new();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 const export_array_to_excel = ({key, data, title, filename, autoWidth}) => {const wb = XLSX.utils.book_new();const arr = json_to_array(key, data);arr.unshift(title);const ws = XLSX.utils.aoa_to_sheet(arr);if(autoWidth){auto_width(ws, arr);}XLSX.utils.book_append_sheet(wb, ws, filename);XLSX.writeFile(wb, filename + '.xlsx');
}export const read = (data, type) => {/* if type == 'base64' must fix data first */// const fixedData = fixdata(data)// const workbook = XLSX.read(btoa(fixedData), { type: 'base64' })const workbook = XLSX.read(data, { type: type });const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];const header = get_header_row(worksheet);const results = XLSX.utils.sheet_to_json(worksheet);return {header, results};
}export default {export_table_to_excel,export_array_to_excel,export_json_to_excel,read
}

3.在需要的组件中添加方法,以iview为例(主要是拿到上传的file文件),这是action地址不需要后台提供,这里使用的是iview中的默认上传地址,在这个需要使用的组件中用import 引入上面新建的excel.js

<Upload ref="uploadFileFlag" action="//jsonplaceholder.typicode.com/posts/" :before-upload="beforeFile" :on-remove="removeFile"><Button icon="ios-cloud-upload-outline">上传文件</Button></Upload>

4.beforeFile中可以拿到我们想要的file

 beforeFile(file){const fileExt = file.name.split('.').pop().toLocaleLowerCase()this.uploadFile = file;if (fileExt === 'xlsx' || fileExt === 'xls') {this.readFile(file)this.file = file} else {this.$Notice.warning({title: '文件类型错误',desc: '文件:' + file.name + '不是EXCEL文件,请选择后缀为.xlsx或者.xls的EXCEL文件。'})}return false},

5.这是读取文件

     // 读取文件readFile(file) {const reader = new FileReader()reader.readAsArrayBuffer(file)reader.onloadstart = e => {this.uploadLoading = truethis.tableLoading = truethis.showProgress = true}reader.onprogress = e => {this.progressPercent = Math.round(e.loaded / e.total * 100)}reader.onerror = e => {this.$Message.error('文件读取出错')}reader.onload = e => {const data = e.target.resultconst { header, results } = excel.read(data, 'array')const tableTitle = header.map(item => { return { title: item, key: item } })this.tableData = results  //这里的tableData就是拿到的excel表格中的数据this.tableTitle = tableTitlethis.uploadLoading = falsethis.tableLoading = falsethis.showRemoveFile = true}},

vue解析excel文件(使用xlsx)相关推荐

  1. Java解析Excel文件(.xlsx和.xls格式均适用)

    简介: Excel文件的解析与读取普通的文本文件不同,就像xml文件的解析,最常用的Java4J方式也是jar包支持的, 根据apache官方文档:http://poi.apache.org/spre ...

  2. java解析Excel文件的方法

    java解析Excel文件的方法 介绍 1.1 pom依赖 1.2 将数据流转化为可解析的Workbook类型文件 1.3 解析 1.4 Controller层接收前端传递的Excel文件(前端使用E ...

  3. java代码使用http请求解压zip包并解析xml_Javascript 是如何解析 Excel 文件的?

    最近要做一个导入导出 Excel 的功能,上一次做这个功能的时候,还是用的 Java Apache POI,这是一个用 Java 编写的免费开源的跨平台的 Java API,能够对 Microsoft ...

  4. 前端解析Excel文件js-xlsx与bootstrapTable

    前端解析Excel文件js-xlsx与bootstrapTable 1.引入xlsx.js 2.上传Excel按钮 3.读取Excel文件 4.结果 1.引入xlsx.js <script sr ...

  5. 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...

  6. js前端解析excel文件

    使用纯Javascript解析excel文件. 使用的是开源的解析excel的js库:sheetjs.github地址:https://github.com/SheetJS/js-xlsx 首先引用J ...

  7. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

  8. java解析Excel文件

    下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...

  9. 微信小程序使用node-xlsx解析excel文件的云函数

    1.右键新建node.js云函数 2.在该云函数右键:在外部终端窗口打开 3.输入npm install node-xlsx,回车 4.引入并写程序,如下 // 云函数入口文件 const cloud ...

最新文章

  1. 计算机图形学直线扫描转论文,计算机图形学实验报告-实验1直线段扫描转换.doc...
  2. 先考学历还是先提升能力?
  3. memcached mysql 性能测试_memcached +mysql+php 测试例子
  4. 《 Python树莓派编程》——2.7 总结
  5. mybatis模糊查询不同写法
  6. [jQuery] Zepto的点透问题如何解决?
  7. 微信小程序简单入门1
  8. GMQ交易所正式发布GMQ Token
  9. 解决Conda install tensorflow弹窗Python.exe已经停止工作的问题
  10. 谁说中国没有 Linus?中国初代 IT 宗师封神榜
  11. 摩尔定律和梅特卡夫定律_摩尔定律f
  12. [渝粤教育] 西南科技大学 仓储与配送管理 在线考试复习资料
  13. 2019年十大国外边缘计算供应商
  14. Java字节流读取shp_shp系列(四)——利用C++进行Shx文件的读(打开)
  15. YOLOV5 6.0加入CA注意力机制(看了包会)
  16. matplotlib显示伪彩色图像及色度条
  17. 考研线性代数深入理解
  18. 2021-06-04 Java对象在Hibernate下的4种状态和Session相关方法以及对象识别
  19. Linux一键自动安装小栗子桌面 可以用来挂小栗子机器人
  20. HDU 4262 Juggler 树状数组

热门文章

  1. Excel文件解析性能对比(POI,easyexcel,xlsx-streamer)
  2. 一味研究:岩石股份摘帽即收“两连板”,海银系要认真酿酒了吗?
  3. 出海竞争加剧,全球头部秀场直播平台LiveMe如何应对新挑战?
  4. 面向面试题的前端学习-js篇(自用,持续完善中)
  5. 互联网创业公司的一段经历
  6. [禅悟人生]有自知之明, 在深浅之间权衡做人
  7. cad用键盘放大缩小_CAD放大缩小快捷键 _ 2D3D网
  8. 操作系统:进程和线程所有知识点
  9. css实现立体感按钮
  10. python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...