У меня вопрос относительно Java Excel.
Я обновил версию Apache-poi с 3.17 до 4.1.2, но загрузка Excel не работает.
И поскольку существующее ядро jxls было перенесено в org.jxls, jxls-core было удалено, а версия jxls была обновлена до 2.10.0.
Это связанный код
pom.xml
org.apache.poi
poi-ooxml
4.1.2
org.apache.poi
poi-ooxml-schemas
4.1.2
org.jxls
jxls
2.8.1
commons-logging
commons-logging
ch.qos.logback
logback-core
org.jxls
jxls-poi
2.10.0
ch.qos.logback
logback-core
код
public void download(HttpServletRequest request, HttpServletResponse response, Map beans, String filename, String templateFile) {
InputStream is = null;
OutputStream os = null;
try {
Resources.setCharset(StandardCharsets.UTF_8);
is = new BufferedInputStream(Resources.getResourceAsStream("excel_templates/" + templateFile));
PoiTransformer transformer = PoiTransformer.createTransformer(is);
// Map을 Context 객체로 변환
Context context = new Context(beans);
JxlsHelper.getInstance().processTemplate(context, transformer);
Workbook resultWorkbook = transformer.getWorkbook();
// 응답 헤더 및 Content-Type 설정
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + ".xlsx\"");
// OutputStream 초기화
os = response.getOutputStream();
// 워크북을 OutputStream에 씀
resultWorkbook.write(os);
os.flush(); // 버퍼 비우기
System.out.println("10");
} catch (Exception e) {
logger.error("Error during download: " + e.getMessage());
} finally {
// 자원 정리
try {
if (is != null) is.close();
if (os != null) os.close();
} catch (IOException e) {
logger.error("Error closing streams: " + e.getMessage());
}
}
}
2024-10-07 16:27:09.764 [http-nio-8080-exec-7] ERROR com.sgt.appm.excel.MakeExcel - Error during download: Cannot write a workbook with an uninitialized output stream
удалить зависимости
net.sf.jxls
jxls-core
1.0.6
public void download(HttpServletRequest request, HttpServletResponse response, Map beans, String filename, String templateFile) {
try {
Resources.setCharset(Charset.forName("UTF-8"));
InputStream is = new BufferedInputStream(Resources.getResourceAsStream("excel_templates/" + templateFile));
XLSTransformer transformer = new XLSTransformer();
Workbook resultWorkbook = transformer.transformXLS(is, beans);
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + ".xlsx\"");
OutputStream os = response.getOutputStream();
resultWorkbook.write(os);
is.close();
resultWorkbook.close();
} catch (Exception e) {
logger.error(e.getMessage());
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... compatible