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

标签 java excel apache-poi

我在弄清楚如何打开现有 Excel 文件、向其中添加数据、将该文件输出到浏览器,然后关闭工作簿而不保存任何更改时遇到问题。

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

workbook = new XSSFWorkbook(new FileInputStream(file))

将其输出到浏览器:

workbook.write(response.outputStream)

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

workbook = WorkbookFactory.create(file)

然而,这似乎修改了文件(尽管它似乎实际上没有编辑任何内容)。我尝试按照 this SO post 使用带有只读标志的重载函数:

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

但是我不能再使用 workbook.write() ,因为它提示该文件是只读的。谁能向我解释执行此操作的正确程序?使用 workbookFactory 似乎解决了我的内存问题,但我不喜欢它以某种方式修改 excel 文件。

最佳答案

WorkbookFactory您只能打开现有文件,并且您对其执行的任何操作都会导致对其进行修改。您的问题是您不想修改您的文件,所以我为您建议一个解决方案:制作原始文件的副本 => 在副本上工作(做任何您想做的事情)=> 完成工作后删除此副本。

关于java - Apache POI - 如何在 Grails 应用程序中提供 excel 文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45314405/

相关文章:

java - ECDH 共享 key 在 Crypto++ 和 Android 之间不匹配

vba - 根据变量的类型做一些事情

java - IntentService自己的Thread

java - 在对象构造函数中为 long 类型的属性传递 null

java - 使用 JTextFields 或 JTextAreas 创建矩阵

excel - VBA CDate(Now()) 导致类型不匹配

vba - 仅复制单元格中的数据值

java - Apache poi word文档空指针异常

java - Apache POI WorkbookFactory.create 抛出 java.lang.OutOfMemoryError : Java heap space

java - 使用Java读取Excel中嵌入的pdf文件