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

            Bug ID: 55640
           Summary: Get IndexOutOfBoundsException while creating Excel
                    with data grouping
           Product: POI
           Version: 3.5-FINAL
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSSF
          Assignee: dev@poi.apache.org
          Reporter: omene...@gmail.com

Get IndexOutOfBoundsException while creating Excel with data grouping


Hello!
I'm trying to create Excel with data grouping.
Could you please clarify why I get IndexOutOfBoundsException?

There is a simple test attached to create Excel with data grouping.
When it groups rows in reverse order (starting from the last row) it works
ok
When I change it to natural order (starting from the first row) - it throws
IndexOutOfBoundsException.

Stacktrace:Exception in thread "main" java.lang.IndexOutOfBoundsException
    at org.apache.xmlbeans.impl.store.Xobj.remove_attribute(Xobj.java:2287)
    at
org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl.unsetCollapsed(Unknown
Source)
    at
org.apache.poi.xssf.usermodel.XSSFSheet.expandRow(XSSFSheet.java:1870)
    at
org.apache.poi.xssf.usermodel.XSSFSheet.setRowGroupCollapsed(XSSFSheet.java:1780)
    at CreateExcel.fillData(CreateExcel.java:49)
    at CreateExcel.create(CreateExcel.java:22)



I'm using:
jdk1.6.0_25, 32 bit
poi 3.5 final (but I tried the latest release too)
xmlbeans-2.3.0







See test below. There are several lines marked with 'natural order' or
'reverse order', you can switch grouping order by commenting/uncommenting
them



import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;

public class CreateExcel {
    private static final int ROWS_NUMBER = 200;
    private static final int GROUP_SIZE = 5;

    private final String o_filename;
    private int o_groupsNumber = 0;

    public CreateExcel(String p_filename) {
        o_filename = p_filename;
    }

    public void create() {
        long startTime = System.currentTimeMillis();
        Workbook wb = new XSSFWorkbook();
        fillData(wb);
        writeToFile(wb);

        System.out.println("Number of groups: " + o_groupsNumber);
        System.out.println("Execution time: " +
(System.currentTimeMillis()-startTime) + " ms");
    }


    private void fillData(Workbook p_wb) {
        Sheet sheet = p_wb.createSheet("sheet123");
        sheet.setRowSumsBelow(false);

        for (int i = 0; i < ROWS_NUMBER; i++) {
            Row row = sheet.createRow(i);
            Cell cell = row.createCell(0);
            cell.setCellValue(i+1);
        }

        int i = 1;
        while (i < ROWS_NUMBER) {
            int end = i+(GROUP_SIZE-2);
            int start = i;                    // natural order
//            int start = end - 1;                // reverse order
            while (start < end) {             // natural order
//                while (start >= i) {            // reverse order
                sheet.groupRow(start, end);
                o_groupsNumber++;
                sheet.setRowGroupCollapsed(start, isCollapsed());
                start++;                      // natural order
//                start--;                        // reverse order
            }
            i += GROUP_SIZE;
        }
    }

    private boolean isCollapsed() {
        return Math.random() > 0.05d;
    }

    private void writeToFile(Workbook p_wb) {
        FileOutputStream fileOut = null;
        try {
            fileOut = new FileOutputStream(o_filename);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            p_wb.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if (fileOut != null) {
                fileOut.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        CreateExcel createExcel = new CreateExcel("K://workbook.xlsx");
        createExcel.create();
    }
}

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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to