基于luckysheet实现在线电子表格和Excel在线预览

概述

本文基于luckysheet实现在线的电子表格,并基于luckyexcel实现excel文件的导入和在线预览。

效果

在线编辑器

在线预览

实现

1. luckysheet介绍

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

2. 实现

2.1 引入插件

本实例中直接引入编译好的js和css文件,需要引入的文件如下:

<link rel="stylesheet" type="text/css" href="/lib/luckysheet/luckysheet.css" />
<script src="/lib/luckysheet/plugin.js"></script>
<script src="/lib/luckysheet/luckysheet.umd.js"></script>
<script src="/lib/luckysheet/luckyexcel.umd.js"></script>

2.2 在线编辑器实现

<template>
  <div class="online-table" :id="domId"></div>
</template>

<script>
export default {
  props: {
    tableData: {
      type: Object,
      default: () => null,
    },
    name: {
      type: String,
      default: '新建表格',
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.init()
    })
  },
  watch: {
    tableData() {
      this.init()
    },
  },
  data() {
    return {
      domId: 'onlineTableDom',
    }
  },
  unmounted() {
    window.luckysheet.destroy()
  },
  methods: {
    init() {
      let options = {
        container: this.domId,
        title: this.name,
        lang: 'zh',
        showinfobar: false, // 右上角的用户信息展示样式
        plugins: [],
      }
    options.showtoolbarConfig = {
          undoRedo: false,
          currencyFormat: false, //货币格式
          percentageFormat: false, //百分比格式
          numberDecrease: false, // '减少小数位数'
          numberIncrease: false, // '增加小数位数
          textRotateMode: false, // '文本旋转方式'
          image: false, // '插入图片'
          chart: false, // '图表'(图标隐藏,但是如果配置了chart插件,右击仍然可以新建图表)
          postil: false, //'批注'
          screenshot: false, // '截图'
          findAndReplace: false, // '查找替换'
          moreFormats: false, // '更多格式'
      }
      if (this.tableData) options.data = this.tableData.data
      window.luckysheet.create(options)
    },
    getData() {
      return window.luckysheet.toJson()
    },
  },
}
</script>

<style scoped lang="scss">
.online-table {
  width: 100%;
  height: calc(100% - 4rem);
}
</style>

2.3 打开Excel文件

LuckyExcel.transformExcelToLucky(
	file, 
	function(exportJson, luckysheetfile){
		// 获得转化后的表格数据后,使用luckysheet初始化,或者更新已有的luckysheet工作簿
		// 注:luckysheet需要引入依赖包和初始化表格容器才可以使用
		luckysheet.create({
			container: 'luckysheet', // luckysheet is the container id
			data:exportJson.sheets,
			title:exportJson.info.name,
			userInfo:exportJson.info.name.creator
		});
	},
	function(err){
		logger.error('Import failed. Is your fail a valid xlsx?');
	}
);

2.4 在线预览excel

        const url = this.fileUrl
        window.LuckyExcel.transformExcelToLuckyByUrl(url, '测试文件', function (exportJson) {
          if (exportJson.sheets == null || exportJson.sheets.length == 0) {
            return
          }
          window.luckysheet.create({
            container: 'attachment',
            data: exportJson.sheets,
            title: exportJson.info.name,
            userInfo: exportJson.info.name.creator,
            showtoolbar: false, // 是否显示工具栏
            showinfobar: false, // 是否显示顶部信息栏
            allowEdit: false,
            enableAddRow: false, // 允许增加行
            enableAddCol: false, // 允许增加列
            showRowBar: false, // 是否显示行号区域
            showColumnBar: false, // 是否显示列号区域
            sheetFormulaBar: false, // 是否显示公式栏
            enableAddBackTop: false, //返回头部按钮
            rowHeaderWidth: 0, //纵坐标
            columnHeaderHeight: 0, //横坐标
            showstatisticBarConfig: {
              count: false,
              view: false,
              zoom: false,
            },
            hook: {
              cellMousedown() {
                return false
              },
            },
            showsheetbarConfig: {
              add: false, //新增sheet
              menu: false, //sheet管理菜单
              sheet: true, //sheet页显示
            },
            forceCalculation: true, //强制计算公式
          })
        })

相关文章

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 13:20:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 13:20:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 13:20:01       45 阅读
  4. Python语言-面向对象

    2024-07-20 13:20:01       55 阅读

热门阅读

  1. IP地址:由电脑还是网线决定?

    2024-07-20 13:20:01       15 阅读
  2. 【AI工具基础】—B树(B-tree)

    2024-07-20 13:20:01       18 阅读
  3. spring-gateway整合swagger2统一微服务接口文档

    2024-07-20 13:20:01       17 阅读
  4. 定个小目标之刷LeetCode热题(45)

    2024-07-20 13:20:01       20 阅读
  5. 人工势场法路径规划算法

    2024-07-20 13:20:01       14 阅读
  6. Android笔试面试题AI答之Activity(2)

    2024-07-20 13:20:01       18 阅读
  7. HIVE:使用get_json_object解析json对象

    2024-07-20 13:20:01       19 阅读
  8. Elasticsearch索引管理和生命周期管理

    2024-07-20 13:20:01       19 阅读
  9. 现代生活背景下陶瓷艺术设计的延伸与发展

    2024-07-20 13:20:01       20 阅读
  10. LeetCode 2956.找到两个数组中的公共元素:哈希表

    2024-07-20 13:20:01       19 阅读
  11. 麦芒30全新绽放,中国电信勾勒出AI手机的新方向

    2024-07-20 13:20:01       21 阅读
  12. Prometheus 运维中实际的故障案例以及解决办法

    2024-07-20 13:20:01       15 阅读