2017-02-21 64 views
0

我需要打開現有的* .xlsx Excel文件,進行一些修改,然後將其另存爲一個新文件(或者將其保存到前端而不保存)。原始文件必須保持不變。如何打開現有的* .xlsx文件,進行修改,然後另存爲新文件(保留原始文件不變)?

由於存儲器的原因,我避免使用的FileInputStream(如下所述:http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream

// XSSFWorkbook, File 
OPCPackage pkg = OPCPackage.open(new File("file.xlsx")); 
XSSFWorkbook wb = new XSSFWorkbook(pkg); 
.... 
pkg.close(); 
+2

先複製文件? – SLaks

+0

對於我來說,首先複製文件似乎比Streaming更好,而不保存。 – Robert

回答

0

這是我最終的解決方案,這是我結束了使用。這具有的優點是,沒有文件被保存在任何地方。我還增加了以下線路:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 

,這將確保所有的公式更新。 同樣,我完全忽略了所有的try/catch /。

OPCPackage pkg = OPCPackage.open("existingFile.xlsx"); 
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(pkg); 

// make your modifications... 
XSSFSheet sheet = wb.getSheetAt(0); 
// 
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 
ByteArrayOutputStream os = new ByteArrayOutputStream(); 
wb.write(os); 
pkg.close(); 
os.close(); 
Faces.sendFile(os.toByteArray(), "file.xlsx", true); 

爲了這個工作,使用不同的文件路徑輸入和輸出是很重要的。

最後一行使用Omnifaces將文件發送到您的瀏覽器。

0
JFileChooser fileOpen = new JFileChooser(); 
fileOpen.showOpenDialog(theFrame); // gives you an open file dialog 
readFile(fileOpen.getSelectedFile()); // write you reading content in reaFile method 

JFileChooser fileSave = new JFileChooser(); 
fileSave.showSaveDialog(Frame); //gives you a dialog box for saving 
saveFile(fileSave.getSelectedFile()); // write your saving content in saveFile method 
+0

這僅限於Swing。 – Robert

0

這裏是如何能夠利用OPCPackage閱讀(try/catch語句時/最後ommitted爲了可讀性完成):

OPCPackage pkg = OPCPackage.open("existingFile.xlsx"); 
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(pkg); 


make your modifications... XSSFSheet sheet = wb.getSheetAt(0); ... 
fos = new FileOutputStream("outputFileName.xlsx"); 
wb.write(fos); 
pkg.close(); 
fos.close(); 
Faces.sendFile(new File(outputFileName) 

爲了使其工作,爲輸入和輸出使用不同的文件路徑很重要。

最後一行使用Omnifaces將文件發送到您的瀏覽器。

看到這個問題的詳細資料: enter link description here

相關問題