У меня была такая же проблема сегодня. Я заметил, что многие люди задают один и тот же вопрос на разных форумах, но я нигде не видел ответа. Итак, вот что я придумала. Это далеко от идеала (я могу придумать по крайней мере два сценария, в которых это может быть плохой идеей), и может не подходить для всех нужд, но это работает!
После каждой операции сохранения внутри класса, к которому относится объект рабочей книги, я перезагружаю книгу из файла, в котором только что сохранила его.
Используя ваш пример кода выше, я бы изменил метод следующим образом:
void method(int i) throws InvalidFormatException, IOException {
...
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xlsx");
workbook.write(fileOut);
fileOut.close();
// Reload the workbook, workaround for bug 49940
// https://issues.apache.org/bugzilla/show_bug.cgi?id=49940
workbook = new XSSFWorkbook(new FileInputStream("workbook.xlsx"));
}
Я проверил это в своем коде, и это хорошо решило проблему. Просто убедитесь, что вы прочитали его обратно из того же файла, в котором вы его сохранили, а не из более ранней или другой версии.