Apache POI – 如何在Grails应用程序中提供用于下载的excel文件

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

以前我用这个来创build工作簿:

workbook = new XSSFWorkbook(new FileInputStream(file)) 

这将它输出到浏览器:

 workbook.write(response.outputStream) 

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

 workbook = WorkbookFactory.create(file) 

但是,这似乎修改文件(虽然它似乎并没有实际编辑任何东西)。 我试图使用只读标志按照这个SOpost重载的函数:

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

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

使用WorkbookFactory您只能打开一个现有的文件,任何您使用它的过程都会导致对其进行修改。 你的问题是你不想修改你的文件,所以我build议给你一个解决scheme:复制你的原始文件=>在副本上工作(做你想做的任何事情)=>删除完成后你的工作。