luckysheet踩坑记录 您所在的位置:网站首页 为什么要引入科学计数法 luckysheet踩坑记录

luckysheet踩坑记录

2024-05-19 08:01| 来源: 网络整理| 查看: 265

这几天接手一个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会认为这是有效单元格,提交时会把这个单元格算进来,所以在提交前需要判断有效的单元格。  


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有