Vue3實(shí)現(xiàn)LuckSheet在線預(yù)覽Excel表格
LuckSheet和LuckyExcel
在前端開(kāi)發(fā)中預(yù)覽Excel文件是常見(jiàn)的需求之一。本文將介紹如何使用Vue.js框架以及兩個(gè)優(yōu)秀的Excel庫(kù)——LuckyExcel和Luckysheet,來(lái)實(shí)現(xiàn)Excel文件在線預(yù)覽功能。
LuckSheet是一款基于Web的在線表格組件,一款純前端類似excel的在線表格,功能強(qiáng)大、配置簡(jiǎn)單、完全開(kāi)源結(jié)合Vue3可以實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)展示和編輯,為用戶提供良好的用戶體驗(yàn)。
準(zhǔn)備工作
首先,需要在Vue3項(xiàng)目中安裝LuckSheet組件庫(kù),可以通過(guò)npm或yarn進(jìn)行安裝:
npm install luckysheet
或者
yarn add luckysheet
安裝完成后,可以在Vue3項(xiàng)目中引入LuckSheet組件并進(jìn)行配置。
【參考】Luckysheet官方文檔
實(shí)現(xiàn)LuckSheet組件
在Vue3項(xiàng)目中,可以創(chuàng)建一個(gè)LuckSheet組件來(lái)實(shí)現(xiàn)在線預(yù)覽Excel表格的功能。在LuckSheet組件中,可以使用LuckSheet提供的API來(lái)加載和展示Excel表格數(shù)據(jù),并且可以實(shí)現(xiàn)數(shù)據(jù)的編輯和保存功能。
<template>
<div>
<!-- excel表格容器 -->
<a-card :bordered="false" :style="{ background: '#fff' }">
<div id="luckysheet" :style="{ margin: '0px', padding: '0px', width: '100%', height: contentHeight + 'px' }" />
</a-card>
</div>
</template>
<script setup>
import $script from 'scriptjs'
import LuckyExcel from 'luckyexcel'
import { nextTick } from 'vue'
import { reactive } from 'vue'
import { message } from 'ant-design-vue'
//父組件傳遞參數(shù)
const props = defineProps({
fileUrl: {
type: String,
default: '',
},
fileName: {
type: String,
default: '',
},
})
const state = reactive({
fileUrl: '',
fileName: '',
})
//初始化加載
onMounted(() => {
//動(dòng)態(tài)引入文件
$script(['/lib/luckysheet/plugins/js/plugin.js', '/lib/luckysheet/luckysheet.umd.js', '/lib/luckysheet/loadCss.js'], 'luckysheet')
$script.ready('luckysheet', function () {
const fileUrl = props.fileUrl ? props.fileUrl : ''
const fileName = props.fileName ? props.fileName : ''
state.fileUrl = fileUrl
state.fileName = fileName
if (fileUrl == null) {
console.log('error')
} else {
// 加載文件內(nèi)容
openExcel({ url: fileUrl, name: fileName })
}
})
})
//監(jiān)聽(tīng)重新渲染組件
watch(
() => props.fileUrl,
() => {
openExcel({ url: props.fileUrl, name: props.fileName })
}
)
//動(dòng)態(tài)計(jì)算高度
const totalHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
const contentHeight = totalHeight - 230
//渲染excel
const openExcel = ({ url: url, name: name }) => {
nextTick(() => {
LuckyExcel.transformExcelToLuckyByUrl(url, name, (exportJson, luckysheetfile) => {
if (exportJson.sheets == null || exportJson.sheets.length === 0) {
message.warning('無(wú)法讀取excel的內(nèi)容')
return
}
const firstData = []
const secondData = {}
for (let i = 0; i < exportJson.sheets.length; i++) {
firstData[i] = {
name: exportJson.sheets[i].name,
index: exportJson.sheets[i].index,
order: exportJson.sheets[i].order,
status: exportJson.sheets[i].status,
config: exportJson.sheets[i].config,
}
firstData[i].config.row = 10
parseInt(exportJson.sheets[i].status) === 1 ? (firstData[i].celldata = exportJson.sheets[i].celldata) : 0 == 0
secondData[exportJson.sheets[i].index] = exportJson.sheets[i].celldata
}
// luckysheet生成網(wǎng)頁(yè)excel
window.luckysheet.destroy()
window.luckysheet.create({
lang: 'zh',
container: 'luckysheet', // 設(shè)定DOM容器的id
showtoolbar: false, // 是否顯示工具欄
showinfobar: false, // 是否顯示頂部信息欄
showstatisticBar: true, // 是否顯示底部計(jì)數(shù)欄
sheetBottomConfig: false, // sheet頁(yè)下方的添加行按鈕和回到頂部按鈕配置
allowEdit: false, // 是否允許前臺(tái)編輯
enableAddRow: false, // 是否允許增加行
enableAddCol: false, // 是否允許增加列
sheetFormulaBar: false, // 是否顯示公式欄
data: exportJson.sheets, //表格內(nèi)容
enableAddBackTop: true, //返回頂部
title: exportJson.info.name, //表格標(biāo)題
sheetRightClickConfig: {
delete: false, // 刪除
copy: false, // 復(fù)制
rename: false, //重命名
color: false, //更改顏色
hide: false, //隱藏,取消隱藏
move: false, //向左移,向右移
},
showsheetbarConfig: {
add: false,
},
devicePixelRatio: window.devicePixelRatio, //分辨率
defaultFontSize: 20, //默認(rèn)字體大小
cellRightClickConfig: {
copy: false, // 復(fù)制
copyAs: false, // 復(fù)制為
paste: false, // 粘貼
insertRow: false, // 插入行
insertColumn: false, // 插入列
deleteRow: false, // 刪除選中行
deleteColumn: false, // 刪除選中列
deleteCell: false, // 刪除單元格
hideRow: false, // 隱藏選中行和顯示選中行
hideColumn: false, // 隱藏選中列和顯示選中列
rowHeight: false, // 行高
columnWidth: false, // 列寬
clear: false, // 清除內(nèi)容
matrix: false, // 矩陣操作選區(qū)
sort: false, // 排序選區(qū)
filter: false, // 篩選選區(qū)
chart: false, // 圖表生成
image: false, // 插入圖片
link: false, // 插入鏈接
data: false, // 數(shù)據(jù)驗(yàn)證
cellFormat: false, // 設(shè)置單元格格式
},
})
})
})
}
</script>
在LuckSheet組件中,通過(guò)引入Luckysheet庫(kù)并動(dòng)態(tài)加載樣式文件,使用window.Luckysheet.create方法來(lái)創(chuàng)建LuckSheet實(shí)例,將Excel表格數(shù)據(jù)和配置選項(xiàng)傳入實(shí)例中即可實(shí)現(xiàn)在線預(yù)覽Excel表格的功能。
頁(yè)面使用
<template>
<div>
<a-card :bordered="false" :loading="loading" :style="{ background: '#fff' }">
<lucksheetExcel :fileName="state.fileName" :fileUrl="state.fileUrl"></lucksheetExcel>
</a-card>
</div>
</template>
<script lang="ts" setup>
//導(dǎo)入組件
import {lucksheetExcel } from 'xxxxxxx'
//預(yù)覽方式
const token = 'Bearer ' + getToken()
const fileUrlId = ref<string>('')
const state = reactive({
fileUrl: `${import.meta.env.VITE_AXIOS_BASE_URL}/file/download/${fileUrlId.value}?Authorization=${token}`,
fileName: '',
})
//預(yù)覽方法
const refreshTable = () => {
// params請(qǐng)求參數(shù)
getLucksheetAPI(params).then((res) => {
fileUrlId.value = res.data.fileId
state.fileUrl = `${import.meta.env.VITE_AXIOS_BASE_URL}/file/download/${fileUrlId.value}?Authorization=${token}`
})
.catch((err) => {
console.log(err)
})
}
onActivated(() => {
refreshTable()
})
</script>實(shí)現(xiàn)效果

結(jié)語(yǔ)
通過(guò)Vue3和LuckSheet的結(jié)合,可以實(shí)現(xiàn)方便快捷的在線預(yù)覽Excel表格功能,為用戶提供良好的數(shù)據(jù)展示和編輯體驗(yàn)。
以上就是Vue3實(shí)現(xiàn)LuckSheet在線預(yù)覽Excel表格的詳細(xì)內(nèi)容,更多關(guān)于Vue3在線預(yù)覽表格的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue項(xiàng)目中封裝echarts的優(yōu)雅方式分享
在實(shí)際項(xiàng)目開(kāi)發(fā)中,我們會(huì)經(jīng)常與圖表打交道,比如?訂單數(shù)量表、商品銷量表、會(huì)員數(shù)量表等等,它可能是以折線圖、柱狀圖、餅狀圖等等的方式來(lái)展現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中封裝echarts的優(yōu)雅方式的相關(guān)資料,需要的朋友可以參考下2022-03-03
Vue項(xiàng)目打包并部署nginx服務(wù)器的詳細(xì)步驟
vue項(xiàng)目開(kāi)發(fā)好之后需要部署到服務(wù)器上進(jìn)行外網(wǎng)訪問(wèn),下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包并部署nginx服務(wù)器的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
如何解決模塊““vue“”沒(méi)有導(dǎo)出的成員“ref”問(wèn)題
這篇文章主要介紹了如何解決模塊““vue“”沒(méi)有導(dǎo)出的成員“ref”問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
Vue + better-scroll 實(shí)現(xiàn)移動(dòng)端字母索引導(dǎo)航功能
better-scroll 是一款重點(diǎn)解決移動(dòng)端(已支持 PC)各種滾動(dòng)場(chǎng)景需求的插件。這篇文章主要介紹了Vue + better-scroll 實(shí)現(xiàn)移動(dòng)端字母索引導(dǎo)航功能,需要的朋友可以參考下2018-05-05
vue遞歸組件實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)
這篇文章主要為大家詳細(xì)介紹了vue遞歸組件實(shí)現(xiàn)樹(shù)形結(jié)構(gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
詳解Vue中的render:?h?=>?h(App)示例代碼
這篇文章主要介紹了Vue中的render:?h?=>?h(App),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09

