vue读取本地的excel文件并显示在网页上方法示例


Posted in Javascript onMay 29, 2019

我想实现读取一个本地的xlsx文件(task_list.xlsx)然后显示在网页上, 一开始选择的方法是建个express server, 通过发送axios请求来实现, 但是觉得只是读取一个本地文件还要搞个server太复杂了, 最终还是通过"xlsx"模块 + axios实现了读取本地文件, 无需后端, 步骤如下:

1.通过vue-cli新建项目:

vue读取本地的excel文件并显示在网页上方法示例

2.编写分析excel workbook的脚本

/src/scripts/read_xlsx.js

const XLSX = require('xlsx')

//将行,列转换
function transformSheets(sheets) {
 var content = []
 var content1 = []
 var tmplist = []
 for (let key in sheets){
  //读出来的workbook数据很难读,转换为json格式,参考https://github.com/SheetJS/js-xlsx#utility-functions
  tmplist.push(XLSX.utils.sheet_to_json(sheets[key]).length)
  content1.push(XLSX.utils.sheet_to_json(sheets[key]))
 }
 var maxLength = Math.max.apply(Math, tmplist)
 //进行行列转换
 for (let y in [...Array(maxLength)]){
  content.push([])
  for (let x in [...Array(tmplist.length)]) {
   try {
    for (let z in content1[x][y]){
     content[y].push(content1[x][y][z])
    }
   } catch (error) {
    content[y].push(' ')
   }
  }
 }
 content.unshift([])
 for (let key in sheets){
  content[0].push(key)
 }
 return content

}

export {transformSheets as default}

3.新建一个组件

/src/components/task_list.vue

<template>
 <div class="task-list">
  <p v-if="err!==''">{{err}}</p> <!-- 用来显示报错 -->
  <table style="margin:0 auto;" v-if="content!==''"> <!-- 设置居中,如果没获取到内容则不显示 -->
   <tr><th v-for="h in content[0]" :key="h.id">{{h}}</th></tr> <!-- 循环读取数据并显示 -->
   <tr v-for="row in content.slice(1,)" :key=row.id>
    <td v-for="item in row" :key=item.id>{{item}}</td>
   </tr>
  </table>
 </div>
</template>

<script>
import axios from 'axios'
import XLSX from 'xlsx'
import transformSheets from '../scripts/read_xlsx'  //导入转制函数

export default {
 name: 'TaskList',
 data: function () {
  return {
   content: '',  //初始化数据
   err: ''
  }
 },
 created() {
  var url = "/task_list.xlsx" //放在public目录下的文件可以直接访问
  
  //读取二进制excel文件,参考https://github.com/SheetJS/js-xlsx#utility-functions
  axios.get(url, {responseType:'arraybuffer'})
  .then((res) => {
    var data = new Uint8Array(res.data)
  var wb = XLSX.read(data, {type:"array"})
  var sheets = wb.Sheets
  this.content = transformSheets(sheets)
  }).catch( err =>{
   this.err = err
  })
 }
}

大功告成,编译然后部署到服务器吧

npm run build

部署就不详述了,把dist目录丢到服务器上就行.

vue读取本地的excel文件并显示在网页上方法示例

效果就是这样,编程新手,就这个东西断断续续搞了快一周了...

github地址 https://github.com/LeviDeng/task_list

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype 学习 工具函数学习($w,$F方法)
Jul 12 Javascript
一个报数游戏js版(约瑟夫环问题)
Aug 05 Javascript
Jquery中使用setInterval和setTimeout的方法
Apr 08 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
jquery基础知识第一讲之认识jquery
Mar 17 Javascript
jQuery表单事件实例代码分享
Aug 18 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
Aug 25 Javascript
详解如何创建并发布一个 vue 组件
Nov 08 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
Jun 11 Javascript
vue+echarts实现多条折线图
Mar 21 Vue.js
vue-cli3中vue.config.js配置教程详解
May 29 #Javascript
详解vue-cli3开发Chrome插件实践
May 29 #Javascript
vue里的data要用return返回的原因浅析
May 28 #Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
May 28 #Javascript
Javascript三种字符串连接方式及性能比较
May 28 #Javascript
vue+element实现表格新增、编辑、删除功能
May 28 #Javascript
Vue实现表格批量审核功能实例代码
May 28 #Javascript
You might like
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
Python标准库与第三方库详解
2014/07/22 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
百度吧主申请感言
2014/01/12 职场文书
文明学生标兵事迹
2014/01/21 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
领导离职感言
2015/08/03 职场文书