POI: IndexBound-Exception bei FormulaCell-Evaluation

Hardi82

Mitglied
Hallo Leute. Ich habe heute ein Problem mit POI und dem Evaluieren von FormulaCells. Zunächst erst einmal der Code:

Code:
		for(Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {
			row = rit.next();
			evaluator.setCurrentRow(row);
			for(Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {
				cell = cit.next();
				if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
					cellValue = evaluator.evaluate(cell);
					switch (cellValue.getCellType()) {
					case HSSFCell.CELL_TYPE_ERROR:
						switch (cellValue.getErrorValue()) {
						case ErrorConstants.ERROR_DIV_0:
							errors.add("cell.value.faulty.zerodivision"); break;
						case ErrorConstants.ERROR_NAME:
							errors.add("cell.value.faulty.name"); break;
						case ErrorConstants.ERROR_VALUE:
							errors.add("cells.value.faulty.value"); break;
						default:
							errors.add("cell.value.faulty");
						}
					}
					
					if(!cell.getCellStyle().getLocked())
						errors.add("protection.disabled.formulacell");
					if(errors.size() > 0)
						result.addError((new CellReference(row.getRowNum(), cell.getCellNum())).formatAsString().replace("$", ""), 
													errors.toArray(new String[errors.size()]));				
					errors.clear();					
				}
				

			}
		}

und gleich noch der Stacktrace hinterher:

Code:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
	at java.util.ArrayList.RangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at org.apache.poi.hssf.model.Workbook.getSheetName(Workbook.java:534)
	at org.apache.poi.hssf.model.Workbook.findSheetNameFromExternSheet(Workbook.java:1867)
	at org.apache.poi.hssf.model.Workbook.getSheetReferences(Workbook.java:1849)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.getSheetReferences(HSSFWorkbook.java:788)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.getSheetReferences(HSSFWorkbook.java:79)
	at org.apache.poi.hssf.record.formula.Ref3DPtg.getSheetName(Ref3DPtg.java:169)
	at org.apache.poi.hssf.record.formula.Ref3DPtg.toFormulaString(Ref3DPtg.java:182)
	at org.apache.poi.hssf.model.FormulaParser.toFormulaString(FormulaParser.java:925)
	at org.apache.poi.hssf.model.FormulaParser.toFormulaString(FormulaParser.java:858)
	at org.apache.poi.hssf.usermodel.HSSFCell.getCellFormula(HSSFCell.java:686)
	at org.apache.poi.ss.usermodel.FormulaEvaluator.internalEvaluate(FormulaEvaluator.java:326)
	at org.apache.poi.ss.usermodel.FormulaEvaluator.evaluate(FormulaEvaluator.java:133)
	at org.ExChecker.checkFormulaCells(ExChecker.java:111)
	at org.ExChecker.checkSheet(ExChecker.java:73)
	at org.ExChecker.startCheck(ExChecker.java:55)
	at org.Main.<init>(Main.java:69)
	at org.Main.main(Main.java:21)

Nun zur Fehlerbeschreibung: ich habe mehrere Dateien, teils komplexer, teil sehr einfach gehalten. Einige von ihnen werden problemlos bearbeitet, aber bei den komplexeren wird bei einigen Zeilen an der Codestelle "cellValue = evaluator.evaluate(cell);" die oben ausgegebene Exception geworfen. Ich verstehe allerdings nicht, warum. Kommentiere ich den innerne Block aus, funktioniert der if-Anweisung aus, funktioniert es wieder. Kennt jemand das Problem? Kann es an der Exceldatei liegen oder übersehe ich etwas? Eigentlich wird ja über die Zellen iteriert und es kann eigentlich zu keiner Index_Exception kommen? Danke schon einmal vorab für Tipps und Hinweise.

LG Hardie
 
Zuletzt bearbeitet von einem Moderator:
Zurück