https://issues.apache.org/bugzilla/show_bug.cgi?id=54399

            Bug ID: 54399
           Summary: Sheet index (-1) is out of range when rename sheet
           Product: POI
           Version: 3.9
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSSF
          Assignee: [email protected]
          Reporter: [email protected]
    Classification: Unclassified

Created attachment 29838
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=29838&action=edit
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.

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to