我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue-Luckysheet的使用方法及遇到问题解决方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue-Luckysheet的使用方法及遇到问题解决方法

Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。

配置文档 · API · 教程:快速上手 | Luckysheet文档

现将分享我在使用该组件过程中遇到的问题及解决方法。

第一步:定义Luckysheet组件:组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用,因此,先定义好可重复使用的Luckysheet组件。代码如下:

<template>
  <div class="hello">
    <div id="luckysheet" class="luckysheet-content"></div>
  </div>
</template>
 
<script>
export default {
  name: "HelloWorld",
  data() {
    return {};
  },
  mounted() {
    // In some cases, you need to use $nextTick
    // this.$nextTick(() => {
    $(function () {
      luckysheet.create({
        container: "luckysheet", // 设定DOM容器的id
        title: "Luckysheet Demo", // 设定表格名称
        lang: "zh", // 设定表格语言
        plugins: ["chart"],
        data: [
          {
            name: "", //工作表名称
            color: "#eee333", //工作表(工作表名称底部边框线)颜色
            index: 0, //工作表索引(新增一个工作表时该值是一个随机字符串)
            status: 1, //激活状态
            order: 0, //工作表的下标
            hide: 0, //是否隐藏
            row: 36, //行数
            column: 10, //列数
            defaultRowHeight: 28, //自定义行高,单位px
            defaultColWidth: 100, //自定义列宽,单位px
            celldata: [], //初始化使用的单元格数据,r代表行,c代表列,v代表该单元格的值,最后展示的是value1,value2
            config: {
              merge: {}, //合并单元格
              rowlen: {}, //表格行高
              columnlen: {}, //表格列宽
              rowhidden: {}, //隐藏行
              colhidden: {}, //隐藏列
              borderInfo: {}, //边框
              authority: {}, //工作表保护
            },
 
            scrollLeft: 0, //左右滚动条位置
            scrollTop: 0, //上下滚动条位置
            luckysheet_select_save: [], //选中的区域
            calcChain: [], //公式链
            isPivotTable: false, //是否数据透视表
            pivotTable: {}, //数据透视表设置
            filter_select: {}, //筛选范围
            filter: null, //筛选配置
            luckysheet_alternateformat_save: [], //交替颜色
            luckysheet_alternateformat_save_modelCustom: [], //自定义交替颜色
            luckysheet_conditionformat_save: {}, //条件格式
            frozen: {}, //冻结行列配置
            chart: [], //图表配置
            zoomRatio: 1, // 缩放比例
            image: [], //图片
            showGridLines: 1, //是否显示网格线
            dataVerification: {}, //数据验证配置
          },
        ],
        showtoolbar: false,
        showtoolbarConfig: {
          undoRedo: false, //撤销重做,注意撤消重做是两个按钮,由这一个配置决定显示还是隐藏
          paintFormat: false, //格式刷
          currencyFormat: false, //货币格式
          percentageFormat: false, //百分比格式
          numberDecrease: false, // '减少小数位数'
          numberIncrease: false, // '增加小数位数
          moreFormats: false, // '更多格式'
          font: false, // '字体'
          fontSize: false, // '字号大小'
          bold: false, // '粗体 (Ctrl+B)'
          italic: false, // '斜体 (Ctrl+I)'
          strikethrough: false, // '删除线 (Alt+Shift+5)'
          underline: false, // '下划线 (Alt+Shift+6)'
          textColor: false, // '文本颜色'
          fillColor: false, // '单元格颜色'
          border: false, // '边框'
          mergeCell: false, // '合并单元格'
          horizontalAlignMode: false, // '水平对齐方式'
          verticalAlignMode: false, // '垂直对齐方式'
          textWrapMode: false, // '换行方式'
          textRotateMode: false, // '文本旋转方式'
          image: false, // '插入图片'
          link: false, // '插入链接'
          chart: false, // '图表'(图标隐藏,但是如果配置了chart插件,右击仍然可以新建图表)
          postil: false, //'批注'
          pivotTable: false, //'数据透视表'
          function: false, // '公式'
          frozenMode: false, // '冻结方式'
          sortAndFilter: false, // '排序和筛选'
          conditionalFormat: false, // '条件格式'
          dataVerification: false, // '数据验证'
          splitColumn: false, // '分列'
          screenshot: false, // '截图'
          findAndReplace: false, // '查找替换'
          protection: false, // '工作表保护'
          print: false, // '打印'
        },
        showsheetbar: false, //是否显示底部sheet页按钮
        showsheetbarConfig: {
          add: false, //新增sheet
          menu: false, //sheet管理菜单
          sheet: false, //sheet页显示
        },
        showinfobar: false, //是否显示顶部信息栏
        showstatisticBar: false, //是否显示底部计数栏
        showstatisticBarConfig: {
          count: false, // 计数栏
          view: false, // 打印视图
          zoom: false, // 缩放
        },
        sheetFormulaBar: false, //是否显示公式栏
        allowCopy: false, //是否允许拷贝
        enableAddRow: true, //允许添加行
      });
    });
 
    // });
  },
};
</script>
<style lang="css" scoped>
.luckysheet-content {
  margin: 0px;
  padding: 0px;
  position: absolute;
  width: 100%;
  height: 500px;
  left: 0px;
  top: 40px;
  bottom: 0px;
}
</style>

页面样式效果是这样子的,可实现复制粘贴,excel的单元格下拉等表格操作,重点在于创建luckysheet实例时对实例属性的配置。

 第二步:引用组件,在父组件中注册并引用组件。先import 组件,再components 中注册,最后在以标签的形式引用组件。代码如下:

<template>
  <div id="app">
    <HelloWorld />
  </div>
</template>
 
<script>
import HelloWorld from './components/HelloWorld.vue'
 
export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

第三步:父组件将接口返回的数据传递给子组件,子组件获取数据渲染数据。代码如下:

父组件中获取数据并绑定参数传值。

<template>
  <div id="app">
    <HelloWorld v-bind:sheetParams="sheetParams" />
  </div>
</template>
 
<script>
import HelloWorld from "./components/HelloWorld.vue";
 
export default {
  name: "App",
  components: {
    HelloWorld,
  },
  data() {
    return {
      sheetParams: {
        excelHeader: ["姓名", "年龄", "性别"],
        excelData: {
          姓名: ["张三", "赵兰", "李四"],
          年龄: ["18", "17", "20"],
          性别: ["男", "女", "男"],
        },
      },
    };
  },
};
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

子组件获取父组件传递的数据,渲染数据。

<template>
  <div class="hello">
    <div id="luckysheet" class="luckysheet-content"></div>
  </div>
</template>
 
<script>
export default {
  name: "HelloWorld",
  props: {
    sheetParams: {},
  },
  data() {
    return {
      luckysheetOption: {
          container: "luckysheet", // 设定DOM容器的id
          title: "Luckysheet Demo", // 设定表格名称
          lang: "zh", // 设定表格语言
          plugins: ["chart"],
          data: [
            {
              name: "", //工作表名称
              color: "#eee333", //工作表(工作表名称底部边框线)颜色
              index: 0, //工作表索引(新增一个工作表时该值是一个随机字符串)
              status: 1, //激活状态
              order: 0, //工作表的下标
              hide: 0, //是否隐藏
              row: 36, //行数
              column: 10, //列数
              defaultRowHeight: 28, //自定义行高,单位px
              defaultColWidth: 100, //自定义列宽,单位px
              celldata: [], //初始化使用的单元格数据,r代表行,c代表列,v代表该单元格的值,最后展示的是value1,value2
              config: {
                merge: {}, //合并单元格
                rowlen: {}, //表格行高
                columnlen: {}, //表格列宽
                rowhidden: {}, //隐藏行
                colhidden: {}, //隐藏列
                borderInfo: {}, //边框
                authority: {}, //工作表保护
              },
 
              scrollLeft: 0, //左右滚动条位置
              scrollTop: 0, //上下滚动条位置
              luckysheet_select_save: [], //选中的区域
              calcChain: [], //公式链
              isPivotTable: false, //是否数据透视表
              pivotTable: {}, //数据透视表设置
              filter_select: {}, //筛选范围
              filter: null, //筛选配置
              luckysheet_alternateformat_save: [], //交替颜色
              luckysheet_alternateformat_save_modelCustom: [], //自定义交替颜色
              luckysheet_conditionformat_save: {}, //条件格式
              frozen: {}, //冻结行列配置
              chart: [], //图表配置
              zoomRatio: 1, // 缩放比例
              image: [], //图片
              showGridLines: 1, //是否显示网格线
              dataVerification: {}, //数据验证配置
            },
          ],
          showtoolbar: false,
          showtoolbarConfig: {
            undoRedo: false, //撤销重做,注意撤消重做是两个按钮,由这一个配置决定显示还是隐藏
            paintFormat: false, //格式刷
            currencyFormat: false, //货币格式
            percentageFormat: false, //百分比格式
            numberDecrease: false, // '减少小数位数'
            numberIncrease: false, // '增加小数位数
            moreFormats: false, // '更多格式'
            font: false, // '字体'
            fontSize: false, // '字号大小'
            bold: false, // '粗体 (Ctrl+B)'
            italic: false, // '斜体 (Ctrl+I)'
            strikethrough: false, // '删除线 (Alt+Shift+5)'
            underline: false, // '下划线 (Alt+Shift+6)'
            textColor: false, // '文本颜色'
            fillColor: false, // '单元格颜色'
            border: false, // '边框'
            mergeCell: false, // '合并单元格'
            horizontalAlignMode: false, // '水平对齐方式'
            verticalAlignMode: false, // '垂直对齐方式'
            textWrapMode: false, // '换行方式'
            textRotateMode: false, // '文本旋转方式'
            image: false, // '插入图片'
            link: false, // '插入链接'
            chart: false, // '图表'(图标隐藏,但是如果配置了chart插件,右击仍然可以新建图表)
            postil: false, //'批注'
            pivotTable: false, //'数据透视表'
            function: false, // '公式'
            frozenMode: false, // '冻结方式'
            sortAndFilter: false, // '排序和筛选'
            conditionalFormat: false, // '条件格式'
            dataVerification: false, // '数据验证'
            splitColumn: false, // '分列'
            screenshot: false, // '截图'
            findAndReplace: false, // '查找替换'
            protection: false, // '工作表保护'
            print: false, // '打印'
          },
          showsheetbar: false, //是否显示底部sheet页按钮
          showsheetbarConfig: {
            add: false, //新增sheet
            menu: false, //sheet管理菜单
            sheet: false, //sheet页显示
          },
          showinfobar: false, //是否显示顶部信息栏
          showstatisticBar: false, //是否显示底部计数栏
          showstatisticBarConfig: {
            count: false, // 计数栏
            view: false, // 打印视图
            zoom: false, // 缩放
          },
          sheetFormulaBar: false, //是否显示公式栏
          allowCopy: false, //是否允许拷贝
          enableAddRow: true, //允许添加行
        }
    };
  },
  created() {},
  mounted() {
    this.initLuckysheet(this.sheetParams);
  },
  methods: {
    initLuckysheet(data) {
      var _this = this;//注意这里要重新指定下this对象。
      
      // In some cases, you need to use $nextTick
      // this.$nextTick(() => {
      $(function () {
        if (data.excelHeader.length != 0 && JSON.stringify(data.excelData) != "{}") {
          _this.luckysheetOption.hook = {
            workbookCreateAfter: function () {
              _this.dataRendSheet(data.excelHeader, data.excelData);
            },
          };
        }
        luckysheet.create(_this.luckysheetOption);
      });
 
      // });
    },
    
    dataRendSheet(excelHeader, excelData) {
      //回显表格表头,第一行
      if (excelHeader.length > 0) {
        excelHeader.forEach((item1, index1) => {
          luckysheet.setCellValue(0, index1, item1);
          //普通回显数据
          if (JSON.stringify(excelData) != "{}") {
            excelData[item1].forEach((item2, index2) => {
              var row = index2 + 1;
              luckysheet.setCellValue(row, index1, item2);
            });
          }
        });
      }
    },
  },
};
</script>
<style lang="css" scoped>
.luckysheet-content {
  margin: 0px;
  padding: 0px;
  position: absolute;
  width: 100%;
  height: 500px;
  left: 0px;
  top: 40px;
  bottom: 0px;
}
</style>

表格回显数据如图:

 注意两点,第一数据格式,就是对象数组的转换,没什么难度;第二用到了Luckysheet的钩子函数,钩子函数的用法是在配置对象加一个hook对象,并给hook对象添加一个workbookCreateAfter方法,在工作簿创建好之后就执行这个函数的渲染数据的逻辑。

第四步:父组件获取子组件修改后的数据。父组件的布局和样式有调整,以对话框的形式来引用组件,点击按钮,获取数据。代码如下:

<template>
  <div id="app">
    <div>
      <el-dialog
        :title="luckysheetName"
        :visible.sync="centerDialogVisible"
        v-if="centerDialogVisible"
        width="50%"
        :fullscreen="fullscreen"
        :lock-scroll="lockScroll"
        :close-on-click-modal="closeOnClickModal"
        :close-on-press-escape="closeOnPressEscape"
      >
        <div style="width: 100%; height: 500px; position: relative">
          <!-- luckysheet 数据编辑组件引用 -->
         <HelloWorld
          ref="luckysheetRef"
          v-on:getLuckySheetData="receive"
          v-bind:sheetParams="sheetParams"
        />
        </div>
        <div slot="footer" class="dialog-footer">
          <el-button @click="handleToClose">取 消</el-button>
          <el-button type="primary" @click="saveSheetData">确 定</el-button>
        </div>
      </el-dialog>
      
    </div>
  </div>
</template>
 
<script>
import HelloWorld from "./components/HelloWorld.vue";
 
export default {
  name: "App",
  components: {
    HelloWorld,
  },
  data() {
    return {
      centerDialogVisible: true,
      closeOnClickModal: false,
      closeOnPressEscape: false,
      fullscreen: false,
      lockScroll: false,
      luckysheetName: "luckysheet数据编辑",
 
      sheetParams: {
        excelHeader: ["姓名", "年龄", "性别"],
        excelData: {
          姓名: ["张三", "赵兰", "李四"],
          年龄: ["18", "17", "20"],
          性别: ["男", "女", "男"],
        },
      },
      luckySheetData: {
        excelHeader: [],
        excelData: {},
      },
    };
  },
  methods: {
    saveSheetData() {
      var _this = this;
      _this.$refs.luckysheetRef.getSheetData(); //调用子组件获取sheet数据
      console.log(JSON.stringify(_this.luckySheetData));
      // document.getElementById("luckysheet-input-box").style.zIndex = "-1";
      // document.getElementsByClassName("luckysheet-cell-input").innerHTML = "";
      // _this.dialogFormVisible = false; //关闭对话框
    },
    //luckySheet数据接收
    receive: function (sheetTitle, commonData) {
      var _this = this;
      _this.luckySheetData.excelHeader = sheetTitle;
      _this.luckySheetData.excelData = commonData;
    },
    handleToClose() {
      this.centerDialogVisible = false;
    }
  },
};
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
 
</style>

页面效果如图:

 点击确定按钮,获取的数据格式为:

{"excelHeader":["姓名","年龄","性别"],"excelData":[{"姓名":"张三","年龄":18,"性别":"男"},{"姓名":"赵兰","年龄":17,"性别":"女"},{"姓名":"李四","年龄":20,"性别":"男"}]}

注意一:如果想每次打开对话框都重新加载数据和渲染画布,则在对话框加上两行代码:     :visible.sync="centerDialogVisible";v-if="centerDialogVisible"

注意二:luckysheet文件的引用路径一定要对,如图:

好了,今天分享的关于Luckysheet组件在vue中使用的方法,就到这里了,希望能够帮助到大家。

到此这篇关于Vue-Luckysheet的使用方法的文章就介绍到这了,更多相关Vue Luckysheet使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue-Luckysheet的使用方法及遇到问题解决方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue-Luckysheet的使用方法及遇到问题解决方法

Luckysheet,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源,这篇文章主要介绍了Vue-Luckysheet的使用方法,需要的朋友可以参考下
2022-11-13

使用python-slim镜像遇到无法使用PostgreSQL的问题及解决方法

目录前言报错排错解决使用 psycopg2-binary手动安装 libpq 库不同的python基础镜像小结前言之前不是把 DjangoStarter 的 docker 方案重新搞好了吗一开始demo部署是使用 SQLite 数据库的
使用python-slim镜像遇到无法使用PostgreSQL的问题及解决方法
2024-08-21

Java 画时钟遇到的问题及解决方法

这期内容当中小编将会给大家带来有关Java 画时钟遇到的问题及解决方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.不能一直得到当前的时间,导致刷新时间不变。刚开始我自以为把int s = calen
2023-06-25

安装vCenter6.0遇到的问题以及解决方法

实验环境: 在Window Server 2008 R2上安装vCenter6.0,数据库采用的SQL Server2012 问题一: 安装到50%的时候提示:无法启动invsvc服务以及无法运行vdcpromo等各种问题,点击确定后,
2023-06-04

Web开发中遇到的Python问题及解决方法

Web开发中遇到的Python问题及解决方法随着互联网的迅猛发展,Web开发变得越来越重要。而Python作为一种功能强大、易于学习的编程语言,成为了Web开发的首选语言之一。然而,在Python的Web开发过程中,会遇到各种各样的问题。本
2023-10-22

Python中遇到的小问题及解决方法汇总

本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习python。 一、Python的异常处理 因为想到自己不断尝试写小程序的话会用到抛出异常信息来判断哪里出现了问题:usage: raise [Exception
2022-06-04

关于同时使用swiper和echarts遇到的问题及解决方法

这篇文章主要介绍了关于同时使用swiper和echarts遇到的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-15

C++模板编程中遇到的问题及解决方法

C++模板编程中遇到的问题及解决方法引言:C++的模板是一种强大而灵活的工具,可以在编写代码时实现泛型编程,提高代码的复用性和可扩展性。然而,随着项目的复杂性增加,我们可能会遇到一些常见的问题。本文将讨论这些问题,并提供解决方法和具体的代码
2023-10-22

异步编程中遇到的Python问题及解决方法

异步编程中遇到的Python问题及解决方法在现代的编程中,异步编程变得越来越重要。它可以提高程序的性能和响应能力,但也会出现一些常见的问题。本文将介绍异步编程中遇到的一些常见问题,并提供相应的解决方法。同时,我们将使用Python语言进行示
2023-10-22

Windows下安装python MySQLdb遇到的问题及解决方法

片头语:因为工作需要,在CentOS上搭建环境MySQL+Python+MySQLdb,个人比较习惯使用Windows系统的操作习惯,对纯字符的OS暂时还不太习惯,所以,希望能在Windows系统上也搭建一个类似的环境,用于开发。下面介绍的
2022-06-04

pip安装Python库时遇到的问题及解决方法

笔者电脑系统是win7,同时安装了Python2.7和Python3.6,但是在通过命令行直接使用“pip install XXX”安装Python库时出现了以下的错误信息: Fatal error in launcher: Unable
2022-06-04

hybris backoffice创建product遇到的synchronization问题及解决方法

本篇文章为大家展示了hybris backoffice创建product遇到的synchronization问题及解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我从product DSC-H
2023-06-04

使用win8遇到的常见问题介绍与解决方法

问题1. 软件乱码多  这个问题恐怕是最令新手们头疼了,毕竟乱码不比英文,甭管你用什么翻译软件,想要弄清里面的内容几乎完全没有可能。那么遇到此类问题,我们到底该如何解决呢?  很简单,首先进入Control Panel→All C
2022-06-04

多线程编程中遇到的Python问题及解决方法

多线程编程中遇到的Python问题及解决方法Python是一种广泛使用的编程语言,它有许多优点,其中之一就是可以通过多线程来提高程序的执行效率。然而,在多线程编程中,也会遇到一些常见的问题。本文将讨论一些常见的多线程编程问题,并提供相应的解
2023-10-22

多进程编程中遇到的Python问题及解决方法

多进程编程中遇到的Python问题及解决方法,需要具体代码示例在Python中,多进程编程是一种常用的并发编程方式。它可以有效利用多核处理器的优势,提高程序的运行效率。然而,在进行多进程编程时,我们也会遇到一些问题。本文将介绍几个常见的问题
2023-10-22

数据库编程中遇到的Python问题及解决方法

数据库编程中遇到的Python问题及解决方法在进行数据库编程时,我们经常会遇到各种各样的问题,如连接数据库、创建表、插入数据、查询数据等等。本文将围绕数据库编程中常见的问题展开讨论,并提供相应的解决方法和代码示例,以帮助读者更好地理解和使用
2023-10-22

编程热搜

目录