vue读取本地xlsx文件

最近项目中有一个需求,大概就是先上传文件,再将上传文件详情回传到页面显示出来,但是由于表头太多,一个一个对字段显得太繁琐了,所以就找了一个可以直接读取Excel文件的方法。但通过实践后,还是发现调接口来的比较方便,不过无妨,也可以当作学了一种方法了。
在网上搜索发现了一个可以直接用的工具库 js-xlsx

js-xlsx

由 SheetJS 出品的 js-xlsx 是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。

官方github : https://github.com/SheetJS/js-xlsx

下面就开始我们的示例 :
1、安装npm 包 xlsx

npm install xlsx

创建一个页面 readExcel.vue 用于编写此例子

<template><div><input type="file" ref="upload" accept=".xls,.xlsx" ></div>
</template>

知识点 : 读取excel

读取 excel 主要是通过 XLSX.read(data,{type:type}) 来实现的,返回一个workbook对象,其中 type 的值有

base64 :以base64 方式读取;
binary :BinaryString格式(byte n is data.charCodeAt(n))
string :UTF8编码的字符串
buffer :nodejs Buffer
array :Uint8Array,8位无符号数组;
file :文件的路径(仅nodejs下支持);

JS代码

<script>
// import XLSX from 'xlsx'   // 前提是npm xlsx
export default {methods: {readExcel(e) {//表格导入// 引入工具库 import 也可以,前提是已经npm 下来了。var XLSX = require("xlsx");const files = e.target.files;var vali=/\.(xls|xlsx)$/;if(files.length<=0){//如果没有文件名return false;}else if(!vali.test(files[0].name.toLowerCase())){this.$Message.error('上传格式不正确,请上传xls或者xlsx格式');return false;}const fileReader = new FileReader();fileReader.onload = (e) => {try {const data = e.target.result; // data则是我们在excel表中获取的数据const Workbook = XLSX.read(data, { type: 'binary'}); // 通过XLSX读取出来得到了一个 workdata 对象,下面详细介绍 workdata 对象中有些什么this.$refs.upload.value = ''; // 处理完成 清空表单值} catch (e) {return false;}};fileReader.readAsBinaryString(files[0]);}},mounted(){this.$refs.upload.addEventListener('change', e => {//绑定监听表格导入事件this.readExcel(e);})}
}
</script>

Workbook Object 里面有些什么东西呢?

我们先来打印出来看看:

我们主要看看 SheetName 和 Sheets中的结果
可以发现,SheetName 里面保存的是所有 sheet 的名字,然后 Sheets 保存了每个sheet 中的内容(称为 Sheet Object ),每个 sheet 是通过 类型A1 这种键值来保存每个单元格的内容(称为单元格对象 Cell object)

Sheet Object


sheet[ ’ !ref ’ ] : 表示所有单元格的范围,例如这里是A1:D3,就表示A1到D3;
sheet[ !merges] : 存放一些单元格合并信息,为一个数组,每个数组由包含s和e构成的对象组成,s表示开始,e表示结束,r表示行,c表示列;

Cell Object

每一个单元格为一个对象,主要有 t、v、r、h、w等字段;

t :表示内容类型,s表示string类型,n表示number类型,b表示boolean类型,d表示date类型,等等
v : 表示原始值;
f :表示公式,如 B2+ B3;
h :html内容
r : 富文本内容

在上述 我们已经拿到了 Workbook 对象,但是肯定这样是还远远不够的撒,对于这种对象 还需要处理成自己想要 的数据格式才行

let sheetNames = Workbook.SheetNames ;//获取需要数据的表名
let workSheet = Workbook.Sheets[sheetNames]; //workSheet 是该excel表格中的数据

到这一步,大家可能会觉得应该使用遍历来获取数据,确实如此,但是翻阅工具库xlsx 发现提供了便捷方法供我们使用,XLSX.utils ,这里面有很多种格式,我们介绍几种常用的;

XLSX.utils.sheet_to_csv:生成CSV格式
XLSX.utils.sheet_to_txt:生成纯文本格式
XLSX.utils.sheet_to_html:生成HTML格式
XLSX.utils.sheet_to_json:输出JSON格式

到这里使用XLSX.utils 后就能生成我们想要的数据了。

vue读取本地xlsx文件相关推荐

  1. Vue.js读取本地json文件并分页显示

    Vue.js读取本地json文件并分页显示 1.功能实现 通过axios异步加载技术读取本地的json文件内容,并通过vue.js处理数据在h5页面分页显示(这里以3行数据分页) 2.student. ...

  2. JS读取本地CSV文件数据

    JS读取本地CSV文件数据 文件中的部分数据如图 需求是需要提取出文件的数据 使用到的模块是 Papa Parse 1. 依赖安装 yarn add papaparse papaparse的基本使用可 ...

  3. Echarts读取本地json文件渲染轨迹,亲测ok

    Echarts读取本地json文件渲染轨迹,亲测ok 1. 报错及解决 2. 效果图 3. 源码lines-track.html如下 参考 1. 报错及解决 报错:由于浏览器的同源策略 已拦截跨源请求 ...

  4. android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...

    本文实例讲述了Android读取本地json文件的方法.分享给大家供大家参考,具体如下: 1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson ...

  5. python播放本地视频_python opencv 读取本地视频文件 修改ffmpeg的方法

    Python + opencv 读取视频的三种情况: 情况一:通过摄像头采集视频 情况二:通过本地视频文件获取视频 情况三:通过摄像头录制视频,再读取录制的视频 摄像头采集.本地视频文件的读取.写视频 ...

  6. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

    其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类 ...

  7. Android 读取本地txt文件中的内容

    Android 读取本地txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileInputSt ...

  8. html 查看excel表格,html展示excel表格数据-html读取本地excel文件并展示

    怎么用html实现excel表格 首先html不能读取本地excel文件 其次就算是javascript 也是不允许的 这是为了安全考虑 如果前端脚本可以读取本地文件 那很不安全 如何将excel上的 ...

  9. jquery ajax json文件,jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  10. JS 变量保存为本地json文件,读取本地json文件为变量

    一.变量保存为本地json文件: 第一步:把返回的数据转成json格式 var content = json.stringify(data); 第二步:把转成blob这种格式             ...

最新文章

  1. ML基石_1_LearningProblem
  2. centos6.4修改网卡名
  3. 厉害了,3万字的MySQL精华总结 + 面试100问!
  4. Modelarts与无感识别技术生态总结(浅出版)
  5. linux tcp客户端端口号,Linux网络编程--服务器客户端(TCP实现)
  6. 华为100万部鸿蒙,2019年Q4发布 华为100万部鸿蒙OS手机已开测
  7. 微软软件基地落户广州
  8. phpcms上线步骤,无法生成缓存,页面空白原因
  9. 第二节 数值、字符与字符串
  10. CTWing-中国电信IoT物联网平台设备接入实战
  11. LWC 61:741. Cherry Pickup
  12. js把数字金额转换成中文大写数字
  13. cocos2d-x开源游戏引擎,C++开发iphone/android/uphone/win32游戏
  14. 播放视频时过滤播霸浏览器
  15. Google Colab中把pyth3.7版本更换成python2.7
  16. 高颜值蓝牙耳机有哪些?音质好颜值高的蓝牙耳机推荐
  17. av_register_all
  18. Spring Autowire自动装配 ---残梦追月原创
  19. 13道字符串笔试题及答案,总有一道你面试会遇上
  20. 重磅发布!RK3568开发板C应用编程手册

热门文章

  1. 如何选择适合的大数据分析软件
  2. UltraEdit 26 总是偶尔提示运行的是试用模式
  3. 视频如何分解成图片?怎么提取视频中的图片?
  4. 推荐一款手机app自动点击神器
  5. LeetCode题解(1818):绝对差值和(Python)
  6. 就业管理系统(Java毕业设计:SpringBoot项目)
  7. Android 获取屏幕高度、宽度
  8. APF有源滤波器仿真,三相三线制 谐波电流检测模块基于p-q方法,ip-iq等方法
  9. 连享会新命令 lxh:随时查看 Stata 资源
  10. lj245a引脚功能图_74HC245引脚图应用电路与中文资料