首页 > 其他分享 >luckysheet踩坑记录

luckysheet踩坑记录

时间:2023-01-17 11:46:14浏览次数:36  
标签:luckysheet 记录 单元格 cell 复制 提交 格式 ct

这几天接手一个luckysheet的项目,新需求+填坑总共花了一周,整理下踩的坑。

一,数字变为科学计数

  这个真的是要给开发团队特别狠的法克鱿,已经设置文本的单元格(sheet和excel两边都是),在贴贴excel单元格的时候会自动被覆盖成一个科学计数法。如果你觉得仅仅是一个样式问题就错了,直接复制单元格并不会触发cellUpdated,cellUpdateBefore,cellEditBefore,cellMousedownBefore等方法,简单来说你没有双击到单元格内部的,这些方法统统不触发。

①格式设置

  挣扎了两天后,我还是找到了个方法cellRenderBefore(cell: any, position: any)

,渲染前,所有表格滚动导致新增行,贴贴内容导致的新增行或者更新行,删除行都会触发这个方法,终于蹭进来了=。=

  

 let ct = { fa: "@", t: "s" };  if (!cell) {//空白格初始化为文本格式                 nativeWindow.luckysheet.setCellFormat(position.r, position.c, "ct", ct);  }   这一段的效果就是直接贴超长数字给新的空白格也没问题,但是直接复制单元格依然会出错。当时我就艹了,把console打烂了之后,我发现虽然所有的空白格默认是没有cell格式的,但是贴贴时会根据内容给一个初始化的格式,这里是先天带坑!所以单元格的格式会覆盖你设置了的格式。  if (cell && cell.ct.t != "s") {//包含科学计数被强制覆盖的,单独处理                 nativeWindow.luckysheet.setCellFormat(position.r, position.c, "ct", ct); }   ②内容修正   到了这里总算把格式重置好了,但是显示的内容还是科学计数,还需要修正,原始的复制数据又找了半天,因为这个钩子函数不在单元格的函数集里,是在工作表里。   rangePasteBefore(Array: any, data: any)     前者记录你复制的单元格的起始位置,后者记录你复制的数据。   这里又有三个坑:     位置部分仅包含起始的位置,你复制了几行几列,这个不会存;     复制多行时,复制的内容会包含一堆col,一开始我以为是记录列结构的,后面发现我想多了,这里球用没有,想获取列只能根据每个tr里的td数量来确定;     如果复制的时候列宽不够,显示的xxxx,那真的就复制xxxx,这个效果看的我直呼高效。   了解坑后,通过计算存储每次复制的起始行列和内容集,可以在cellRenderBefore 时把科学计数的内容还原。

③懒渲染   并不是贴贴后所有的内容都会重新赋值了,你没有滚动下去,那些没展示的内容依然是科学计数吧,一提交就g。并且,提交时的赋值是在提交后生效,应该是考虑到性能问题,这个函数是微任务。   所以在提交时还有两部,一方面是提交时也强势刷新数据,另一方面提交要加个异步。 funSaveSheetData(): void {     new Promise((resolve, reject) => {       this.SaveSheetData();       resolve('');     }).then(() => {       this.SendSheetData(this);     })   }   二,单元格可复制及换行  ①允许复制:allowCopy: true   同时要注意,在之前截获复制的方法rangePasteBefore内,解析数据时要增加判断,保证默认的复制功能正常 ②允许换行   cell.tb=2,这里又忍不住吐槽了,你行高可以动态拉伸,为什么列宽只能设置固定啊? 三,设置格式及删除后保存   一旦有了格式,sheet会认为这是有效单元格,提交时会把这个单元格算进来,所以在提交前需要判断有效的单元格。  

标签:luckysheet,记录,单元格,cell,复制,提交,格式,ct
From: https://www.cnblogs.com/ashlly/p/17057459.html

相关文章

  • t团队日常记录 20230117
    上次记录是14号,中间调整了下,感觉从技术框架技术栈上也进行了突破。整体上要花费的时间成本也是跟上班差不多的,之前不管是在北京还是上海工作,都要在路上浪费一定的时间,......
  • zookeeper-3.8.0安装记录
    简单记录一下安装过程conf/zoo.cfg末尾添加如下内容server.0=192.168.30.125:2888:3888server.1=192.168.30.151:2888:3888server.2=192.168.30.206:2888:3888在zoo......
  • 如何查询网站历史记录?怎样查询网站历史记录?
    有个想购买二手域名的朋友问小黑:如何查看网站历史记录?于是今天就分享查看网站历史记录的2种办法:网站历史记录和快照。如果你在下单之前想查一查域名以前做过些什么,有没有违......
  • 学会使用 SAP ABAP Application Log 在代码里添加应用日志记录功能试读版
    笔者在知乎上回答了一个关于SAP系统权限管控的问题:SAP有没有办法可以跳过权限测试function?在问题的回答里笔者提到:如果是SAPABAP系统,并且用户具有开发权限,那......
  • 学习记录-迭代器模式
    迭代器模式迭代器模式(IteratorPattern)是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式......
  • 学习记录-备忘录模式
    备忘录模式备忘录模式(MementoPattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图:在不破坏封装性的前提下,捕获一个对象的内......
  • 记录Qt Creator 更改默认构建目录到工程目录下
     QtCreator更改默认构建目录到工程目录下_静世孔明的博客-CSDN博客 QtCreator修改调试文件夹debug生成路径_黑黑black的博客-CSDN博客_qt如何更改debug文件目录......
  • WC2023 做题记录
    Day1下午HammertoFall题意:给你一张\(n\)个点\(m\)条边的边权非负的无向图,每个点上有\(a_i\)个人。总共经过\(q\)天,每天结束时轰炸一个节点\(b_i\)。每天......
  • C语言家庭日常消费记录管理系统
    C语言家庭日常消费记录管理系统题目:家庭日常消费记录管理系统一、功能需求说明(必须采用动态链表实现)1.消费记录存在文件fee.dat中格式如下:每一条记录包括一个消费......
  • cita-sdk react16.9 依赖安装及运行问题经验记录
    运行环境查找选择node稳定版本发布时间,技术框架发布时间一致即可nodev10.18.0reactv16.9.0pythonv2.7.18安装cita-sdk一直报错上面两个错误一直循环报错,但最后......