vue3+ts+vite+element plus中使用luckysheet(预览效果)

news/2024/11/7 7:51:47/

前言:

        这两天一个项目,需要在页面中以excel的形式展示大量数据,喜欢偷懒的我果断扒拉了一堆适用于vue3的插件,下面简单说说我使用的luckysheet

使用:

一、准备一个vue3+ts+vite+element plus的项目

此处省略n个字。。。

嗯。。?先看个效果

看图就晓得,我这是只拿对自己有用的了,没用的直接全部干掉了。。

二、直接看luckysheet官网(文档写的还是非常详细的哟)

快速上手 | Luckysheet文档

三、按照教程添加luckysheet到自己项目中

1、引入方式:

        ①、cdn引入,②、下载到本地引入

cnd没啥问题,按照文档教程在index.html中卡卡一顿引入就好

重点说下下载到本地引入(因为本人使用的时候,下载打包遇到一些问题,所以直接把打包好的文件放在了网盘上,如果你下载官网提供的资源包出现npminstall 报错或者打包报错,可以直接去网盘提取)

链接:https://pan.baidu.com/s/182-mPDcVWtB4ldA0-y2ktA 
提取码:0000

当你已经有dist包的时候,你需要把dist包中所以文件(不包括index.html)引入到项目中去,我这边引入的是public静态文件中,然后在项目中index.html文件中引入

index.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="/favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title>//插入部分<link rel='stylesheet' href='./plugins/css/pluginsCss.css' /><link rel='stylesheet' href='./plugins/plugins.css' /><link rel='stylesheet' href='./css/luckysheet.css' /><link rel='stylesheet' href='./assets/iconfont/iconfont.css' /><script src="/plugins/js/plugin.js"></script><script src="/luckysheet.umd.js"></script></head><body><div id="app"></div><script type="module" src="/src/main.ts"></script>
</body></html>

2、安装依赖

"exceljs": "^4.3.0",
"luckyexcel": "^1.0.1",
"luckysheet": "^2.1.13",

3、直接封装luckysheet组件

注意:封装luckysheet组件的时候要参照官方文档中的配置信息来设置

<script setup lang="ts">
import { onMounted, watch } from 'vue'const emit = defineEmits(['luckyBack'])
const props = defineProps({luckySheetId: {type: String,required: true},luckySheetData: {type: Array,required: true}
})
declare let luckysheet: anyconst luckyS = (val) => {const ddd = val.luckySheetDataconst dataA = luckysheet.transToCellData(ddd)
//这一步是为了给首行首列设置背景颜色dataA.forEach((item) => {if (item.r === 0 && item.c > 1) {item.v = {bg: '#f5e041',v: item.v}}if (item.c === 0 && item.r > 1) {item.v = {bg: '#f5e041',v: item.v}}if (item.c === 0 && item.r === 0) {item.v = {bg: '#ff0000',v: item.v}}})const options = {showtoolbar: false, // 是否显示工具栏showinfobar: false, // 是否显示顶部信息栏showsheetbar: false,showstatisticBar: false, // 是否显示底部sheet按钮lang: 'zh', // 设定表格语言cellRightClickConfig: {copy: false, // 复制copyAs: false, // 复制为paste: false, // 粘贴insertRow: false, // 插入行insertColumn: false, // 插入列deleteRow: false, // 删除选中行deleteColumn: false, // 删除选中列deleteCell: false, // 删除单元格hideRow: false, // 隐藏选中行和显示选中行hideColumn: false, // 隐藏选中列和显示选中列rowHeight: false, // 行高columnWidth: false, // 列宽clear: false, // 清除内容matrix: false, // 矩阵操作选区sort: false, // 排序选区filter: false, // 筛选选区chart: false, // 图表生成image: false, // 插入图片link: false, // 插入链接data: false, // 数据验证cellFormat: false // 设置单元格格式,},enableAddRow: false, // 允许添加行enableAddBackTop: false, // 允许回顶部sheetFormulaBar: false, // 是否显示公式栏showstatisticBarConfig: {zoom: true},container: val.luckySheetId // luckysheet为容器id}console.log(options.container)options.data = [{celldata: dataA,row: 50,frozen: {   //锁定指定行列type: 'rangeBoth',range: { row_focus: 1, column_focus: 1 }}}]luckysheet.create(options)
}
watch(() => props.luckySheetData,(val) => {console.log(val, props)luckyS(props)},{ deep: true }
)onMounted(() => {luckyS(props)
})
const mouseupaa = () => {const range = luckysheet.getRange()emit('luckyBack', { range })console.log('@@@@@@@@@@@@@@22', range)
}
</script><template><div:id="luckySheetId"@mouseup="mouseupaa"style="position: relative; width: 100%; height: 95%; left: 0px"></div>
</template>
<style scoped lang="scss"></style>

4、在需要使用的地方引入

import LuckySheet from '@/components/Luckysheet/index.vue'const luckySheetId = ref('LuckySheetId')
const luckySheetData = reactive([])// 接收传过来的值
const luckyBack = (e) => {console.log(e)
}<div>
<LuckySheetstyle="height: 80%":luckySheetId="luckySheetId":luckySheetData="luckySheetData"@luckyBack="luckyBack"
></LuckySheet>
</div>

ok!到这里基本上完事了,大毛病没有,小毛病。。。。

遇到问题:根据luckysheet设计思路,好像一个项目中只能渲染出来一个,就算设置不同的容器id,后面渲染的直接就把前面渲染的干死了。。。嗯,感觉这点不太友好!有可以同时渲染多个的方法可以留言


http://www.ppmy.cn/news/404118.html

相关文章

618父亲节,感恩的祝福送给父亲!

父亲节&#xff08;Fathers Day&#xff09;&#xff0c;是感恩父亲的节日。Fathers day, is a day of thanksgiving for fathers. 第一个提出父亲节理念的人是1906年的多德夫人。她想用一个特殊的日子来纪念她的父亲&#xff0c;她的妈妈多年前就去世了。起初&#xff0c;多德…

【闭包函数与装饰器大全】——python基础

目录索引 闭包&#xff1a;闭包三要素&#xff1a;闭包的作用&#xff1a;闭包演示&#xff1a;闭包的意义&#xff1a; 装饰器&#xff1a;特点&#xff1a;实例演示&#xff1a;实例演示2之参数&#xff1a; 装饰器常用的场景&#xff1a;编写一个计时的装饰器&#xff1a;*普…

实测Maven依赖包可通过域名抢注实现钓鱼攻击吗

先说结论&#xff1a;基本不可行 原理 Maven包中 groupId 字段是域名反写&#xff0c;比如你有一个 12345.com&#xff0c;就可以申请到 com.12345 的groupId。 很多开源项目都停止维护&#xff0c;但是很多人使用&#xff0c;这些团队可能忘记续费域名&#xff1b;同时目前…

永久存储:文件处理与路径处理

&#x1f4e2;博客主页&#xff1a;盾山狂热粉的博客_CSDN博客-C、C语言,机器视觉领域博主&#x1f4e2;努力努力再努力嗷~~~✨ &#x1f4a1;大纲 ⭕如何将数据永久的存放到硬盘上 &#x1f449;不要打开文件&#xff0c;然后直接关闭文件&#xff0c;会导致截断 一、如何操作…

JavaScript中基本数据类型怎样使用?

JavaScript中的数据类型分为两大类&#xff0c;分别是基本数据类型和复杂数据类型(或称为引用数据类型)&#xff0c;如图所示。 本节重点讲解基本数据类型。下面我们用代码演示基本数据类型的使用。 (1)数字型(Number)&#xff0c;包含整型值和浮点型值: var numl 21; …

小米笔记本AIR3触控板使用技巧

单指滑动&#xff1a;移动鼠标 单指轻点&#xff1a;鼠标左键点击 双指同时轻点&#xff1a;鼠标右键点击 双指同时上下滑动&#xff1a;鼠标中键滑轮 三指同时下滑&#xff1a;返回桌面 四指同时上滑&#xff1a;进入程序切换页面 单指快速点击两下且第二下不放开并移动…

笔记本电脑鼠标移动时卡顿

去官网下载显卡安装程序去更新显卡驱动&#xff0c;没有用&#xff0c;必须要把原来的显卡驱动卸载掉&#xff0c;再用管理员身份去安装驱动&#xff0c;否则无效&#xff01; 把原来的显卡驱动卸载掉。 去官网下载最新本显卡的驱动。用管理员身份去运行安装程序。重启电脑&am…

笔记本电脑插入USB鼠标键盘失效问题解决

注册表中可以设置&#xff1a;在USB接口插上鼠标&#xff0c;PS2接口就禁用&#xff0c;其目的是禁用触摸板。但是如果键盘也是PS2接口的&#xff0c;也很可能被一并禁用了。具体设置方法可以网络上查看注册表中下面两项的设置细节[HKEY_CURRENT_USER\Software\Synaptics\SynTP…