视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue读取本地的excel文件并显示在网页上方法示例
2020-11-27 21:55:56 责编:小采
文档


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

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

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目录丢到服务器上就行.


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

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

下载本文
显示全文
专题