excel老折磨了,好不容易找到个看起来挺好用的开源插件,结果BUG也还挺多……
luckysheet的初始化渲染,往data里面填值后,他只拿data的v(真实值),不拿data的m(显示值)来渲染,这就造成了比如我做了个显示值为“名字”,真实值为"name"的单元格,然后利用初始化方法luckysheet.create(option)传进的option.data中来进行初始化渲染时,所有单元格都只会渲染真实值。翻看源码
m直接取了value,value是处理过的v
所以可以这么做
1、上送接口存的时候顺带存下来选取的范围
2、渲染的时候先利用luckysheet.create来进行初始化渲染,锚上所有样式
3、利用存下来的范围和luckysheet.setRangeValue来锚显示值
这样做的话等于说是渲染了两遍,先渲染了格式,然后再用有显示值的数据覆盖渲染一遍
但是在实际测试中出现了另外的问题:luckysheet.create初始化时公式是有效的,luckysheet.setRangeValue渲染时公式无效了,还是翻源码,发现原因在这
setRangeValue本质上是在遍历调用setCellValue进行单元格赋值,而setCellValue方法只有当v==null时才会去触发设置公式的方法
所以现在有了最终方案
1、上送接口存的时候顺带存下来选取的范围
2、渲染的时候先利用luckysheet.create来进行初始化渲染,锚上所有样式
3、摘出需要渲染的data值,找有f属性的对象,给该对象的v赋值为null
4、利用存下来的范围和第三步处理过的数据调用luckysheet.setRangeValue来锚值
经过测试,样式和公式都能渲染出来