找回密码
 立即注册

QQ登录

只需一步,快速开始

lynn8588

金牌服务用户

40

主题

161

帖子

413

积分

金牌服务用户

积分
413
lynn8588
金牌服务用户   /  发表于:2022-12-18 11:45  /   查看:4994  /  回复:12
1金币
本帖最后由 Clark.Pan 于 2022-12-20 10:32 编辑


Hi team,

这里有个问题,有个格子的公式如下图的右图,然后通过currentCell.getPrecedents()得到的引用居然不对,不和公式里的表match,请问这个是怎么回事,应该怎么解决。


image.png435934447.png

最佳答案

查看完整内容

更新一下目前情况,我们经过调研之后,目前暂时不会对此问题做修复,理由如下: 在Excel中,如果FomulaBar输入了一个不存在的worksheet的单元格,Excel会偷偷的把它转换成一个外部文件的单元格,所有的规则参照外部引用对待。这种偷偷转成外部文件的单元格的做法首先让人不好理解,会造成使用上的误解。另外一点就是这样做一步小心就增加一些无效的外部引用,对文件本身内容会造成影响,经过综合考虑后我们没有学习Excel这种做法 ...

12 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-18 11:45:19
来自 10#
更新一下目前情况,我们经过调研之后,目前暂时不会对此问题做修复,理由如下:
在Excel中,如果FomulaBar输入了一个不存在的worksheet的单元格,Excel会偷偷的把它转换成一个外部文件的单元格,所有的规则参照外部引用对待。这种偷偷转成外部文件的单元格的做法首先让人不好理解,会造成使用上的误解。另外一点就是这样做一步小心就增加一些无效的外部引用,对文件本身内容会造成影响,经过综合考虑后我们没有学习Excel这种做法。
在GcExcel早期,这种输入不存在单元格的公式的做法是会抛异常的,但后来导入json的时候,尤其是一个sheet一个sheet导入json的时候,又往往会出现这种引用不存在单元格的情况,所有把抛异常的代码就删除了
值得注意的是,因为Excel中的公式是不会出现不存在的单元格的,它只是偷偷把它转换了,这样它内部逻辑上始终是严密的
如果我们把公式有不存在的单元格当成一种正常情况对待,就会带来一系列问题:
我们和Excel不兼容了,导出Excel文件的时候,这些单元格怎么处理
所以我们最终的建议就是:
公式中引用不存在的单元格的做法违背了我们最初的设计,建议用户尽可能不要出现这样的情况,毕竟这不是一个正常的case。
长远角度考虑可能会采取之前抛异常的方式,来避免用户不小心输入不存在的单元格。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-19 09:49:59
2#
您好,请您上传对应的ssjson或者Excel 文件,并注明是哪一个sheet与具体出现问题单元格的位置
回复 使用道具 举报
lynn8588
金牌服务用户   /  发表于:2022-12-19 11:03:18
3#
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讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-19 15:48:05
4#
本帖最后由 Clark.Pan 于 2022-12-19 15:49 编辑

您好,经过测试,并不会导致引用错乱,只是会清空对应的precedents,这是没问题的。
测试的版本是V5.2.5。建议您升级到V5.2.5再次进行测试。如果还有问题,那么请您提供对应能够重现问题的demo
image.png904226684.png
回复 使用道具 举报
lynn8588
金牌服务用户   /  发表于:2022-12-20 09:48:10
5#
Clark.Pan 发表于 2022-12-19 15:48
您好,经过测试,并不会导致引用错乱,只是会清空对应的precedents,这是没问题的。
测试的版本是V5.2.5。 ...

我重现出来了

image.png275959777.png
回复 使用道具 举报
lynn8588
金牌服务用户   /  发表于:2022-12-20 09:52:00
6#

其实我还是希望能得到sheet2!B5,因为这样能把他替换成0或者“”,这样就不会显示ref。因为我们有这样的需求 比如一个格子的公式=Sheet2!B5+Sheet3!B6+A3,如果其中sheet2不存在了,那么需要改成 0+Sheet3!B6+A3,因为workbook中有很多sheet,不知道哪些格子里配置了不存在的sheet,所以要去ref的值里面找,并且还得找对一坨替换成0,因为 shee2!后面可以是任意一个格子

评分

参与人数 1金币 +1000 收起 理由
Clark.Pan + 1000 感谢反馈问题

查看全部评分

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-20 10:32:19
7#
您好,该问题已复现并提交给开发DOCXLS-7256,本帖改为保留处理并移至BUG反馈版块。
感谢您的反馈,附上金币奖励。
回复 使用道具 举报
lynn8588
金牌服务用户   /  发表于:2022-12-22 17:41:07
8#
Clark.Pan 发表于 2022-12-20 10:32
您好,该问题已复现并提交给开发DOCXLS-7256,本帖改为保留处理并移至BUG反馈版块。
感谢您的反馈,附上金 ...

请问这个问题什么时候能解决,并且能保留正确的引用公式,不要清空,或者你们能提供一个方法获取整个workbook里引用不存在的list的,这样也行,但是不要清空,不然我们这边替换不了值,谢谢!
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-22 18:06:23
9#
目前开发还在调研中,具体如何来修复还要根据调研结果结合实际情况进行。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部