ПОИ / Excel: применение формул “относительным” способом

Я использую ПОИ Apache для управления Excel (.xls) файлы с Java.

Я пытаюсь создать новую ячейку, кого содержание является результатом формулы, как будто пользователь копировал/вставлял формулу (что я называю "относительным" путем, как напротив "абсолютного").

Для создания меня более ясным вот, простой пример:

  • Ячейка, которую A1 содержит "1", B1, содержит "2", A2 содержит "3", B2 содержит "4".
  • Ячейка A3 содержит следующую формулу "=A1+B1".

Если я копирую формулу в ячейку A4 под Excel, это становится "=A2+B2" : Excel адаптирует содержимое формулы динамично.

К сожалению, я не могу получить тот же результат программно. Единственное решение, которое я нашел, состоит в том, чтобы маркировать формулу и сделать грязную работу сам, но я действительно сомневаюсь, что это, как предполагается, сделано тот путь. Я не смог найти то, что я ищу в руководствах или в API.

Существует ли более легкий способ решить эту проблему? Если это имеет место, можно ли указать на меня в правильном направлении?

С уважением,

Ноли

17
задан frianH 11 October 2019 в 09:58
поделиться

3 ответа

Я не думаю, что есть. POI должен будет проанализировать формулу (с учетом A1 против $ A $ 1 против $ A1 и т. Д.), И я не верю, что у него есть такая возможность. Когда я делал это в прошлом, мне всегда приходилось справляться с этим самому. Извините - это не тот ответ, на который вы надеялись!

2
ответ дан 30 November 2019 в 12:51
поделиться

вы можете попробовать некоторые сторонние библиотеки Excel, большинство из них могут обрабатывать формулы относительного / абсолютного диапазона.

-2
ответ дан 30 November 2019 в 12:51
поделиться

Я тоже думаю, что нет простого способа сделать это.

Даже примеры HSSF и XSSD на сайте POI, например TimesheetDemo строить формулы вручную. например, вокруг строки 110

String ref = (char)('A' + j) + "3:" + (char)('A' + j) + "12";
cell.setCellFormula("SUM(" + ref + ")");
9
ответ дан 30 November 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: