GCExcel currentCell.getPrecedents()得到的信息是错的(DOCXLS-7256)
本帖最后由 Clark.Pan 于 2022-12-20 10:32 编辑Hi team,
这里有个问题,有个格子的公式如下图的右图,然后通过currentCell.getPrecedents()得到的引用居然不对,不和公式里的表match,请问这个是怎么回事,应该怎么解决。
更新一下目前情况,我们经过调研之后,目前暂时不会对此问题做修复,理由如下:
在Excel中,如果FomulaBar输入了一个不存在的worksheet的单元格,Excel会偷偷的把它转换成一个外部文件的单元格,所有的规则参照外部引用对待。这种偷偷转成外部文件的单元格的做法首先让人不好理解,会造成使用上的误解。另外一点就是这样做一步小心就增加一些无效的外部引用,对文件本身内容会造成影响,经过综合考虑后我们没有学习Excel这种做法。
在GcExcel早期,这种输入不存在单元格的公式的做法是会抛异常的,但后来导入json的时候,尤其是一个sheet一个sheet导入json的时候,又往往会出现这种引用不存在单元格的情况,所有把抛异常的代码就删除了
值得注意的是,因为Excel中的公式是不会出现不存在的单元格的,它只是偷偷把它转换了,这样它内部逻辑上始终是严密的
如果我们把公式有不存在的单元格当成一种正常情况对待,就会带来一系列问题:
我们和Excel不兼容了,导出Excel文件的时候,这些单元格怎么处理
所以我们最终的建议就是:
公式中引用不存在的单元格的做法违背了我们最初的设计,建议用户尽可能不要出现这样的情况,毕竟这不是一个正常的case。
长远角度考虑可能会采取之前抛异常的方式,来避免用户不小心输入不存在的单元格。 您好,请您上传对应的ssjson或者Excel 文件,并注明是哪一个sheet与具体出现问题单元格的位置 Clark.Pan 发表于 2022-12-19 09:49
您好,请您上传对应的ssjson或者Excel 文件,并注明是哪一个sheet与具体出现问题单元格的位置
你可以自己建2个sheet,然后将其中一个sheet1 B2引用另外一个sheet2的格子B5,然后再把sheet2给删除,你使用GCexcel读到sheet1 B2的格子的getPrecedent(false)得到的就是 sheet1!B5,而不是sheet2!B5 本帖最后由 Clark.Pan 于 2022-12-19 15:49 编辑
您好,经过测试,并不会导致引用错乱,只是会清空对应的precedents,这是没问题的。
测试的版本是V5.2.5。建议您升级到V5.2.5再次进行测试。如果还有问题,那么请您提供对应能够重现问题的demo
Clark.Pan 发表于 2022-12-19 15:48
您好,经过测试,并不会导致引用错乱,只是会清空对应的precedents,这是没问题的。
测试的版本是V5.2.5。 ...
我重现出来了
lynn8588 发表于 2022-12-20 09:48
我重现出来了
其实我还是希望能得到sheet2!B5,因为这样能把他替换成0或者“”,这样就不会显示ref。因为我们有这样的需求 比如一个格子的公式=Sheet2!B5+Sheet3!B6+A3,如果其中sheet2不存在了,那么需要改成 0+Sheet3!B6+A3,因为workbook中有很多sheet,不知道哪些格子里配置了不存在的sheet,所以要去ref的值里面找,并且还得找对一坨替换成0,因为 shee2!后面可以是任意一个格子 您好,该问题已复现并提交给开发DOCXLS-7256,本帖改为保留处理并移至BUG反馈版块。
感谢您的反馈,附上金币奖励。 Clark.Pan 发表于 2022-12-20 10:32
您好,该问题已复现并提交给开发DOCXLS-7256,本帖改为保留处理并移至BUG反馈版块。
感谢您的反馈,附上金 ...
请问这个问题什么时候能解决,并且能保留正确的引用公式,不要清空,或者你们能提供一个方法获取整个workbook里引用不存在的list的,这样也行,但是不要清空,不然我们这边替换不了值,谢谢! 目前开发还在调研中,具体如何来修复还要根据调研结果结合实际情况进行。
页:
[1]
2