Index: src/java/org/apache/poi/hssf/record/formula/ErrPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/ErrPtg.java (revision 0) +++ src/java/org/apache/poi/hssf/record/formula/ErrPtg.java (revision 0) @@ -0,0 +1,90 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.RecordInputStream; +import org.apache.poi.hssf.usermodel.HSSFErrorConstants; + +/** + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class ErrPtg extends Ptg +{ + public static final short sid = 0x1c; + private static final int SIZE = 7; + private byte field_1_error_code; + + /** Creates new ErrPtg */ + + public ErrPtg() + { + } + + public ErrPtg(RecordInputStream in) + { + field_1_error_code = in.readByte(); + } + + public void writeBytes(byte [] array, int offset) + { + array[offset] = (byte) (sid + ptgClass); + array[offset + 1] = field_1_error_code; + } + + public String toFormulaString(Workbook book) + { + switch(field_1_error_code) + { + case HSSFErrorConstants.ERROR_NULL: + return "#NULL!"; + case HSSFErrorConstants.ERROR_DIV_0: + return "#DIV/0!"; + case HSSFErrorConstants.ERROR_VALUE: + return "#VALUE!"; + case HSSFErrorConstants.ERROR_REF: + return "#REF!"; + case HSSFErrorConstants.ERROR_NAME: + return "#NAME?"; + case HSSFErrorConstants.ERROR_NUM: + return "#NUM!"; + case HSSFErrorConstants.ERROR_NA: + return "#N/A"; + } + + // Shouldn't happen anyway. Excel docs say that this is returned for all other codes. + return "#N/A"; + } + + public int getSize() + { + return SIZE; + } + + public byte getDefaultOperandClass() + { + return Ptg.CLASS_VALUE; + } + + public Object clone() { + ErrPtg ptg = new ErrPtg(); + ptg.field_1_error_code = field_1_error_code; + return ptg; + } +} Property changes on: src/java/org/apache/poi/hssf/record/formula/ErrPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/java/org/apache/poi/hssf/record/formula/RangePtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/RangePtg.java (revision 0) +++ src/java/org/apache/poi/hssf/record/formula/RangePtg.java (revision 0) @@ -0,0 +1,83 @@ +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.RecordInputStream; + +/** + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class RangePtg extends OperationPtg +{ + public final static byte sid = 0x11; + + + public RangePtg() + { + } + + public RangePtg(RecordInputStream in) + { + // doesn't need anything + } + + + public int getSize() + { + return 1; + } + + public void writeBytes( byte[] array, int offset ) + { + array[ offset + 0 ] = sid; + } + + public Object clone() + { + return new RangePtg(); + } + + public int getType() + { + return TYPE_BINARY; + } + + /** Implementation of method from Ptg */ + public String toFormulaString(Workbook book) + { + return ":"; + } + + + /** implementation of method from OperationsPtg*/ + public String toFormulaString(String[] operands) + { + StringBuffer buffer = new StringBuffer(); + + buffer.append(operands[ 0 ]); + buffer.append(":"); + buffer.append(operands[ 1 ]); + return buffer.toString(); + } + + public int getNumberOfOperands() + { + return 2; + } + +} Property changes on: src/java/org/apache/poi/hssf/record/formula/RangePtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java (revision 0) +++ src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java (revision 0) @@ -0,0 +1,98 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + + +/* + * MemAreaPtg.java + * + * Created on November 21, 2001, 8:46 AM + */ +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.util.LittleEndian; +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.RecordInputStream; + +/** + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class MemAreaPtg + extends Ptg +{ + public final static short sid = 0x26; + private final static int SIZE = 7; + private int field_1_reserved; + private short field_2_subex_len; + + /** Creates new MemAreaPtg */ + + public MemAreaPtg() + { + } + + public MemAreaPtg(RecordInputStream in) + { + field_1_reserved = in.readInt(); + field_2_subex_len = in.readShort(); + } + + public void setReserved(int res) + { + field_1_reserved = res; + } + + public int getReserved() + { + return field_1_reserved; + } + + public void setSubexpressionLength(short subexlen) + { + field_2_subex_len = subexlen; + } + + public short getSubexpressionLength() + { + return field_2_subex_len; + } + + public void writeBytes(byte [] array, int offset) + { + array[offset] = (byte) (sid + ptgClass); + LittleEndian.putInt(array, offset + 1, field_1_reserved); + LittleEndian.putShort(array, offset + 5, field_2_subex_len); + } + + public int getSize() + { + return SIZE; + } + + public String toFormulaString(Workbook book) + { + return ""; // TODO: Not sure how to format this. -- DN + } + + public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} + + public Object clone() { + MemAreaPtg ptg = new MemAreaPtg(); + ptg.field_1_reserved = field_1_reserved; + ptg.field_2_subex_len = field_2_subex_len; + return ptg; + } +} Property changes on: src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/java/org/apache/poi/hssf/record/formula/AreaPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/AreaPtg.java (revision 420385) +++ src/java/org/apache/poi/hssf/record/formula/AreaPtg.java (working copy) @@ -46,7 +46,7 @@ private BitField colRelative = BitFieldFactory.getInstance(0x4000); private BitField column = BitFieldFactory.getInstance(0x3FFF); - private AreaPtg() { + AreaPtg() { //Required for clone methods } Index: src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java (revision 420385) +++ src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java (working copy) @@ -359,7 +359,7 @@ dmap.put(new Integer(258),"GETTOOLBAR"); dmap.put(new Integer(259),"GETTOOL"); dmap.put(new Integer(260),"SPELLINGCHECK"); - dmap.put(new Integer(261),"ERRORTYPE"); + dmap.put(new Integer(261),"ERROR.TYPE"); dmap.put(new Integer(262),"APPTITLE"); dmap.put(new Integer(263),"WINDOWTITLE"); dmap.put(new Integer(264),"SAVETOOLBAR"); @@ -716,6 +716,7 @@ + functionData[261][0]=new Byte(Ptg.CLASS_VALUE);functionData[261][1]=new byte[] {Ptg.CLASS_VALUE};functionData[261][2]=new Integer(1); @@ -723,7 +724,6 @@ - functionData[269][0]=new Byte(Ptg.CLASS_VALUE);functionData[269][1]=new byte[] {Ptg.CLASS_REF};functionData[269][2]=new Integer(-1); functionData[270][0]=new Byte(Ptg.CLASS_VALUE);functionData[270][1]=new byte[] {Ptg.CLASS_VALUE};functionData[270][2]=new Integer(-1); functionData[271][0]=new Byte(Ptg.CLASS_VALUE);functionData[271][1]=new byte[] {Ptg.CLASS_VALUE};functionData[271][2]=new Integer(1); Index: src/java/org/apache/poi/hssf/record/formula/Ptg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/Ptg.java (revision 420385) +++ src/java/org/apache/poi/hssf/record/formula/Ptg.java (working copy) @@ -117,213 +117,213 @@ byte id = in.readByte(); Ptg retval = null; - final byte valueRef = ReferencePtg.sid + 0x20; - final byte arrayRef = ReferencePtg.sid + 0x40; - final byte valueFunc = FuncPtg.sid + 0x20; - final byte arrayFunc = FuncPtg.sid + 0x40; - final byte valueFuncVar = FuncVarPtg.sid +0x20; - final byte arrayFuncVar = FuncVarPtg.sid+0x40; - final byte valueArea = AreaPtg.sid + 0x20; - final byte arrayArea = AreaPtg.sid + 0x40; - switch (id) { - case AddPtg.sid : + case ExpPtg.sid : // 0x01 + retval = new ExpPtg(in); + break; + + case AddPtg.sid : // 0x03 retval = new AddPtg(in); break; - case SubtractPtg.sid : + case SubtractPtg.sid : // 0x04 retval = new SubtractPtg(in); break; - case BoolPtg.sid: - retval = new BoolPtg(in); - break; - - case IntPtg.sid : - retval = new IntPtg(in); + case MultiplyPtg.sid : // 0x05 + retval = new MultiplyPtg(in); break; - case DividePtg.sid : + case DividePtg.sid : // 0x06 retval = new DividePtg(in); break; - case MultiplyPtg.sid : - retval = new MultiplyPtg(in); + case PowerPtg.sid : // 0x07 + retval = new PowerPtg(in); break; - case PowerPtg.sid : - retval = new PowerPtg(in); + case ConcatPtg.sid : // 0x08 + retval = new ConcatPtg(in); break; - - case EqualPtg.sid: - retval = new EqualPtg(in); + + case LessThanPtg.sid: // 0x09 + retval = new LessThanPtg(in); break; - - case GreaterThanPtg.sid: - retval = new GreaterThanPtg(in); + + case LessEqualPtg.sid : // 0x0a + retval = new LessEqualPtg(in); break; - - case LessThanPtg.sid: - retval = new LessThanPtg(in); + + case EqualPtg.sid : // 0x0b + retval = new EqualPtg(in); break; - case LessEqualPtg.sid: - retval = new LessEqualPtg(in); - break; - - case GreaterEqualPtg.sid: - retval = new GreaterEqualPtg(in); - break; - - case NotEqualPtg.sid: - retval = new NotEqualPtg(in); - break; - - case ConcatPtg.sid : - retval = new ConcatPtg(in); + case GreaterEqualPtg.sid : // 0x0c + retval = new GreaterEqualPtg(in); break; - - case ArrayPtg.sid: - retval = new ArrayPtg(in); - break; - case ArrayPtgV.sid: - retval = new ArrayPtgV(in); - break; - case ArrayPtgA.sid: - retval = new ArrayPtgA(in); - break; - case AreaPtg.sid : - retval = new AreaPtg(in); + case GreaterThanPtg.sid : // 0x0d + retval = new GreaterThanPtg(in); break; - case valueArea: - retval = new AreaPtg(in); + + case NotEqualPtg.sid : // 0x0e + retval = new NotEqualPtg(in); break; - case arrayArea: - retval = new AreaPtg(in); + + case IntersectionPtg.sid : // 0x0f + retval = new IntersectionPtg(in); break; - case MemErrPtg.sid : // 0x27 These 3 values - case MemErrPtg.sid+0x20 : // 0x47 documented in - case MemErrPtg.sid+0x40 : // 0x67 openOffice.org doc. - retval = new MemErrPtg(in); + case UnionPtg.sid : // 0x10 + retval = new UnionPtg(in); break; - case AttrPtg.sid : - retval = new AttrPtg(in); + case RangePtg.sid : // 0x11 + retval = new RangePtg(in); break; - - case ReferencePtg.sid : - retval = new ReferencePtg(in); - break; - case valueRef : - retval = new ReferencePtg(in); - break; - case arrayRef : - retval = new ReferencePtg(in); - break; - case RefErrorPtg.sid: - retval = new RefErrorPtg(in); - break; - case ParenthesisPtg.sid : - retval = new ParenthesisPtg(in); + case UnaryPlusPtg.sid : // 0x12 + retval = new UnaryPlusPtg(in); break; - case MemFuncPtg.sid : - retval = new MemFuncPtg(in); + case UnaryMinusPtg.sid : // 0x13 + retval = new UnaryMinusPtg(in); break; - case UnionPtg.sid : - retval = new UnionPtg(in); + case PercentPtg.sid : // 0x14 + retval = new PercentPtg(in); break; - case FuncPtg.sid : - retval = new FuncPtg(in); + case ParenthesisPtg.sid : // 0x15 + retval = new ParenthesisPtg(in); break; - - case valueFunc : - retval = new FuncPtg(in); + + case MissingArgPtg.sid : // 0x16 + retval = new MissingArgPtg(in); break; - case arrayFunc : - retval = new FuncPtg(in); + + case StringPtg.sid : // 0x17 + retval = new StringPtg(in); + break; + + case AttrPtg.sid : // 0x19 + retval = new AttrPtg(in); break; - case FuncVarPtg.sid : - retval = new FuncVarPtg(in); + case ErrPtg.sid : // 0x1c + retval = new ErrPtg(in); break; - - case valueFuncVar : - retval = new FuncVarPtg(in); + + case BoolPtg.sid : // 0x1d + retval = new BoolPtg(in); + break; + + case IntPtg.sid : // 0x1e + retval = new IntPtg(in); break; - case arrayFuncVar : - retval = new FuncVarPtg(in); - break; - - case NumberPtg.sid : + + case NumberPtg.sid : // 0x1f retval = new NumberPtg(in); break; - case StringPtg.sid : - retval = new StringPtg(in); - break; + case ArrayPtg.sid : // 0x20 + retval = new ArrayPtg(in); + break; + case ArrayPtgV.sid : // 0x40 + retval = new ArrayPtgV(in); + break; + case ArrayPtgA.sid : // 0x60 + retval = new ArrayPtgA(in); + break; - case NamePtg.sid : // 0x23 These 3 values - case NamePtg.sid+0x20 : // 0x43 documented in - case NamePtg.sid+0x40 : // 0x63 openOffice.org doc. + case FuncPtg.sid : // 0x21 + case FuncPtg.sid + 0x20 : // 0x41 + case FuncPtg.sid + 0x40 : // 0x61 + retval = new FuncPtg(in); + break; - retval = new NamePtg(in); + case FuncVarPtg.sid : // 0x22 + case FuncVarPtg.sid + 0x20 : // 0x42 + case FuncVarPtg.sid + 0x40 : // 0x62 + retval = new FuncVarPtg(in); break; - - case NameXPtg.sid : // 0x39 - case NameXPtg.sid+0x20 : // 0x45 - case NameXPtg.sid+0x40 : // 0x79 - retval = new NameXPtg(in); + case ReferencePtg.sid : // 0x24 + case ReferencePtg.sid + 0x20 : // 0x44 + case ReferencePtg.sid + 0x40 : // 0x64 + retval = new ReferencePtg(in); break; - case ExpPtg.sid : - retval = new ExpPtg(in); + case AreaPtg.sid : // 0x25 + case AreaPtg.sid + 0x20 : // 0x45 + case AreaPtg.sid + 0x40 : // 0x65 + retval = new AreaPtg(in); break; - case Area3DPtg.sid : // 0x3b These 3 values - case Area3DPtg.sid+0x20 : // 0x5b documented in - case Area3DPtg.sid+0x40 : // 0x7b openOffice.org doc. + case MemAreaPtg.sid : // 0x26 + case MemAreaPtg.sid + 0x40 : // 0x46 + case MemAreaPtg.sid + 0x20 : // 0x66 + retval = new MemAreaPtg(in); + break; - retval = new Area3DPtg(in); + case MemErrPtg.sid : // 0x27 + case MemErrPtg.sid + 0x20 : // 0x47 + case MemErrPtg.sid + 0x40 : // 0x67 + retval = new MemErrPtg(in); break; - case Ref3DPtg.sid: // 0x3a These 3 values - case Ref3DPtg.sid+0x20: // 0x5a documented in - case Ref3DPtg.sid+0x40: // 0x7a openOffice.org doc. + case MemFuncPtg.sid : // 0x29 + retval = new MemFuncPtg(in); + break; - retval = new Ref3DPtg(in); + case RefErrorPtg.sid : // 0x2a + case RefErrorPtg.sid + 0x20 : // 0x4a + case RefErrorPtg.sid + 0x40 : // 0x6a + retval = new RefErrorPtg(in); break; - - case DeletedArea3DPtg.sid : // 0x3d - case DeletedArea3DPtg.sid+0x20 : // 0x5d - case DeletedArea3DPtg.sid+0x40 : // 0x7d - retval = new DeletedArea3DPtg(in); + case AreaErrPtg.sid : // 0x2b + case AreaErrPtg.sid + 0x20 : // 0x4b + case AreaErrPtg.sid + 0x40 : // 0x6b + retval = new AreaErrPtg(in); break; - case DeletedRef3DPtg.sid: // 0x3c - case DeletedRef3DPtg.sid+0x20: // 0x5c - case DeletedRef3DPtg.sid+0x40: // 0x7c + case NamePtg.sid : // 0x23 + case NamePtg.sid + 0x20 : // 0x43 + case NamePtg.sid + 0x40 : // 0x63 + retval = new NamePtg(in); + break; - retval = new DeletedRef3DPtg(in); + case NameXPtg.sid : // 0x39 + case NameXPtg.sid + 0x20 : // 0x45 + case NameXPtg.sid + 0x40 : // 0x79 + retval = new NameXPtg(in); break; - - case MissingArgPtg.sid: - retval = new MissingArgPtg(in); + + case Area3DPtg.sid : // 0x3b + case Area3DPtg.sid + 0x20 : // 0x5b + case Area3DPtg.sid + 0x40 : // 0x7b + retval = new Area3DPtg(in); break; - case UnaryPlusPtg.sid: - retval=new UnaryPlusPtg(in); + + case Ref3DPtg.sid : // 0x3a + case Ref3DPtg.sid + 0x20: // 0x5a + case Ref3DPtg.sid + 0x40: // 0x7a + retval = new Ref3DPtg(in); break; - case UnaryMinusPtg.sid: - retval=new UnaryMinusPtg(in); + + case DeletedRef3DPtg.sid: // 0x3c + case DeletedRef3DPtg.sid + 0x20: // 0x5c + case DeletedRef3DPtg.sid + 0x40: // 0x7c + retval = new DeletedRef3DPtg(in); break; + case DeletedArea3DPtg.sid : // 0x3d + case DeletedArea3DPtg.sid + 0x20 : // 0x5d + case DeletedArea3DPtg.sid + 0x40 : // 0x7d + retval = new DeletedArea3DPtg(in); + break; + default : //retval = new UnknownPtg(); @@ -335,8 +335,10 @@ retval.setClass(CLASS_ARRAY); } else if (id > 0x40) { retval.setClass(CLASS_VALUE); - } else + } else { retval.setClass(CLASS_REF); + } + return retval; } Index: src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java (revision 0) +++ src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java (revision 0) @@ -0,0 +1,88 @@ +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.BitField; + +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.RecordInputStream; + +/** + * AreaErr - handles deleted cell area references. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class AreaErrPtg extends AreaPtg +{ + public final static byte sid = 0x2b; + + private AreaErrPtg() + { + //Required for clone methods + super(); + } + + public AreaErrPtg(RecordInputStream in) + { + super(in); + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append("AreaErrPtg\n"); + buffer.append("firstRow = " + getFirstRow()).append("\n"); + buffer.append("lastRow = " + getLastRow()).append("\n"); + buffer.append("firstCol = " + getFirstColumn()).append("\n"); + buffer.append("lastCol = " + getLastColumn()).append("\n"); + buffer.append("firstColRowRel= " + + isFirstRowRelative()).append("\n"); + buffer.append("lastColRowRel = " + + isLastRowRelative()).append("\n"); + buffer.append("firstColRel = " + isFirstColRelative()).append("\n"); + buffer.append("lastColRel = " + isLastColRelative()).append("\n"); + return buffer.toString(); + } + + public void writeBytes(byte [] array, int offset) { + super.writeBytes(array, offset); + array[offset] = (byte) (sid + ptgClass); + } + + public String toFormulaString(Workbook book) + { + return "#REF!"; + } + + public Object clone() + { + AreaErrPtg ptg = new AreaErrPtg(); + ptg.setFirstRow(getFirstRow()); + ptg.setFirstColumn(getFirstColumn()); + ptg.setLastRow(getLastRow()); + ptg.setLastColumn(getLastColumn()); + ptg.setFirstColRelative(isFirstColRelative()); + ptg.setLastColRelative(isLastColRelative()); + ptg.setFirstRowRelative(isFirstRowRelative()); + ptg.setLastRowRelative(isLastRowRelative()); + ptg.setClass(ptgClass); + return ptg; + } +} + Property changes on: src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java (revision 420385) +++ src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java (working copy) @@ -31,15 +31,13 @@ * * @author andy * @author Jason Height (jheight at chariot dot net dot au) + * @author Daniel Noll (daniel at nuix dot com dot au) */ public class MemErrPtg - extends Ptg + extends MemAreaPtg { public final static short sid = 0x27; - private final static int SIZE = 7; - private int field_1_reserved; - private short field_2_subex_len; /** Creates new MemErrPtg */ @@ -49,49 +47,24 @@ public MemErrPtg(RecordInputStream in) { - field_1_reserved = in.readInt(); - field_2_subex_len = in.readShort(); + super(in); } - public void setReserved(int res) - { - field_1_reserved = res; - } - - public int getReserved() - { - return field_1_reserved; - } - - public void setSubexpressionLength(short subexlen) - { - field_2_subex_len = subexlen; - } - - public short getSubexpressionLength() - { - return field_2_subex_len; - } - public void writeBytes(byte [] array, int offset) { + super.writeBytes(array, offset); + array[offset] = (byte) (sid + ptgClass); } - public int getSize() - { - return SIZE; - } - public String toFormulaString(Workbook book) { return "ERR#"; } - public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} public Object clone() { MemErrPtg ptg = new MemErrPtg(); - ptg.field_1_reserved = field_1_reserved; - ptg.field_2_subex_len = field_2_subex_len; + ptg.setReserved(getReserved()); + ptg.setSubexpressionLength(getSubexpressionLength()); return ptg; } } Index: src/java/org/apache/poi/hssf/record/formula/PercentPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/PercentPtg.java (revision 0) +++ src/java/org/apache/poi/hssf/record/formula/PercentPtg.java (revision 0) @@ -0,0 +1,96 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +/* + * PercentPtg.java + * + * Created on March 29, 2006, 9:23 PM + */ +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.RecordInputStream; + +/** + * Percent PTG. + * + * @author Daniel Noll (daniel at nuix.com.au) + */ + +public class PercentPtg + extends OperationPtg +{ + public final static int SIZE = 1; + public final static byte sid = 0x14; + + private final static String PERCENT = "%"; + + /** Creates new PercentPtg */ + + public PercentPtg() + { + } + + public PercentPtg(RecordInputStream in) + { + + // doesn't need anything + } + + + public void writeBytes(byte [] array, int offset) + { + array[ offset + 0 ] = sid; + } + + public int getSize() + { + return SIZE; + } + + public int getType() + { + return TYPE_UNARY; + } + + public int getNumberOfOperands() + { + return 1; + } + + /** Implementation of method from Ptg */ + public String toFormulaString(Workbook book) + { + return "%"; + } + + /** implementation of method from OperationsPtg*/ + public String toFormulaString(String[] operands) { + StringBuffer buffer = new StringBuffer(); + + buffer.append(operands[ 0 ]); + buffer.append(PERCENT); + return buffer.toString(); + } + + public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;} + + public Object clone() { + return new PercentPtg(); + } + +} Index: src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java =================================================================== --- src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java (revision 0) +++ src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java (revision 0) @@ -0,0 +1,83 @@ +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.model.Workbook; +import org.apache.poi.hssf.record.RecordInputStream; + +/** + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class IntersectionPtg extends OperationPtg +{ + public final static byte sid = 0x0f; + + + public IntersectionPtg() + { + } + + public IntersectionPtg(RecordInputStream in) + { + // doesn't need anything + } + + + public int getSize() + { + return 1; + } + + public void writeBytes( byte[] array, int offset ) + { + array[ offset + 0 ] = sid; + } + + public Object clone() + { + return new IntersectionPtg(); + } + + public int getType() + { + return TYPE_BINARY; + } + + /** Implementation of method from Ptg */ + public String toFormulaString(Workbook book) + { + return " "; + } + + + /** implementation of method from OperationsPtg*/ + public String toFormulaString(String[] operands) + { + StringBuffer buffer = new StringBuffer(); + + buffer.append(operands[ 0 ]); + buffer.append(" "); + buffer.append(operands[ 1 ]); + return buffer.toString(); + } + + public int getNumberOfOperands() + { + return 2; + } + +} Property changes on: src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/HSSFTests.java =================================================================== --- src/testcases/org/apache/poi/hssf/HSSFTests.java (revision 420385) +++ src/testcases/org/apache/poi/hssf/HSSFTests.java (working copy) @@ -74,7 +74,13 @@ import org.apache.poi.hssf.record.TestValueRangeRecord; import org.apache.poi.hssf.record.aggregates.TestRowRecordsAggregate; import org.apache.poi.hssf.record.aggregates.TestValueRecordsAggregate; +import org.apache.poi.hssf.record.formula.TestAreaErrPtg; +import org.apache.poi.hssf.record.formula.TestErrPtg; import org.apache.poi.hssf.record.formula.TestFuncPtg; +import org.apache.poi.hssf.record.formula.TestIntersectionPtg; +import org.apache.poi.hssf.record.formula.TestPercentPtg; +import org.apache.poi.hssf.record.formula.TestRangePtg; +import org.apache.poi.hssf.record.formula.TestUnionPtg; import org.apache.poi.hssf.usermodel.TestBugs; import org.apache.poi.hssf.usermodel.TestCellStyle; import org.apache.poi.hssf.usermodel.TestCloneSheet; @@ -207,7 +213,13 @@ suite.addTest(new TestSuite(TestSheetReferences.class)); + suite.addTest(new TestSuite(TestAreaErrPtg.class)); + suite.addTest(new TestSuite(TestErrPtg.class)); suite.addTest(new TestSuite(TestFuncPtg.class)); + suite.addTest(new TestSuite(TestIntersectionPtg.class)); + suite.addTest(new TestSuite(TestPercentPtg.class)); + suite.addTest(new TestSuite(TestRangePtg.class)); + suite.addTest(new TestSuite(TestUnionPtg.class)); suite.addTest(new TestSuite(TestValueRecordsAggregate.class)); suite.addTest(new TestSuite(TestNameRecord.class)); suite.addTest(new TestSuite(TestEventRecordFactory.class)); Index: src/testcases/org/apache/poi/hssf/data/IntersectionPtg.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/testcases/org/apache/poi/hssf/data/IntersectionPtg.xls ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: src/testcases/org/apache/poi/hssf/data/AreaErrPtg.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/testcases/org/apache/poi/hssf/data/AreaErrPtg.xls ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: src/testcases/org/apache/poi/hssf/data/UnionPtg.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/testcases/org/apache/poi/hssf/data/UnionPtg.xls ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: src/testcases/org/apache/poi/hssf/data/PercentPtg.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/testcases/org/apache/poi/hssf/data/PercentPtg.xls ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: src/testcases/org/apache/poi/hssf/data/ErrPtg.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/testcases/org/apache/poi/hssf/data/ErrPtg.xls ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: src/testcases/org/apache/poi/hssf/data/RangePtg.xls =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/testcases/org/apache/poi/hssf/data/RangePtg.xls ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: src/testcases/org/apache/poi/hssf/record/formula/TestIntersectionPtg.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/TestIntersectionPtg.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/TestIntersectionPtg.java (revision 0) @@ -0,0 +1,42 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests for {@link IntersectionPtg}. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class TestIntersectionPtg extends AbstractPtgTestCase +{ + /** + * Tests reading a file containing this ptg. + */ + public void testReading() throws Exception + { + HSSFWorkbook workbook = loadWorkbook("IntersectionPtg.xls"); + HSSFCell cell = workbook.getSheetAt(0).getRow(4).getCell((short) 2); + assertEquals("Wrong cell value", 5.0, cell.getNumericCellValue(), 0.0); + assertEquals("Wrong cell formula", "SUM(A1:B2 B2:C3)", cell.getCellFormula()); + } +} + + Property changes on: src/testcases/org/apache/poi/hssf/record/formula/TestIntersectionPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/record/formula/TestErrPtg.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/TestErrPtg.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/TestErrPtg.java (revision 0) @@ -0,0 +1,42 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests for {@link ErrPtg}. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class TestErrPtg extends AbstractPtgTestCase +{ + /** + * Tests reading a file containing this ptg. + */ + public void testReading() throws Exception + { + HSSFWorkbook workbook = loadWorkbook("ErrPtg.xls"); + HSSFCell cell = workbook.getSheetAt(0).getRow(3).getCell((short) 0); + assertEquals("Wrong cell value", 4.0, cell.getNumericCellValue(), 0.0); + assertEquals("Wrong cell formula", "ERROR.TYPE(#REF!)", cell.getCellFormula()); + } +} + + Property changes on: src/testcases/org/apache/poi/hssf/record/formula/TestErrPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/record/formula/TestUnionPtg.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/TestUnionPtg.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/TestUnionPtg.java (revision 0) @@ -0,0 +1,42 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests for {@link UnionPtg}. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class TestUnionPtg extends AbstractPtgTestCase +{ + /** + * Tests reading a file containing this ptg. + */ + public void testReading() throws Exception + { + HSSFWorkbook workbook = loadWorkbook("UnionPtg.xls"); + HSSFCell cell = workbook.getSheetAt(0).getRow(4).getCell((short) 2); + assertEquals("Wrong cell value", 24.0, cell.getNumericCellValue(), 0.0); + assertEquals("Wrong cell formula", "SUM(A1:B2,B2:C3)", cell.getCellFormula()); + } +} + + Property changes on: src/testcases/org/apache/poi/hssf/record/formula/TestUnionPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/record/formula/TestRangePtg.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/TestRangePtg.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/TestRangePtg.java (revision 0) @@ -0,0 +1,42 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests for {@link RangePtg}. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class TestRangePtg extends AbstractPtgTestCase +{ + /** + * Tests reading a file containing this ptg. + */ + public void testReading() throws Exception + { + HSSFWorkbook workbook = loadWorkbook("RangePtg.xls"); + HSSFCell cell = workbook.getSheetAt(0).getRow(3).getCell((short) 1); + assertEquals("Wrong cell value", 10.0, cell.getNumericCellValue(), 0.0); + assertEquals("Wrong cell formula", "SUM(pineapple:B2)", cell.getCellFormula()); + } +} + + Property changes on: src/testcases/org/apache/poi/hssf/record/formula/TestRangePtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/record/formula/AbstractPtgTestCase.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/AbstractPtgTestCase.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/AbstractPtgTestCase.java (revision 0) @@ -0,0 +1,61 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.TestCase; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Convenient abstract class to reduce the amount of boilerplate code needed + * in ptg-related unit tests. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class AbstractPtgTestCase extends TestCase +{ + /** Directory containing the test data. */ + private static String dataDir = System.getProperty("HSSF.testdata.path"); + + /** + * Loads a workbook from the given filename in the test data dir. + * + * @param filename the filename. + * @return the loaded workbook. + * @throws IOException if an error occurs loading the workbook. + */ + protected static HSSFWorkbook loadWorkbook(String filename) + throws IOException { + File file = new File(dataDir, filename); + InputStream stream = new BufferedInputStream(new FileInputStream(file)); + try + { + return new HSSFWorkbook(stream); + } + finally + { + stream.close(); + } + } +} Property changes on: src/testcases/org/apache/poi/hssf/record/formula/AbstractPtgTestCase.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/record/formula/TestPercentPtg.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/TestPercentPtg.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/TestPercentPtg.java (revision 0) @@ -0,0 +1,47 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests for {@link PercentPtg}. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class TestPercentPtg extends AbstractPtgTestCase +{ + /** + * Tests reading a file containing this ptg. + */ + public void testReading() throws Exception + { + HSSFWorkbook workbook = loadWorkbook("PercentPtg.xls"); + HSSFSheet sheet = workbook.getSheetAt(0); + + assertEquals("Wrong numeric value for original number", 53000.0, + sheet.getRow(0).getCell((short) 0).getNumericCellValue(), 0.0); + assertEquals("Wrong numeric value for percent formula result", 5300.0, + sheet.getRow(1).getCell((short) 0).getNumericCellValue(), 0.0); + assertEquals("Wrong formula string for percent formula", "A1*10%", + sheet.getRow(1).getCell((short) 0).getCellFormula()); + } +} + + Property changes on: src/testcases/org/apache/poi/hssf/record/formula/TestPercentPtg.java ___________________________________________________________________ Name: svn:executable + * Index: src/testcases/org/apache/poi/hssf/record/formula/TestAreaErrPtg.java =================================================================== --- src/testcases/org/apache/poi/hssf/record/formula/TestAreaErrPtg.java (revision 0) +++ src/testcases/org/apache/poi/hssf/record/formula/TestAreaErrPtg.java (revision 0) @@ -0,0 +1,40 @@ + +/* ==================================================================== + Copyright 2003-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hssf.record.formula; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests for {@link AreaErrPtg}. + * + * @author Daniel Noll (daniel at nuix dot com dot au) + */ +public class TestAreaErrPtg extends AbstractPtgTestCase +{ + /** + * Tests reading a file containing this ptg. + */ + public void testReading() throws Exception + { + HSSFWorkbook workbook = loadWorkbook("AreaErrPtg.xls"); + assertEquals("Wrong formula string for area error", "SUM(#REF!)", + workbook.getSheetAt(0).getRow(0).getCell((short) 2).getCellFormula()); + } +} + + Property changes on: src/testcases/org/apache/poi/hssf/record/formula/TestAreaErrPtg.java ___________________________________________________________________ Name: svn:executable + *