vue讀取本地的excel文件并顯示在網(wǎng)頁(yè)上方法示例
我想實(shí)現(xiàn)讀取一個(gè)本地的xlsx文件(task_list.xlsx)然后顯示在網(wǎng)頁(yè)上, 一開(kāi)始選擇的方法是建個(gè)express server, 通過(guò)發(fā)送axios請(qǐng)求來(lái)實(shí)現(xiàn), 但是覺(jué)得只是讀取一個(gè)本地文件還要搞個(gè)server太復(fù)雜了, 最終還是通過(guò)"xlsx"模塊 + axios實(shí)現(xiàn)了讀取本地文件, 無(wú)需后端, 步驟如下:
1.通過(guò)vue-cli新建項(xiàng)目:

2.編寫(xiě)分析excel workbook的腳本
/src/scripts/read_xlsx.js
const XLSX = require('xlsx')
//將行,列轉(zhuǎn)換
function transformSheets(sheets) {
var content = []
var content1 = []
var tmplist = []
for (let key in sheets){
//讀出來(lái)的workbook數(shù)據(jù)很難讀,轉(zhuǎn)換為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)
//進(jìn)行行列轉(zhuǎn)換
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.新建一個(gè)組件
/src/components/task_list.vue
<template>
<div class="task-list">
<p v-if="err!==''">{{err}}</p> <!-- 用來(lái)顯示報(bào)錯(cuò) -->
<table style="margin:0 auto;" v-if="content!==''"> <!-- 設(shè)置居中,如果沒(méi)獲取到內(nèi)容則不顯示 -->
<tr><th v-for="h in content[0]" :key="h.id">{{h}}</th></tr> <!-- 循環(huán)讀取數(shù)據(jù)并顯示 -->
<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' //導(dǎo)入轉(zhuǎn)制函數(shù)
export default {
name: 'TaskList',
data: function () {
return {
content: '', //初始化數(shù)據(jù)
err: ''
}
},
created() {
var url = "/task_list.xlsx" //放在public目錄下的文件可以直接訪(fǎng)問(wèn)
//讀取二進(jìn)制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
})
}
}
大功告成,編譯然后部署到服務(wù)器吧
npm run build
部署就不詳述了,把dist目錄丟到服務(wù)器上就行.

效果就是這樣,編程新手,就這個(gè)東西斷斷續(xù)續(xù)搞了快一周了...
github地址 https://github.com/LeviDeng/task_list
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
記錄vue項(xiàng)目中遇到的一點(diǎn)小問(wèn)題
本文是腳本之家小編給大家收藏整理的關(guān)于vue項(xiàng)目中遇到的一點(diǎn)小問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
vue項(xiàng)目或網(wǎng)頁(yè)上實(shí)現(xiàn)文字轉(zhuǎn)換成語(yǔ)音播放功能
這篇文章主要介紹了在vue項(xiàng)目或網(wǎng)頁(yè)上實(shí)現(xiàn)文字轉(zhuǎn)換成語(yǔ)音,需要的朋友可以參考下2020-06-06
解決element-ui的el-select選擇器的@blur事件失效的坑
這篇文章主要介紹了解決element-ui的el-select選擇器的@blur事件失效的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue 詳情跳轉(zhuǎn)至列表頁(yè)實(shí)現(xiàn)列表頁(yè)緩存
這篇文章主要介紹了vue 詳情跳轉(zhuǎn)至列表頁(yè)實(shí)現(xiàn)列表頁(yè)緩存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

