如何在java中打开并保存excel文件

时间:2016-08-03 18:07:15

标签: java apache-poi

我有一个excel文件(test.xlsx),其中包含一个列,比如id,我已经应用了一个公式,当我手动打开它时,所有id的值会自动更改,因为当我关闭它时,它要求保存更改。

我尝试使用下面给出的java代码

public static void main(String[] args) {

        String str1 = "c:/file/test.xlsx";
        try {


            //open file
            XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File(str1)));
            System.out.println(wb.getSheetAt(0).getRow(1).getCell(0).getDateCellValue().toString());

            //save file
            FileOutputStream out = new FileOutputStream(str1);
            wb.write(out);
            out.close();

            wb = new XSSFWorkbook(new FileInputStream(new File(str1)));
            System.out.println(wb.getSheetAt(0).getRow(1).getCell(0).getDateCellValue().toString());

        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }




output:
Thu Aug 04 01:08:34 IST 2016
Thu Aug 04 01:08:34 IST 2016

执行上面的代码后,我没有得到任何异常

我已经在apache POI的帮助下阅读文件验证了结果。

我希望,在使用代码保存文件后,新的ID应该在Id列中,因为它会在手动打开并保存文件时发生。

对我而言,它不能使用代码。

请建议

如果您无法理解该问题,请创建如下文件并打开并手动关闭,然后尝试使用代码,您将了解事情

enter image description here

1 个答案:

答案 0 :(得分:2)

我找到了解决方案,在上面的代码中我只需要添加一行,请查看下面的

public static void main(String[] args) {

        String str1 = "c:/file/test.xlsx";
        try {


            //open file
            XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File(str1)));
            System.out.println(wb.getSheetAt(0).getRow(1).getCell(0).getDateCellValue().toString());

            //FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();

            XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);

            //save file
            FileOutputStream out = new FileOutputStream(str1);
            wb.write(out);
            out.close();

            wb = new XSSFWorkbook(new FileInputStream(new File(str1)));
            System.out.println(wb.getSheetAt(0).getRow(1).getCell(0).getDateCellValue().toString());

        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }