Я считаю, что это лучший способ обновить файл шаблона с помощью 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();
Надеюсь, это пригодится - ранее я использовал входной поток, чтобы предотвратить обратную запись в файл шаблона, а не копировал шаблон до обновления, и нашел это намного быстрее, поскольку он избегает конструктора входного файла.
Кто-нибудь знает лучший метод?
apache poi
. Так что я бы не стал полагаться на такое поведение. - person Axel Richter   schedule 03.12.2019