次のコードを使用すると、Excel スプレッドシートに加えたセル値の変更が保存されません。
OPCPackage pkg = OPCPackage.open(inputFile);
XSSFWorkbook wb = new XSSFWorkbook(pkg);
ModifyWorkbook();
pkg.close();
以下は私が書いた回避策ですが、なぜそれが必要なのかわかりません。
OPCPackage pkg = OPCPackage.open(inputFile);
XSSFWorkbook wb = new XSSFWorkbook(pkg);
ModifyWorkbook();
File tmp = File.createTempFile("tempSpreadsheet", ".xlsx");
FileOutputStream newExcelFile = new FileOutputStream(tmp);
wb.write(newExcelFile);
newExcelFile.close();
tmp.deleteOnExit();
pkg.close();
この件に関する Javadoc とガイドは、.close() メソッドが保存して閉じる必要があることを示しています。閉じる前に変更されたセルの値をチェックすると、変更が行われたことが示されますが、pkg.close() メソッドだけでは、閉じたときにそれらの変更をファイルに書き込むのに十分ではありません。