1

I am unable to remove excel sheet from the workbook.I tried different solution but I am unable to get a workaround. Say I want to remove sheet number 5 using "wb.RemoveSheetAt(5)" I can only remove it after I remove sheet number 6.

Code :

public void cloneSheet(String sheetName , int NoOfClones){
    int temp = 0;
    for(int i = 0 ; i <= NoOfClones ; i++){
        HSSFSheet tsheet = workbook.cloneSheet(temp = workbook.getSheetIndex(sheetName));
        workbook.setSheetName((workbook.getSheetIndex(tsheet)), sheetName+i);   
    }
    workbook.removeSheetAt(workbook.getSheetIndex(sheetName));
}

This is the error I get :

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 21, Size: 21
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at org.apache.poi.hssf.record.ExternSheetRecord.getRef(ExternSheetRecord.java:164)
at org.apache.poi.hssf.record.ExternSheetRecord.adjustIndex(ExternSheetRecord.java:168)
at org.apache.poi.hssf.model.LinkTable.updateIndexToInternalSheet(LinkTable.java:419)
at org.apache.poi.hssf.model.InternalWorkbook.removeSheet(InternalWorkbook.java:721)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.removeSheetAt(HSSFWorkbook.java:899)
at exceleditor.ExcelEditor.cloneSheet(ExcelEditor.java:104)
at exceleditor.QLaunchExcelEditor.main(QLaunchExcelEditor.java:290)
Januson
  • 4,533
  • 34
  • 42
Mohit_Mike
  • 11
  • 1
  • 1
    https://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-how-do-i-prevent-it – BackSlash Mar 13 '19 at 07:24
  • Actually, RemovesheetAt statement is outside scope of for loop and so NoOfclones should not impact that statement. In fact, if I comment RemoveSheetAt line, The error goes away. – Mohit_Mike Mar 13 '19 at 07:29

1 Answers1

0
FileInputStream fileStream = new FileInputStream(excelFile);
POIFSFileSystem poiFS = new POIFSFileSystem(fileStream);
HSSFWorkbook workbook = new HSSFWorkbook(poiFS);
workbook.removeSheetAt(5);
FileOutputStream output = new FileOutputStream(excelFile);
workbook.write(output);
output.close();
Lakshan
  • 1,404
  • 3
  • 10
  • 23