【VUE 项目中使用luckysheet(在线表格)】

这篇具有很好参考价值的文章主要介绍了【VUE 项目中使用luckysheet(在线表格)】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

描述

🚀Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。但目前仅支持xlsx格式。

资料

官方文档: 快速上手 | Luckysheet文档
参考: 配置项
导出需要用到的export.js

本地引入

  1. 官网下载源码
  2. 安装依赖:运行命令npm i
  3. 打包:运行命令npm run build,会得到文件夹dist
  4. 复制dist文件夹中所有文件除了(除了index.html)粘贴到自己的项目在Vue 项目的public 目录下。
  5. Vue 项目中安装scriptjs:运行命令npm i scriptjs
  6. 前端方法导出需要安装exceljs、file-saver

组件开发

创建组件

<template>
	<div class="document">
		<input style="font-size:16px;" type="file" @change="uploadExcel" />
		<a href="javascript:void(0)" @click="downloadExcel">Download source xlsx file</a>
		<div :id="id" ref="luckysheetContainer" class="luckysheetContainer"></div>
	</div>
</template>

<script>
import $script from 'scriptjs'//用于引入css和js
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
import {testaaa,exportExcel} from './export'//文件链接第一节的资料中
export default {
	name: "LuckyExcel",
	props: {
        leTitle: {
			type: String,
			default: ''
		},
        leData: {
			type: Array,
			default: [{name:'Sheet1'}],
		},
		disabled: {
			type: Boolean,
			default: false
        },
        id:{
            type:String,
            default:'luckysheetContainer'
        }
	},
	data() {
		return {
			luckySheet: null,
		};
	},
	created() {
        this.load();
	},
	mounted() {
        
	},
	methods: {
        /**
		 * 加载编辑器
		 */
        load(){
            this.$nextTick(() => {
                // 设置全局变量,因为 editormd 依赖 jquery
                window.$ = window.jQuery = $;
                // 异步加载并执行
                $.getScript('/luckysheet/plugins/js/plugin.js', () => {
                    $script('/luckysheet/luckysheet.umd.js', () => {
						if(this.disabled){
                            this.createROLuckyExcel();
                        }else{
                            this.createLuckyExcel();
                        };
					});
                });
                // 加载css
                $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/css/pluginsCss.css'));
                $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/plugins.css'));
                $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/css/luckysheet.css'));
                $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/assets/iconfont/iconfont.css'));
            });
        },
        /**
		 * 只读版luckyExcel 创建
		 */
        createROLuckyExcel(){
            if(this.luckySheet) this.luckySheet.destroy();
            this.$nextTick(() => {
                let _this = this;
                $(function () {
                    luckysheet.create({
                        container: _this.id, //容器的ID
                        title:  _this.leTitle?_this.leTitle:'未命名文档', // 工作簿名称
                        lang: "zh", // 设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en")
                        allowCopy: false, // 是否允许拷贝
                        showtoolbar: false, // 是否显示工具栏
                        showinfobar: false, // 是否显示顶部信息栏
                        showsheetbar: false, // 是否显示底部sheet页按钮
                        showstatisticBar: false, // 是否显示底部计数栏
                        sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
                        allowEdit: false, // 是否允许前台编辑
                        enableAddRow: false, // 允许增加行
                        enableAddCol: false, // 允许增加列
                        userInfo: false, // 右上角的用户信息展示样式
                        showRowBar: false, // 是否显示行号区域
                        showColumnBar: false, // 是否显示列号区域
                        sheetFormulaBar: false, // 是否显示公式栏
                        enableAddBackTop: false,//返回头部按钮
                        rowHeaderWidth: 0,//纵坐标
                        columnHeaderHeight: 0,//横坐标
                        showstatisticBarConfig: {
                        count:false,
                        view:false,
                        zoom:false,
                        },
                        showsheetbarConfig: {
                        add: false, //新增sheet
                        menu: false, //sheet管理菜单
                        sheet: false, //sheet页显示
                        },
                        hook: {
                        cellMousedown:this.cellMousedown,//绑定鼠标事件
                        },
                        forceCalculation: true,//强制计算公式
                        data:_this.leData,
                    });
                    _this.luckySheet = luckysheet;
                });
            });
        },
		/**
		 * luckyExcel 创建
		 */
		createLuckyExcel() {
			this.$nextTick(() => {
                // 创建编辑器实例
                let _this = this;
                $(function () {
                    luckysheet.create({
                        container:  _this.id,
                        data:_this.leData,
                        title:  _this.leTitle?_this.leTitle:'未命名文档', // 工作簿名称
                        lang: "zh", // 设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en")
                        showinfobar: false,
                    });
                    _this.luckySheet = luckysheet;
                });
			});
		},
		/**
		 * wangEditor 销毁
		 */
		destroyLuckyExcel() {
            if(this.luckySheet){
                this.luckySheet.destroy();
			    this.luckySheet = null;
            };
		},
		/**
		 * 获取 luckyExcel 数据
		 */
		getLuckysheetData() {
			return this.luckySheet.getAllSheets();
		},
		/**
		 * 获取 luckyExcel 数据
		 */
		luckyExcelExitEditMode() {
            if(this.luckySheet){
                return this.luckySheet.exitEditMode();
            };
		},
		uploadExcel(evt){
	     	let _this=this;
	        const files = evt.target.files;
	        if(files==null || files.length==0){
	            alert("No files wait for import");
	            return;
	        }
	
	        let name = files[0].name;
	        let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length-1];
	        if(suffix!="xlsx"){
	            alert("Currently only supports the import of xlsx files");
	            return;
	        }
	        LuckyExcel.transformExcelToLucky(files[0], function(exportJson, luckysheetfile){
	
	            if(exportJson.sheets==null || exportJson.sheets.length==0){
	                alert("Failed to read the content of the excel file, currently does not support xls files!");
	                return;
	            }
	            _this.luckySheet.destroy();
	            console.log('exportJson.sheets',exportJson.sheets)
	            _this.luckySheet.create({
	                container: _this.id, //luckysheet is the container id
	                showinfobar:false,
	                data:exportJson.sheets,
	                title:exportJson.info.name,
	                userInfo:exportJson.info.name.creator
	            });
	        });
	    },
	    downloadExcel(){
	      exportExcel(luckysheet.getAllSheets(),"下载")
	      console.log('luckysheet.getAllSheets()s',luckysheet.getAllSheets());
	    }
	}
};
</script>

<style src="./LuckyExcel.scss" lang="scss" scoped></style>
<style lang="scss" >
    .luckysheet-cols-menu{
        z-index: 9004 !important;
    }
    .luckysheet-input-box{
        z-index: 3000 !important;
    }
    .luckysheet-wa-editor{
        z-index: 2005 !important;
    }
    #luckysheet-icon-morebtn-div{
        z-index: 3000 !important;
    }
    .luckysheet-modal-dialog-slider{
        z-index: 2005 !important;
    }
    .chartSetting{
        z-index: 3000 !important;
    }
</style>

//LuckyExcel.scss
.document{
	position: relative;
	width:100%;
	height: 100%;
	-webkit-animation-fill-mode: none;
    animation-fill-mode: none;
    .luckysheetContainer{
        margin:0px;
        padding:0px;
        position:absolute;
        width:100%;
        left: 0px;
        top: 0px;
        bottom:0px;
    }
}

组件使用

注意:

  1. 全局只能创建一个LuckyExcel,创建多个最后只会显示最后一个
  2. 一定要传入不同的id
//html
<div class="viewLEWrapper">
    <lucky-Excel ref="viewLuckyExcel"   :leData="viewLEData" :disabled="true" :id="'viewLuckyExcel'" v-if="showViewLuckyExcel"></lucky-Excel>
</div>
//组件引入
components:{
    LuckyExcel: () => import('@/components/LuckyExcel/LuckyExcel.vue'),
},
//methods
load(){
	this.viewLEData = content;//获取到的表格数据
    if(this.showViewLuckyExcel){//true代表已经加载过LuckyExcel,直接调用组件中的创建函数来加载LuckyExcel
        this.$refs.viewLuckyExcel.createROLuckyExcel();
     }else{ 
         this.showViewLuckyExcel = true; 
     };
},

使用中遇到的问题

1. 后台图表chartMix报undefined

原因是引用地址错误。
将luckysheet.umd.js中expendPlugins/chart/chartmix.umd.min.js改为luckysheet/expendPlugins/chart/chartmix.umd.min.js。expendPlugins/chart/chartmix.css改为luckysheet/expendPlugins/chart/chartmix.css。

2. 回显时默认显示第一个sheet

let getLuckyexcelData = this.$refs.luckyexcel.getLuckysheetData(); // 获取luckysheet数据
//显示默认显示第一个sheet
getLuckyexcelData.forEach((item,index) => {
    if(index == 0){
        item.status = 1;
    }else{
        item.status = 0;
    };
});

3. 单元格内换行后复制报错

解决Luckysheet单元格内换行后复制报错问题

4. 公式栏不显示类似html元素的值

解决Luckysheet公式栏不显示类似html元素的值

5. 导入带批注的Excel文件成功,但是批注消失

导入带批注的Excel文件成功,但是批注消失

6. 无法将图片插入到单元格中

无法将图片插入到单元格中

7. 只读模式下禁止复制

只读模式下禁止复制

8. 打印功能

打印功能
luckysheet实现打印

9. 单元格输入单引号后无法删除

单元格输入单引号后无法删除

10. 只读模式下禁止键盘按钮

(1) 修改文件keyboard.js
import { checkIsAllowEdit } from '../global/validate';

luckysheet vue,前端插件,vue.js,javascript,前端

(2) keydown监听事件
mounted(){
	window.addEventListener(
		"keydown",
		(e) => {
			if(
				(e.ctrlKey && e.code == "KeyC") ||
				(e.ctrlKey && e.code == "KeyX") ||
				(e.metaKey && e.code == "KeyC") ||
				(e.metaKey && e.code == "KeyX")
			){
				e.stopPropagation();
			}
		},{capture:true}
	);
},

其他问题的解决

其他问题的解决文章来源地址https://www.toymoban.com/news/detail-740524.html

到了这里,关于【VUE 项目中使用luckysheet(在线表格)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 工具.国内开源电子表格-Luckysheet(在线excel)

    国内开源电子表格-Luckysheet(在线excel,功能强大) – 【剪辑之家】 1、背景 现在web技术蓬勃发展,办公应用特别是excel都搬到了线上,比较流行的有腾讯文档,金山文档,石墨文档,google doc,这些都属于企业服务。但是小型企业或者团队,如果想自己搭建一套在线表格系统呢

    2024年02月06日
    浏览(32)
  • vue项目前端展示数学公式(在表格中渲染)

    现有需求为 将实验数据录入表格中,需要表格呈现物理公式,使用 Mathjax 在vue2中 进行呈现 1.安装 2.全局注册(main.js中)   私有组件   不想插入组件 在表格中如何使用  ps:渲染公式 需要先拿到对应的DOM元素 Mathjax语法总结 使用MathJax 3 渲染数学公式及在Vue中的使用 MathJax基本的使

    2024年01月23日
    浏览(34)
  • vue3 antd项目实战——table表格的自定义筛选【纯前端filters过滤、自定义筛选table表格数据】

    文章内容 文章链接 vue3 antd table 表格的基础搭建 https://blog.csdn.net/XSL_HR/article/details/128072745 ant design vue 组件库的引入与使用 https://blog.csdn.net/XSL_HR/article/details/127396384 在 后台管理系统 中,我们需要 对大量的数据进行展示、处理和操作 ,table表格也因此无处不在。而 ant design

    2024年01月25日
    浏览(42)
  • 前端插件库之vue3使用vue-codemirror插件

    基于 CodeMirror ,适用于 Vue 的 Web 代码编辑器。 1.命令行安装 如果运行官网例子时, 报错: 可以在终端中安装对应文件, 解决问题 2.在需要的组件中配置 代码编辑区 支持代码编辑区, 满足白天/黑夜主题切换, 满足c++/python语言切换 不足, 没有满足代码提示 组件代码 vue3 新手作品

    2024年02月04日
    浏览(39)
  • vue使用luckysheet,引入图表chartmix,实现打印按钮功能

    下载地址:https://github.com/dream-num/Luckysheet 按照下载地址提示 npm run build 打包源码,生成dist文件夹 ① 在vue项目的根目录public中新建luckysheet文件夹,然后将步骤1中的dist内的所有文件放到luckysheet中。 ② 在vue项目的根目录public的index.html文件中引入相关js和css ③ 验证是否成功引

    2024年01月24日
    浏览(24)
  • vue项目使用luckyexcel预览excel表格

    场景 最近工作中在开发文档上传并能在新窗口打开预览的功能。在此记录下心路历程。 方法 我总共尝试了2种方法预览excel,均可实现。 还发现一种方法可以实现,需要后端配合,叫做KKfileview。 1.使用luckyexcel插件实现xlsx的预览 2.使用file-viewer插件实现xlsx的预览 3.使用KKfil

    2024年02月09日
    浏览(29)
  • vue3如何实现使用SortableJs插件进行表格内的数据项拖拽排序

    npm i sortablejs --save 或者 yarn add sortablejs   我使用的组件库是ant design vue, 我主要使用的是Sortablejs 中的结束拖拽之后的onEnd 属性,因为是单表格的简单拖拽排序所以只用到了自带的参数对象evt的oldIndex和newIndex这两个属性,分别表示被拖拽的数据项拖拽前的下标和拖拽完成之后

    2024年02月11日
    浏览(41)
  • 如何使用Vue实现Excel表格数据的导入,在前端实现Excel表格文件的上传和解析,并使用Table组件将解析出来的数据展示在前端页面上

    随着互联网的发展和社会的进步,各个行业的数据量越来越大,对于数据的处理变得越来越重要。其中,Excel表格是一种重要的数据处理工具。在前后端项目中,实现Excel表格的导入和导出功能也愈加常见。这篇文章将介绍如何使用Vue实现Excel表格数据的导入。 在开始介绍实现

    2024年02月11日
    浏览(34)
  • vue+element-ui+springboot 在线表格编辑

    方法: 编辑excel 格式为需要的样子,另存为html 打开files文件,复制html部分代码和样式到vue文件 将需要编辑的部分使用控件填入 代码: 特别地: 服装列数可变,需要动态变换,同时有的可编辑,有的不可编辑 增加表格行数,可通过增加memberList 数据进行动态添加和删除,无

    2024年01月24日
    浏览(38)
  • Java之Spring Boot+Vue+Element UI前后端分离项目,前端插件化主流框架和实现原理

    三、设置Axios发起请求统一前缀的路径 https://code100.blog.csdn.net/article/details/123302546 1、HelloWorld.vue getInfo() { this.$http.get(‘blog/queryBlogByPage?title=’ + this.title + ‘page=’ + this.page + ‘rows=’ + this.rows) .then(response = ( this.info = response.data, this.total = this.info.total, this.totalPage = this.info.tota

    2024年04月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包