使用jxl api / Apache POI编辑现有的Excel文件

25

我对Java和如何向现有的Excel表格中编写/操作现有数据感兴趣,希望能够学习更多。我想知道如何使用jxl api / Apache POI编辑现有的Excel文件并保存它,或者您能否给我一个示例程序,演示如何在现有Excel文件中编辑一些数据,然后保存它。

4个回答

33

这里的教程非常有帮助且写得很好。它们使用了Apache POI项目开发的外部JAR文件。

这是一个简单的编辑单元格的示例:

    InputStream inp = new FileInputStream("wb.xls");
    Workbook wb = WorkbookFactory.create(inp);
    Sheet sheet = wb.getSheetAt([sheet index]);
    Row row = sheet.getRow([row index]);
    Cell cell = row.getCell([cell index]);
    String cellContents = cell.getStringCellValue(); 
    //Modify the cellContents here
    // Write the output to a file
    cell.setCellValue(cellContents); 
    FileOutputStream fileOut = new FileOutputStream("wb.xls");
    wb.write(fileOut);
    fileOut.close();

希望能有所帮助。

你应该在什么时候关闭FileInputStream呢?如果在输出流关闭后尝试从中读取,它是否会反映所有更改?此外,FileOutputStream不应该以追加模式打开吗? - Edward Q. Bridges
@eqbridges 我发现InputStream在构造函数中默认是关闭的。(我知道你的评论已经一年了,但也许它会帮助其他人) - das Keks

5

我从曲折的经历中学到的一个非常重要的技巧是,只有在完成对Excel工作簿的写入后才打开OutputStream。Zabbala的示例很好地展示了这一点。如果您在更早的时候打开OutputStream,那么当程序退出时您的更改将不会被写入文件,您会像我一样感到困惑。


3

我使用以下语句来在另一个选项卡中刷新公式:

HSSFSheet worksheetse = workbook.getSheetAt(0);
worksheetse.setForceFormulaRecalculation(true); 

但是必须对所有具有公式的选项卡应用setForceFormulaRecalculation方法。

抱歉我的英语不好。


请注意,如果电子表格使用特定类型的函数(具有n个参数,并未在poi中实现),则HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)可能无法正常工作。但在这种情况下,worksheetse.setForceFormulaRecalculation(true)似乎可行。 - Vasilen Donchev
@VassilenDontchev,您能举些例子说明在哪些情况下HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);会失败吗? - SpringLearner

2

你好,我和neXGen遇到了相同的问题。但是奇怪的是,如果我使用openoffice打开文件,它可以正常工作!

编辑:也许我找到了一个解决方案,在更改值后添加以下内容:

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接