Лучший способ обновить шаблон Excel с помощью Apache POI

Я считаю, что это лучший способ обновить файл шаблона с помощью Apache POI. Под файлом шаблона я подразумеваю хорошо отформатированный файл .xlsx, который вы хотите обновить, вставив значения.

Шаги: Скопируйте файл шаблона; открыть как файл; обновлять контент; писать в нулевой исходящий поток; закрыть файл.

Обратите внимание на шаг, на котором он записывает в нулевой выходной поток — это приведет к возврату обновлений в файл — без этого шага скопированный файл шаблона не будет обновлен. Файл шаблона не будет обновлен, если конструктор использует входной поток, а не файл.

//Copy the template to the final file path
File tempFile = new File("UpdatedTemplate.xlsx");
Files.copy(template.toPath(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
XSSFWorkbook wb;                                   
wb = new XSSFWorkbook(tempFile); <-- Will update if this uses a file but not if uses a input stream
//update the content
wb.write(OutputStream.nullOutputStream());       
wb.close();                

Надеюсь, это пригодится - ранее я использовал входной поток, чтобы предотвратить обратную запись в файл шаблона, а не копировал шаблон до обновления, и нашел это намного быстрее, поскольку он избегает конструктора входного файла.

Кто-нибудь знает лучший метод?


person Benjamin James    schedule 02.12.2019    source источник
comment
Я бы назвал такое поведение багом, а не фичей. См. stackoverflow.com/questions/46146161/. Это поведение может быть удалено в более поздних версиях apache poi. Так что я бы не стал полагаться на такое поведение.   -  person Axel Richter    schedule 03.12.2019
comment
Спасибо за ссылку. Согласен, это ошибка, а не функция, но в настоящее время это способ выполнить работу до тех пор, пока не будут устранены проблемы, из-за которых она работает.   -  person Benjamin James    schedule 06.12.2019