【发布时间】:2019-04-30 22:13:51
【问题描述】:
我有一个template.xls 文件,我从一些数据库查询中添加数据。我添加数据并生成一个名为yyyyMMddHHmmss.xls 的新文件。这很好用。文件越来越大,所以我尝试对xlsx 文件做同样的事情。当我第一次生成文件时,它工作得很好。如果我再次运行该过程(即使我重新启动我的 java 应用程序),它会以某种方式将最后一个文件保留在内存中并将数据附加到该文件中。在这两种情况下,它都会从template.xls(x) 中提取源文件,这是一个未修改的文件。
两者之间的代码是相同的,只是在后一种情况下我传递的是xlsx 而不是xls。
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(Objects.requireNonNull(classLoader.getResource("template.xlsx")).getFile());
Workbook workbook = WorkbookFactory.create(file);
// write data
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String currentDate = formatter.format(date);
FileOutputStream fileOutputStream = new FileOutputStream(currentDate + ".xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();
我正在使用Java 8u201 和org.apache.poi:poi:4.1.0(也尝试过4.0.1)
【问题讨论】:
-
试试用
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));代替File是否可以直接解决这个问题。阅读stackoverflow.com/questions/46146161/…,了解使用File创建XSSFWorkbook的缺点。 -
@AxelRichter 如果你想推广它来回答这个问题
标签: apache-poi