When MS Excel, Libreoffice opens - they create an empty spread sheet with name "Sheet1". XSSFSheet (and potentially other implementations) calls it "Sheet0" that is inconvenient. public XSSFSheet createSheet() { String sheetname = "Sheet" + (sheets.size()); int idx = 0; while(getSheet(sheetname) != null) { sheetname = "Sheet" + idx; idx++; } return createSheet(sheetname); } it is worth to change it to public XSSFSheet createSheet() { String sheetname = "Sheet" + (sheets.size() + 1); int idx = 0; while(getSheet(sheetname) != null) { sheetname = "Sheet" + idx; idx++; } return createSheet(sheetname); }
This probably won't be fixed as it introduces a behavior change that may subtly break existing applications, with marginal benefit. If you need your sheet names to start at "Sheet1", use Workbook#createSheet(String name).