Created attachment 29838 [details] XLSX file that fails sheet rename. For one particular spreadsheet, renaming a sheet returns java.lang.IllegalArgumentException: Sheet index (-1) is out of range (0..1) at org.apache.poi.xssf.usermodel.XSSFWorkbook.validateSheetIndex(XSSFWorkbook.java:1043) at org.apache.poi.xssf.usermodel.XSSFWorkbook.getSheetName(XSSFWorkbook.java:876) at org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook.getSheetNameByExternSheet(XSSFEvaluationWorkbook.java:135) at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils$1.getSheetNameByExternSheet(XSSFFormulaUtils.java:81) at org.apache.poi.ss.formula.ptg.ExternSheetNameResolver.prependSheetName(ExternSheetNameResolver.java:42) at org.apache.poi.ss.formula.ptg.Area3DPtg.toFormulaString(Area3DPtg.java:100) at org.apache.poi.ss.formula.FormulaRenderer.toFormulaString(FormulaRenderer.java:92) at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils.updateName(XSSFFormulaUtils.java:143) at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils.updateSheetName(XSSFFormulaUtils.java:97) at org.apache.poi.xssf.usermodel.XSSFWorkbook.setSheetName(XSSFWorkbook.java:1230) Code is: import org.apache.poi.ss.usermodel.*; import java.io.*; FileInputStream fileInputStream = new FileInputStream(filePath); Workbook workbook = WorkbookFactory.create(fileInputStream); System.out.println("sheets:" + workbook.getNumberOfSheets()); for (int i = 0; i < workbook.getNumberOfSheets(); i++) { System.out.println("i:" + i); workbook.setSheetName(i, "Sheet" + (i + 1)); } fileInputStream.close(); FileOutputStream fileOutputStream = new FileOutputStream(filePath); workbook.write(fileOutputStream); fileOutputStream.close(); This outputs sheets:1 i:0 Tested on POI versions 3.8 and 3.9.
The error happens at a point where the external references are resolved in order to adjust all formulas/references for the new sheet-name. FormularParser.createAreaRefParseNode() tries to read the external sheet index, but does not find the referenced external sheets and thus ends up using -1. I still lack details of how it is supposed to work, though, to say if this is somehow expected here or an invalid .xlsx or really a bug in POI...
This seems to work with the current trunk version of POI, some other fix seems to have fixed this too.
I downloaded the latest version 3.14 from 2016-03-07 and checked. It was fixed in XSSFWorkbook class, but the problem remains on HSSFWorkbook.