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

2.編寫分析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){
//讀出來的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> <!-- 用來顯示報(bào)錯(cuò) -->
<table style="margin:0 auto;" v-if="content!==''"> <!-- 設(shè)置居中,如果沒獲取到內(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目錄下的文件可以直接訪問
//讀取二進(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)文章
Vue3生命周期Hooks原理與調(diào)度器Scheduler關(guān)系
這篇文章主要為大家介紹了Vue3生命周期Hooks原理與調(diào)度器Scheduler關(guān)系詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
vue實(shí)現(xiàn)點(diǎn)擊翻轉(zhuǎn)效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)點(diǎn)擊翻轉(zhuǎn)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
Vue.js 中取得后臺(tái)原生HTML字符串 原樣顯示問題的解決方法
這篇文章主要介紹了VUE.js 中取得后臺(tái)原生HTML字符串 原樣顯示問題 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
Vue3使用Lottie實(shí)現(xiàn)一個(gè)簡(jiǎn)單的加載動(dòng)畫
Lottie 是一個(gè)流行的動(dòng)畫庫(kù),它允許我們使用 JSON 文件來渲染高質(zhì)量的動(dòng)畫,本文將介紹一下如何在Vue3中集成 Lottie 動(dòng)畫實(shí)現(xiàn)一個(gè)加載動(dòng)畫效果,需要的可以了解下2025-02-02
關(guān)于vue中根據(jù)用戶權(quán)限動(dòng)態(tài)添加路由的問題
每次路由發(fā)生變化時(shí)都需要調(diào)用一次路由守衛(wèi),并且store中的數(shù)據(jù)會(huì)在每次刷新的時(shí)候清空,因此需要判斷store中是否有添加的動(dòng)態(tài)路由,本文給大家分享vue中根據(jù)用戶權(quán)限動(dòng)態(tài)添加路由的問題,感興趣的朋友一起看看吧2021-11-11

