2012-03-25 10 views
0

Ich habe eine Formel wie diese, die auf Excel/oocalc Anwendungen gut funktioniert:Excel Formel Auswertung Apache POI mit

=SUMPRODUCT(--($Panels.$A$5:$A$6999=K$80);--($Panels.$B$5:$B$6999=K$81);INDEX($Panels.$C$5:$J$6999;0;MATCH("Voc";$Panels.$C$3:$J$3;0))) 

Da ich Zellen mit verschiedenen Typen hat, Ich überprüfe es zuerst, dann die Auswertung durchführen bei Bedarf:

Dieser Code funktioniert gut für numerische und String-Zellen, sowie die meisten Formeln, die ich jetzt evaluieren musste. Es funktioniert jedoch nicht für diese Formel. Außerdem werden gemäß dem POI-Dokument http://poi.apache.org/spreadsheet/eval-devguide.html alle Funktionen unterstützt. Hier ist die Ausgabe:

CELL TYPE: 2 
ERRF: SUMPRODUCT(--(Panels!$A$5:$A$6999=K$80),--(Panels!$B$5:$B$6999=K$81),INDEX(Panels!$C$5:$J$6999,0,MATCH(Formulas!$K$83,Panels!$C$3:$J$3,0))) 
ERR: -60 

Hinweis: Zelltyp 2 CELL_TYPE_FORMULA sein sollte. Aber ich falle trotzdem in den CELL_TYPE_ERROR. Wenn es sich um ein POI-Problem handelt, würde ich gerne die Formel durch eine andere ersetzen, die die gleiche Berechnung durchführt: Übereinstimmung von Spalten mit mehreren Kriterien.

Vielen Dank im Voraus!

+0

Was ist 'cellType' _before_ Sie die Formel zu bewerten? Betreten Sie den Bewertungsblock? –

+0

Ich überprüfte nun, dass der 'cellType' vorher auch zwei war, und es kommt wirklich in den Auswertungsblock. Eine Sache, die ich vergessen habe zu erwähnen, ich benutze POI 3.8 Beta 5, weil ich eine Funktion von diesem Build brauchte. – rafaelrezend

Antwort

1

auch wenn SUMPRODUCT sieht aus wie es nicht eine Matrixformel ist, ist es nur eine Syntax Zucker für ein - und Ihre Verwendung von INDEX wahrscheinlich macht es zu kompliziert für POI, wo Matrixformeln sind noch nicht vollständig unterstützt ..

können Sie den Index zu OFFSET umschreiben, zB:

=SUMIFS(OFFSET(panels!$C$5:$C$6999;0;MATCH($K$10;panels!$C$3:$J$3;0)-1); 
     Panels!$A$5:$A$6999;K$80; 
     Panels!$B$5:$B$6999;K$81)