break;
case DividePtg.sid : // 0x06
- retval = new DividePtg(in);
- break;
+ retval = new DividePtg(in);
+ break;
case PowerPtg.sid : // 0x07
retval = new PowerPtg(in);
break;
case AttrPtg.sid : // 0x19
+ case 0x1a :
retval = new AttrPtg(in);
break;
break;
case NumberPtg.sid : // 0x1f
- retval = new NumberPtg(in);
- break;
+ retval = new NumberPtg(in);
+ break;
case ArrayPtg.sid : // 0x20
retval = new ArrayPtg(in);
case DeletedArea3DPtg.sid + 0x40 : // 0x7d
retval = new DeletedArea3DPtg(in);
break;
-
+
+ case 0x00:
+ retval = new UnknownPtg();
+ break;
+
default :
-
//retval = new UnknownPtg();
throw new java.lang.UnsupportedOperationException(" Unknown Ptg in Formula: 0x"+
Integer.toHexString(( int ) id) + " (" + ( int ) id + ")");
package org.apache.poi.hssf.record;
+import java.io.ByteArrayInputStream;
+
+import org.apache.poi.hssf.record.formula.AttrPtg;
+import org.apache.poi.hssf.record.formula.ConcatPtg;
+import org.apache.poi.hssf.record.formula.FuncVarPtg;
+import org.apache.poi.hssf.record.formula.IntPtg;
+import org.apache.poi.hssf.record.formula.RangePtg;
+import org.apache.poi.hssf.record.formula.ReferencePtg;
+import org.apache.poi.hssf.record.formula.UnknownPtg;
+
import junit.framework.TestCase;
/**
assertEquals("Offset 22", 1, output[26]);
}
+ public void testWithConcat() throws Exception {
+ // =CHOOSE(2,A2,A3,A4)
+ byte[] data = new byte[] {
+ 6, 0, 68, 0,
+ 1, 0, 1, 0, 15, 0, 0, 0, 0, 0, 0, 0, 57,
+ 64, 0, 0, 12, 0, 12, -4, 46, 0,
+ 30, 2, 0, // Int - 2
+ 25, 4, 3, 0, // Attr
+ 8, 0, // Concat
+ 17, 0, // Range
+ 26, 0, 35, 0, // Bit like an attr
+ 36, 1, 0, 0, -64, // Ref - A2
+ 25, 8, 21, 0, // Attr
+ 36, 2, 0, 0, -64, // Ref - A3
+ 25, 8, 12, 0, // Attr
+ 36, 3, 0, 0, -64, // Ref - A4
+ 25, 8, 3, 0, // Attr
+ 66, 4, 100, 0 // CHOOSE
+ };
+ RecordInputStream inp = new RecordInputStream(
+ new ByteArrayInputStream(data)
+ );
+ inp.nextRecord();
+
+ FormulaRecord fr = new FormulaRecord(inp);
+
+ assertEquals(14, fr.getNumberOfExpressionTokens());
+ assertEquals(IntPtg.class, fr.getParsedExpression().get(0).getClass());
+ assertEquals(AttrPtg.class, fr.getParsedExpression().get(1).getClass());
+ assertEquals(ConcatPtg.class, fr.getParsedExpression().get(2).getClass());
+ assertEquals(UnknownPtg.class, fr.getParsedExpression().get(3).getClass());
+ assertEquals(RangePtg.class, fr.getParsedExpression().get(4).getClass());
+ assertEquals(UnknownPtg.class, fr.getParsedExpression().get(5).getClass());
+ assertEquals(AttrPtg.class, fr.getParsedExpression().get(6).getClass());
+ assertEquals(ReferencePtg.class, fr.getParsedExpression().get(7).getClass());
+ assertEquals(AttrPtg.class, fr.getParsedExpression().get(8).getClass());
+ assertEquals(ReferencePtg.class, fr.getParsedExpression().get(9).getClass());
+ assertEquals(AttrPtg.class, fr.getParsedExpression().get(10).getClass());
+ assertEquals(ReferencePtg.class, fr.getParsedExpression().get(11).getClass());
+ assertEquals(AttrPtg.class, fr.getParsedExpression().get(12).getClass());
+ assertEquals(FuncVarPtg.class, fr.getParsedExpression().get(13).getClass());
+
+ FuncVarPtg choose = (FuncVarPtg)fr.getParsedExpression().get(13);
+ assertEquals("CHOOSE", choose.getName());
+ }
+
public static void main(String [] ignored_args)
{
/**
* Bug 42618: RecordFormatException reading a file containing
* =CHOOSE(2,A2,A3,A4)
+ * TODO - support getCellFormula too!
*/
public void test42618() throws Exception {
- //Comment the test until we are sure it passes.
- // Yegor, January 25, 2008
- /*
FileInputStream in = new FileInputStream(new File(cwd, "SimpleWithChoose.xls"));
HSSFWorkbook wb = new HSSFWorkbook(in);
in.close();
wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
assertTrue("No Exceptions while reading file", true);
- */
+
+ // Check we detect the string properly too
+ HSSFSheet s = wb.getSheetAt(0);
+
+ // Textual value
+ HSSFRow r1 = s.getRow(0);
+ HSSFCell c1 = r1.getCell((short)1);
+ assertEquals("=CHOOSE(2,A2,A3,A4)", c1.getRichStringCellValue().toString());
+
+ // Formula Value
+ HSSFRow r2 = s.getRow(1);
+ HSSFCell c2 = r2.getCell((short)1);
+ assertEquals(25, (int)c2.getNumericCellValue());
+
+ // This will blow up with a
+ // "EmptyStackException"
+ //assertEquals("=CHOOSE(2,A2,A3,A4)", c2.getCellFormula());
}
}