我有一个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列中,因为它会在手动打开并保存文件时发生。
对我而言,它不能使用代码。
请建议
如果您无法理解该问题,请创建如下文件并打开并手动关闭,然后尝试使用代码,您将了解事情
答案 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();
}
}