Steps to Reproduce
- import xlsx in Kekai (see ticket for reproducing sample)
- export to excel
Current Result
Exception: io.keikai.range.impl.imexp.ExportException: Fail to export auto filter in sheet sheet1 from book book1.xlsx
Caused by: java.lang.IndexOutOfBoundsException: null
at org.apache.xmlbeans.impl.store.Xobj.insert_element_user(Xobj.java:2033)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTAutoFilterImpl.insertNewFilterColumn(CTAutoFilterImpl.java:111)
at io.keikai.range.impl.imexp.ExcelXlsxExporter.exportFilterColumns(ExcelXlsxExporter.java:996)
at io.keikai.range.impl.imexp.ExcelXlsxExporter.exportAutoFilter(ExcelXlsxExporter.java:919)
at io.keikai.range.impl.imexp.AbstractExcelExporter.export(AbstractExcelExporter.java:298)
Expected Result
No error
Debug Information
in io.keikai.range.impl.imexp.ExcelXlsxExporter.exportFilterColumns(CTAutoFilter, SAutoFilter, int).srcFilterColumn
protected void exportFilterColumns(CTAutoFilter poiAutoFilter, SAutoFilter autoFilter, int numberOfColumn) { final Map<String, Object> extra = new HashMap<String, Object>(); int autoFilterItemIndex = 0; for( int i = 0 ; i < numberOfColumn ; i++){ ... if (poiAutoFilter.sizeOfFilterColumnArray() > i) { destFilterColumn = new XSSFFilterColumn(poiAutoFilter.getFilterColumnArray( i)); } else { CTFilterColumn ctFilterColumn = poiAutoFilter.insertNewFilterColumn( i); // ISSUE LOCATED HERE autoFilterItemIndex++; destFilterColumn = new XSSFFilterColumn(ctFilterColumn); ctFilterColumn.setColId(i); }
poiAutoFilter.insertNewFilterColumn appear to treat autoFilter index and autoFilter column ID as separate values.
When inserting an autofilter column, the inserted index must be >=0 but <=(maxIndex+1)
Since the collection of auto filter columns is empty at the start, the only valid index is 0, because it doesn't represent the column index in page, but the column index in the collection of columns.
Workaround
create an extra int to track column index when inserting.
Attached replacement exporter class, deploy to override at
/src/main/java/io/keikai/range/impl/imexp/ExcelXlsxExporter.java