Переопределите именованный диапазон Excel, затем сохраните, используя Apache POI
Используя Apache POI, яЯ могу найти именованный диапазон:
XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
ranges[i] = workbook.getNameAt(i);
С этим яя могу в ячейке AreaReference:
AreaReference area = new AreaReference(ranges[0].getRefersToFormula());
И, наконец, я могу получить все клетки в этом диапазоне:
CellReference[] cells = area.getAllReferencedCells();
Это все работает просто отлично. Берт У меня есть сценарий использования, когда я должен переопределить область, которую охватывает диапазон. Есть способ сделать это? Я заметил, чтоrange.getRefersToFormula()
метод возвращает строку, что-то вродеMySheet!$A$1:$B$8
, Eстьrange.setRefersToFormula(String formula)
, но я'там надо веритьЭто отличный от меня способ - написать собственный анализатор формул диапазона Excel. Нет ли способа сгенерировать AreaReference с установленным значениемCell
ссылки на что-то более безопасное для типов? Должен ли я на самом деле генерироватьString
представлять новый ассортимент? Я думаю, что где-то будет API, чтобы помочь мне с этим, но я могукажется, не нашел его.
Обновить
Я нашел немного API, но это не таккажется, не работает, по крайней мере, это не таксохранить правильно. Вот'что я сделал
AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())
Кажется, что формула установлена правильно, но когда я возвращаю книгу обратно на диск, диапазон совершенно неверен.