Итак, я пытаюсь получить формулу для ссылки на строку, например. (=2:2 / =Sheet1!2:2 и т. д.), на который ссылается именованный диапазон, например. test_row
Если я использую метод getAddress для ячеек, он работает правильно, но если я определяю именованный диапазон, например. test_row с адресом =Sheet1!2:2 и попытайтесь получить доступ к его формуле через namedRange.getRefersToFormula(), я понял Sheet1!1048576:1048576. С другой стороны, тот же случай для ссылки на столбец =A:A с именованным диапазоном test_col работает правильно.
Я не изучал исходный код библиотеки POI, поэтому не могу сказать, связана ли это с библиотекой или с тем, как 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
@AxelRichter, твоя точка зрения действительно была верной! Сначала я подумал: да, это работает так, как вы описали, но как это связано с проблемой, описанной в исходном вопросе? Но когда я тестировал абсолютный адрес, функция действительно возвращала правильный адрес. Я до сих пор не понимаю, почему это не работает с относительными адресами, но на данный момент такое решение мне подходит. Я обновлю исходный вопрос, и если больше не появится идей, я закрою его с помощью этого обходного пути. Спасибо!




Именованные диапазоны обычно указывают на абсолютные отношения. Например, =Sheet1!$2:$2 вместо относительного =Sheet1!2:2. Именованные диапазоны, относящиеся к относительным отношениям, ведут себя странно.
Если установить именованный диапазон для ссылки на =Sheet1!2:2, в то время как ячейка в строке 3 является активной ячейкой, то этот именованный диапазон ссылается на =Sheet1!2:2 только в том случае, если ячейка в строке 3 является активной ячейкой. Если ячейка в строке 2 является активной, то этот именованный диапазон относится к =Sheet1!1:1. А если ячейка в строке 1 является активной, то этот именованный диапазон относится к =Sheet1!1048576:1048576. Excel хранит то, к чему относится именованный диапазон, когда ячейка A1 является активной. Итак, он хранит =Sheet1!1048576:1048576. И это то, что вы получаете.
Абсолютная ссылка =Sheet1!$2:$2 не зависит от активной ячейки. Таким образом, именованный диапазон, который ссылается на =Sheet1!$2:$2, всегда будет ссылаться на эту ссылку.
Почему имя не относится к
=Sheet1!$2:$2, а не к относительному=Sheet1!2:2? Если относительно, ссылка изменяется при изменении активной строки. Использование абсолютной ссылки=Sheet1!$2:$2работает независимо от того, какая активная строка установлена.