POI:获取行引用作为命名引用的公式

问题描述 投票:0回答:1

所以,我正在尝试获取行引用的公式,例如(

=2:2
/
=Sheet1!2:2
等)通过命名范围引用,例如
test_row

如果我对单元格使用 getAddress 方法,它可以正常工作,但是如果我定义命名范围,例如

test_row
与地址
=Sheet1!2:2
并尝试通过
namedRange.getRefersToFormula()
访问它的公式,我得到
Sheet1!1048576:1048576
。另一方面,具有命名范围
=A:A
的列引用
test_col
的相同情况可以正常工作。
我还没有研究过 POI lib 的源代码,所以我不能说这是 lib 的问题还是 Excel 保护行引用公式的方式。 问题是是否有人遇到过这个问题并找到了解决方法?

UPD:感谢@AlexRichter,我发现上面描述的所有内容都适用于绝对地址,例如

=$2:$2
=Sheet1!$2:$2

问题仍然是为什么它不适用于相对地址?

测试进行如下:

poi: 5.2.5 
poi-ooxml: 5.2.5
poi-ooxml-schemas: 4.1.2
openjdk 21.0.2
java excel excel-formula apache-poi
1个回答
0
投票

命名范围通常设置为引用绝对关系。例如,这是

=Sheet1!$2:$2
而不是相对的
=Sheet1!2:2
。引用相对关系的命名范围有奇怪的行为。

如果将命名范围设置为引用

=Sheet1!2:2
,而第 3 行中的单元格是活动单元格,则仅当第 3 行中的单元格是活动单元格时,此命名范围才引用
=Sheet1!2:2
。如果第 2 行中的单元格是活动单元格,则此命名范围指的是
=Sheet1!1:1
。如果第 1 行中的单元格是活动单元格,则此命名范围指的是
=Sheet!1048576:1048576
。当单元格
A1
是活动单元格时,Excel 存储命名范围所指的内容。所以它存储了
=Sheet!1048576:1048576
。这就是你得到的。

绝对参考

=Sheet1!$2:$2
独立于活动单元格。因此,引用
=Sheet1!$2:$2
的命名范围将始终引用该引用。

© www.soinside.com 2019 - 2024. All rights reserved.