如何打开现有的* .xlsx文件,进行修改,然后保存为新文件(保持原始文件不变?)

时间:2017-02-21 16:16:50

标签: java apache-poi

我需要打开现有的* .xlsx Excel文件,进行一些修改,然后将其保存为新文件(或将其流式传输到前端而不保存)。原始文件必须保持不变。

出于内存原因,我避免使用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();

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以下是使用OPCPackage读取时的方法(尝试/捕获/最终省略了可读性):

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

答案 2 :(得分:0)

这是我的最终解决方案,我最终使用了它。这样做的好处是,任何地方都不会保存文件。我还添加了以下行:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

将确保更新所有公式。 再一次,我省略了所有的try / catch / finally。

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将文件发送到您的浏览器。