Apache POI - 如何在Grails应用程序中提供excel文件以供下载

时间:2017-07-25 22:15:43

标签: java excel apache-poi

我遇到了解决如何打开现有excel文件,向其添加数据,将该文件输出到浏览器,然后关闭工作簿而不保存任何更改的问题。

以前我用它来创建工作簿:

workbook = new XSSFWorkbook(new FileInputStream(file))

然后将其输出到浏览器:

workbook.write(response.outputStream)

但是我遇到了内存问题,所以我从FileInputStream更改为WorkbookFactory:

workbook = WorkbookFactory.create(file)

然而,这似乎修改了文件(虽然它似乎没有实际编辑任何东西)。我尝试使用带有readonly标志的重载函数,按this SO post

workbook = WorkbookFactory.create(file,null,true)

但是我不能再使用workbook.write(),因为它抱怨该文件是只读的。任何人都可以向我解释这样做的正确程序吗?使用workbookFactory解决了我的内存问题,但我不喜欢它以某种方式修改excel文件。

1 个答案:

答案 0 :(得分:0)

使用WorkbookFactory,您只能打开现有文件,而使用该文件执行的任何过程都会导致对其进行修改。您的问题是您不想修改您的文件,因此我建议您解决方案:复制原始文件=>在副本上工作(做你想做的任何事情)=>完成工作后删除此副本。