所以,我正在尝试获取行引用的公式,例如(
=2:2
/ =Sheet1!2:2
等)通过命名范围引用,例如test_row
如果我对单元格使用 getAddress 方法,它可以正常工作,但是如果我定义命名范围,例如
test_row
与地址=Sheet1!2:2
并尝试通过namedRange.getRefersToFormula()
访问它的公式,我得到Sheet1!1048576:1048576
。另一方面,具有命名范围 =A:A
的列引用 test_col
的相同情况可以正常工作。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
命名范围通常设置为引用绝对关系。例如,这是
=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
的命名范围将始终引用该引用。