React引入Luckysheet以及使用心得

首先说明一下搭建环境

使用的框架为 Ant Design Pro ,最一开始的想法是直接用框架自带的可编辑表格实现功能,但是发现字段变多之后非常卡,无法解决。
在一个偶然的机会下了解到了Luckysheet,Luckysheet是一个纯前端且轻量化的表格组件,发现比较适合业务需要,所以开始尝试引入。

第一步、引入

Luckysheet官方文档地址

引入的一开始,在官网查看的时候,发现写的,就是在项目的index.html里面直接引入Luckysheet的css、js即可。自己刚开始接触React,并不太了解框架,然后我发现, Ant Design Pro 框架中并没有发现对应的index.html。

Ant Design Pro 查看文档的时候发现 Ant Design Pro 使用 Umi 作为开发工具,官方建议先查看 Umi 的常见问题,然后找到了HTML模板。新建 src/pages/document.ejs,umi 约定如果这个文件存在,会作为默认模板。
到这里开始引入,引入分为两种方式CDN和本地引入。

CDN


<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' />
<script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.umd.js"></script>

本地引入

npm run builddist文件夹下的所有文件复制到项目目录,然后通过相对路径引入


<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>

我这里选择了本地引入,因为项目涉及到一些内网使用的环境,并且后期我们根据需求对源码进行了部分修改。
后来发现好像还可以以插件的方式安装,这个后面再去看吧。

第二步、指定表格容器,创建表格


import React from 'react'
class Luckysheet extends React.Component {

    componentDidMount() {
        const luckysheet = window.luckysheet
        luckysheet.create({
            container: "luckysheet",
        });
    }
    render() {
        const luckyCss = {
            margin: '0px',
            padding: '0px',
            position: 'absolute',
            width: '100%',
            height: '100%',
            left: '0px',
            top: '0px'
        }
        return (
            <div id="luckysheet" style={luckyCss} ></div>
        )
    }
}

export default Luckysheet

第三步、引用组件


import React from 'react'
import './App.css'
import Luckysheet from './component/Luckysheet'

function App() {
  return (
    <div className="App">
      <header className="App-header">
          <Luckysheet/>
      </header>
    </div>
  );
}

export default App


后面这两步也是官方给示例。

开始使用

一些配置项

关于luckysheet.create(options)中的一些属性意义:


            const options = {
                container: "luckysheet",
                // 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页显示
                // },
                lang: "zh", // 设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en")
                data: [sheet0, sheet1, sheet2], // data里面放的是每一个sheet页的数据 js 或者 json
                hook:{
                	// 钩子函数有很多,具体可以自己去查看,简单放一个举例
                    // 单元格点击事件
					cellMousedownBefore:function(cell,postion,sheetFile,ctx){
						// console.log(postion);
					},
                }
            }

文件中的一个sheet的数据luckysheetfile[0]的结构如下:


{
	"name": "Cell", //工作表名称
	"color": "", //工作表颜色
	"index": "0", //工作表索引
	"status": "1", //激活状态
	"order": "0", //工作表的顺序
	"hide": 0,//是否隐藏
	"row": 100, //行数
	"column": 100, //列数
	"config": {
		"merge":{}, //合并单元格
		"rowlen":{}, //表格行高
		"columnlen":{}, //表格列宽
		"rowhidden":{}, //隐藏行
		"colhidden":{}, //隐藏列
		"borderInfo":{}, //边框
	},
	"celldata": [], //初始化使用的单元格数据
	"data": [], //更新和存储使用的单元格数据
	"scrollLeft": 0, //左右滚动条位置
	"scrollTop": 315, //上下滚动条位置
	"luckysheet_select_save": [], //选中的区域
	"luckysheet_conditionformat_save": {},//条件格式
	"calcChain": [],//公式链
	"isPivotTable":false,//是否数据透视表
	"pivotTable":{},//数据透视表设置
	"filter_select": {},//筛选范围
	"filter": null,//筛选配置
	"luckysheet_alternateformat_save": [], //交替颜色
	"luckysheet_alternateformat_save_modelCustom": [], //自定义交替颜色	
	"freezen": {}, //冻结行列
	"chart": [], //图表配置
	"visibledatarow": [], //所有行的位置
	"visibledatacolumn": [], //所有列的位置
	"ch_width": 2322, //工作表区域的宽度
	"rh_height": 949, //工作表区域的高度
	"load": "1", //已加载过此sheet的标识
}


具体可以去查看官网,这里只是复制一份。
ps:这里要注意的是属性很多,在你上面自定义修改的时候,相同属性会覆盖上面的内容,建议从在下面加

数据回显

  1. loadUrl ,我没用过,当时感觉不太适合我们的要求。
    作用:配置loadUrl接口地址,加载所有工作表的配置,并包含当前页单元格数据,与loadSheetUrl配合使用。参数为gridKey(表格主键)。

$.post(loadurl, {"gridKey" : server.gridKey}, function (d) {})

  1. setCellValue 在前端把数据遍历放入到表格中,可以用而且蛮好用的,但是数据多了比较慢。
  2. 后台处理数据,直接生成 cellData,前台sheet.cellData.push(...list),这个用起来速度快了一些,现在用的这个,暂时没有找到更好的办法。

数据保存

没啥好说的,得根据真实业务场景去处理,这里直接获取sheet页数据,然后遍历获取值v(或者m)
原始值 v 和显示值m区别:
假如原始值 v 为1,设置成百分比格式m就是100%,设置成两位小数数字m就是1.00
window.luckysheet.getSheet(index).data

导出与导入

这个根据官网常见问题中给的参考链接搞就可以。当时应该参考的这个。
使用exceljs导出luckysheet表格

从这开始想到啥说啥吧,虽然本来写的就不多。

关于数据定位

有个api,scroll([setting])

scroll([setting])
参数:
{PlainObject} [setting]: 可选参数
{Number} [scrollLeft]:横向滚动值。默认为当前横向滚动位置。
{Number} [scrollTop]:纵向滚动值。默认为当前纵向滚动位置。
{Number} [targetRow]:纵向滚动到指定的行号。默认为当前纵向滚动位置。
{Number} [targetColumn]:横向滚动到指定的列号。默认为当前横向滚动位置。
{Function} [success]: 表格刷新成功后的回调函数

说明:
滚动当前工作表位置

示例:
把数据显示在靠近屏幕中间的位置,直接写 i 会在第一行,同样的也可以设置其他属性。
luckysheet.scroll({ targetRow: i - 6 }) 
有个bug,如果为了突出换背景色,会去不掉,暂时还没解决。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: React Luckysheet 是一个基于 React 框架开发的一款在线表格编辑工具。它是基于著名的在线表格插件 Luckysheet 进行二次开发,以便在 React 项目中使用React Luckysheet 具有众多强大的功能和特点。首先,它提供了丰富的表格编辑功能。用户可以在表格中进行文本输入、数字计算、公式应用等操作,以便对数据进行处理和分析。同时,该工具还支持多选、拖拽、复制等快捷操作,提升了用户的使用体验。 其次,React Luckysheet 还具有强大的数据分析功能。用户可以使用内置的函数和公式对表格中的数据进行计算,比如求和、平均值、最大值等等。这个工具还支持数据排序、筛选和分组,使得数据分析更加方便和高效。 此外,React Luckysheet 还具备可视化配置能力。它提供了丰富的样式和格式选项,用户可以自定义表格的外观,如颜色、字体、边框等等。同时,该工具还支持数据的图表展示,用户可以通过图表直观地展示数据分析结果。 最后,React Luckysheet 还支持与其他组件的集成。它可以与其他 React 组件无缝结合,以便在 React 项目中进行更复杂的数据处理和展示操作。这为开发者提供了更大的灵活性和便利性。 总之,React Luckysheet 是一个功能强大的在线表格编辑工具,它在 React 应用中能够提供丰富的表格编辑、数据分析和可视化配置功能。它的使用能够提升用户的工作效率和数据处理能力。 ### 回答2: React Luckysheet是一个基于React框架开发的在线电子表格组件。Luckysheet是一款国产的开源在线电子表格前端模块,具有功能强大,性能优越的特点。React Luckysheet在此基础上进行了封装和整合,提供了基于React的易用性和灵活性。 React Luckysheet具有以下几个主要特点: 1. 强大的功能:React Luckysheet提供了丰富的电子表格功能,包括公式计算、数据格式化、数据排序、筛选、图表展示等。用户可以轻松完成各种复杂的数据处理和计算任务。 2. 优秀的性能:React Luckysheet采用了高性能的前端渲染技术,能够处理大型数据表格,并且具有卓越的响应速度和流畅的用户体验。 3. 可定制化:React Luckysheet提供了丰富的API和组件,可以根据项目需求进行定制开发。用户可以根据自己的需求进行布局和样式的调整,以及添加自定义的功能。 4. 良好的兼容性:React Luckysheet可以在各种浏览器和移动设备上正常运行,包括Chrome、Firefox、Safari等。并且还支持导入和导出Excel文件,与其他常见的电子表格工具进行无缝对接。 总之,React Luckysheet是一个功能强大、性能优越且易用的在线电子表格组件,适用于各种数据处理和计算任务。它的特点是强大的功能、优秀的性能、可定制化和良好的兼容性。通过使用React Luckysheet,可以有效提高开发效率和用户体验,帮助开发者轻松实现复杂的数据处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值