我遇到問題了解如何打開現有的excel文件,向其中添加數據,將該文件輸出到瀏覽器,然後關閉工作簿保存對它的任何更改。Apache POI - 如何在Grails應用程序中提供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文件。
問題是**如何**使用'File'而不是'FileInputStream'來減少內存佔用。使用'File'直接從文件打開'* .xlsx'' ZipPackage'。所以不是整個'ZIP'內容必須加載到內存中。但是,當然,關閉'ZipPackage'將會改變下層文件的最後修改參數,儘管文件的內容不會被改變。 –
@AxelRichter我明白了。我想,只要文件沒有改變,我很好,我只是緊張,因爲我需要該文件的單元格內容保持不變。我會研究Tuyens的建議以及最終值得的結果。感謝你們倆! –
我不知道是否可以保存文件內容永遠不會在以後的'apachwe poi'版本中更改。我懷疑使用文件而不是輸入流的主要目標是**不減少內存佔用,但有一個文件可以在關閉後將更改存儲到自身中。這只是到現在才完全實施。我的懷疑是因爲在二進制格式('* .xls *''BIFF')中打開一個隨機訪問文件,而使用文件而不是輸入流。 –