diff --git a/src/java/org/apache/poi/hssf/record/FormulaRecord.java b/src/java/org/apache/poi/hssf/record/FormulaRecord.java
index 64f0525da..1b9428da8 100644
--- a/src/java/org/apache/poi/hssf/record/FormulaRecord.java
+++ b/src/java/org/apache/poi/hssf/record/FormulaRecord.java
@@ -27,6 +27,8 @@ import java.util.List;
import java.util.Stack;
import org.apache.poi.hssf.record.formula.Ptg;
+import org.apache.poi.util.BitField;
+import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.LittleEndian;
/**
@@ -53,6 +55,9 @@ public class FormulaRecord
private short field_3_xf;
private double field_4_value;
private short field_5_options;
+ private BitField alwaysCalc = BitFieldFactory.getInstance(0x0001);
+ private BitField calcOnLoad = BitFieldFactory.getInstance(0x0002);
+ private BitField sharedFormula = BitFieldFactory.getInstance(0x0008);
private int field_6_zero;
private short field_7_expression_len;
private Stack field_8_parsed_expr;
@@ -191,7 +196,11 @@ public class FormulaRecord
{
return field_5_options;
}
-
+
+ public boolean isSharedFormula() {
+ return sharedFormula.isSet(field_5_options);
+ }
+
/**
* get the length (in number of tokens) of the expression
* @return expression length
@@ -262,6 +271,10 @@ public class FormulaRecord
{
return field_8_parsed_expr;
}
+
+ public void setParsedExpression(Stack ptgs) {
+ field_8_parsed_expr = ptgs;
+ }
/**
* called by constructor, should throw runtime exception in the event of a
@@ -474,6 +487,12 @@ public class FormulaRecord
.append("\n");
buffer.append(" .options = ").append(getOptions())
.append("\n");
+ buffer.append(" .alwaysCalc = ").append(alwaysCalc.isSet(getOptions()))
+ .append("\n");
+ buffer.append(" .calcOnLoad = ").append(calcOnLoad.isSet(getOptions()))
+ .append("\n");
+ buffer.append(" .sharedFormula = ").append(sharedFormula.isSet(getOptions()))
+ .append("\n");
buffer.append(" .zero = ").append(field_6_zero)
.append("\n");
buffer.append(" .expressionlength= ").append(getExpressionLength())
@@ -485,9 +504,9 @@ public class FormulaRecord
for (int k = 0; k < field_8_parsed_expr.size(); k++ ) {
- buffer.append("Formula ")
+ buffer.append(" Ptg(")
.append(k)
- .append("=")
+ .append(")=")
.append(field_8_parsed_expr.get(k).toString())
.append("\n")
.append(((Ptg)field_8_parsed_expr.get(k)).toDebugString())
diff --git a/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java b/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java
index be31e46f3..2f66be6ba 100755
--- a/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java
+++ b/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java
@@ -18,6 +18,10 @@
package org.apache.poi.hssf.record;
+import java.util.Stack;
+import java.util.List;
+
+import org.apache.poi.hssf.record.formula.*;
import org.apache.poi.util.LittleEndian;
/**
@@ -36,9 +40,14 @@ public class SharedFormulaRecord
extends Record
{
public final static short sid = 0x4BC;
- private short size = 0;
- private byte[] thedata = null;
- int offset = 0;
+
+ private int field_1_first_row;
+ private int field_2_last_row;
+ private short field_3_first_column;
+ private short field_4_last_column;
+ private int field_5_reserved;
+ private short field_6_expression_len;
+ private Stack field_7_parsed_expr;
public SharedFormulaRecord()
{
@@ -55,6 +64,35 @@ public class SharedFormulaRecord
{
super(in);
}
+
+ protected void validateSid(short id)
+ {
+ if (id != this.sid)
+ {
+ throw new RecordFormatException("Not a valid SharedFormula");
+ }
+ }
+
+ public int getFirstRow() {
+ return field_1_first_row;
+ }
+
+ public int getLastRow() {
+ return field_2_last_row;
+ }
+
+ public short getFirstColumn() {
+ return field_3_first_column;
+ }
+
+ public short getLastColumn() {
+ return field_4_last_column;
+ }
+
+ public short getExpressionLength()
+ {
+ return field_6_expression_len;
+ }
/**
* spit the record out AS IS. no interperatation or identification
@@ -62,38 +100,15 @@ public class SharedFormulaRecord
public int serialize(int offset, byte [] data)
{
- if (thedata == null)
- {
- thedata = new byte[ 0 ];
- }
- LittleEndian.putShort(data, 0 + offset, sid);
- LittleEndian.putShort(data, 2 + offset, ( short ) (thedata.length));
- if (thedata.length > 0)
- {
- System.arraycopy(thedata, 0, data, 4 + offset, thedata.length);
- }
- return getRecordSize();
+ //Because this record is converted to individual Formula records, this method is not required.
+ throw new UnsupportedOperationException("Cannot serialize a SharedFormulaRecord");
}
public int getRecordSize()
{
- int retval = 4;
+ //Because this record is converted to individual Formula records, this method is not required.
+ throw new UnsupportedOperationException("Cannot get the size for a SharedFormulaRecord");
- if (thedata != null)
- {
- retval += thedata.length;
- }
- return retval;
- }
-
-
- protected void validateSid(short id)
- {
- if (id != this.sid)
- {
- throw new RecordFormatException("Not a valid SharedFormula");
- }
-
}
/**
@@ -107,6 +122,33 @@ public class SharedFormulaRecord
buffer.append("[SHARED FORMULA RECORD:" + Integer.toHexString(sid) + "]\n");
buffer.append(" .id = ").append(Integer.toHexString(sid))
.append("\n");
+ buffer.append(" .first_row = ")
+ .append(Integer.toHexString(getFirstRow())).append("\n");
+ buffer.append(" .last_row = ")
+ .append(Integer.toHexString(getLastRow()))
+ .append("\n");
+ buffer.append(" .first_column = ")
+ .append(Integer.toHexString(getFirstColumn())).append("\n");
+ buffer.append(" .last_column = ")
+ .append(Integer.toHexString(getLastColumn()))
+ .append("\n");
+ buffer.append(" .reserved = ")
+ .append(Integer.toHexString(field_5_reserved))
+ .append("\n");
+ buffer.append(" .expressionlength= ").append(getExpressionLength())
+ .append("\n");
+
+ buffer.append(" .numptgsinarray = ").append(field_7_parsed_expr.size())
+ .append("\n");
+
+ for (int k = 0; k < field_7_parsed_expr.size(); k++ ) {
+ buffer.append("Formula ")
+ .append(k)
+ .append("\n")
+ .append(field_7_parsed_expr.get(k).toString())
+ .append("\n");
+ }
+
buffer.append("[/SHARED FORMULA RECORD]\n");
return buffer.toString();
}
@@ -121,7 +163,99 @@ public class SharedFormulaRecord
*/
protected void fillFields(RecordInputStream in)
{
- thedata = in.readRemainder();
+ field_1_first_row = in.readShort();
+ field_2_last_row = in.readShort();
+ field_3_first_column = in.readByte();
+ field_4_last_column = in.readByte();
+ field_5_reserved = in.readShort();
+ field_6_expression_len = in.readShort();
+ field_7_parsed_expr = getParsedExpressionTokens(in);
+ }
+
+ private Stack getParsedExpressionTokens(RecordInputStream in)
+ {
+ Stack stack = new Stack();
+
+ while (in.remaining() != 0) {
+ Ptg ptg = Ptg.createPtg(in);
+ stack.push(ptg);
+ }
+ return stack;
+ }
+
+ public boolean isFormulaInShared(FormulaRecord formula) {
+ final int formulaRow = formula.getRow();
+ final int formulaColumn = formula.getColumn();
+ return ((getFirstRow() <= formulaRow) && (getLastRow() >= formulaRow) &&
+ (getFirstColumn() <= formulaColumn) && (getLastColumn() >= formulaColumn));
+ }
+
+ /** Creates a non shared formula from the shared formula counter part*/
+ public void convertSharedFormulaRecord(FormulaRecord formula) {
+ //Sanity checks
+ final int formulaRow = formula.getRow();
+ final int formulaColumn = formula.getColumn();
+ if (isFormulaInShared(formula)) {
+ formula.setExpressionLength(getExpressionLength());
+ Stack newPtgStack = new Stack();
+
+ for (int k = 0; k < field_7_parsed_expr.size(); k++) {
+ Ptg ptg = (Ptg) field_7_parsed_expr.get(k);
+ if (ptg instanceof RefNPtg) {
+ RefNPtg refNPtg = (RefNPtg)ptg;
+ ptg = new ReferencePtg( (short)(formulaRow + refNPtg.getRow()),
+ (byte)(formulaColumn + refNPtg.getColumn()),
+ refNPtg.isRowRelative(),
+ refNPtg.isColRelative());
+ } else if (ptg instanceof RefNVPtg) {
+ RefNVPtg refNVPtg = (RefNVPtg)ptg;
+ ptg = new RefVPtg( (short)(formulaRow + refNVPtg.getRow()),
+ (byte)(formulaColumn + refNVPtg.getColumn()),
+ refNVPtg.isRowRelative(),
+ refNVPtg.isColRelative());
+ } else if (ptg instanceof RefNAPtg) {
+ RefNAPtg refNAPtg = (RefNAPtg)ptg;
+ ptg = new RefAPtg( (short)(formulaRow + refNAPtg.getRow()),
+ (byte)(formulaColumn + refNAPtg.getColumn()),
+ refNAPtg.isRowRelative(),
+ refNAPtg.isColRelative());
+ } else if (ptg instanceof AreaNPtg) {
+ AreaNPtg areaNPtg = (AreaNPtg)ptg;
+ ptg = new AreaPtg((short)(formulaRow + areaNPtg.getFirstRow()),
+ (short)(formulaRow + areaNPtg.getLastRow()),
+ (short)(formulaColumn + areaNPtg.getFirstColumn()),
+ (short)(formulaColumn + areaNPtg.getLastColumn()),
+ areaNPtg.isFirstRowRelative(),
+ areaNPtg.isLastRowRelative(),
+ areaNPtg.isFirstColRelative(),
+ areaNPtg.isLastColRelative());
+ } else if (ptg instanceof AreaNVPtg) {
+ AreaNVPtg areaNVPtg = (AreaNVPtg)ptg;
+ ptg = new AreaVPtg((short)(formulaRow + areaNVPtg.getFirstRow()),
+ (short)(formulaRow + areaNVPtg.getLastRow()),
+ (short)(formulaColumn + areaNVPtg.getFirstColumn()),
+ (short)(formulaColumn + areaNVPtg.getLastColumn()),
+ areaNVPtg.isFirstRowRelative(),
+ areaNVPtg.isLastRowRelative(),
+ areaNVPtg.isFirstColRelative(),
+ areaNVPtg.isLastColRelative());
+ } else if (ptg instanceof AreaNAPtg) {
+ AreaNAPtg areaNAPtg = (AreaNAPtg)ptg;
+ ptg = new AreaAPtg((short)(formulaRow + areaNAPtg.getFirstRow()),
+ (short)(formulaRow + areaNAPtg.getLastRow()),
+ (short)(formulaColumn + areaNAPtg.getFirstColumn()),
+ (short)(formulaColumn + areaNAPtg.getLastColumn()),
+ areaNAPtg.isFirstRowRelative(),
+ areaNAPtg.isLastRowRelative(),
+ areaNAPtg.isFirstColRelative(),
+ areaNAPtg.isLastColRelative());
+ }
+ newPtgStack.add(ptg);
+ }
+ formula.setParsedExpression(newPtgStack);
+ } else {
+ throw new RuntimeException("Shared Formula Conversion: Coding Error");
+ }
}
/**
@@ -141,10 +275,7 @@ public class SharedFormulaRecord
}
public Object clone() {
- SharedFormulaRecord rec = new SharedFormulaRecord();
- rec.offset = offset;
- rec.size = size;
- rec.thedata = thedata;
- return rec;
+ //Because this record is converted to individual Formula records, this method is not required.
+ throw new UnsupportedOperationException("Cannot clone a SharedFormulaRecord");
}
}
diff --git a/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
index 49a1cd452..d13db98b4 100644
--- a/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
+++ b/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
@@ -125,6 +125,7 @@ public class ValueRecordsAggregate
int k = 0;
FormulaRecordAggregate lastFormulaAggregate = null;
+ SharedFormulaRecord lastSharedFormula = null;
for (k = offset; k < records.size(); k++)
{
@@ -136,6 +137,26 @@ public class ValueRecordsAggregate
}
if (rec instanceof FormulaRecord)
{
+ FormulaRecord formula = (FormulaRecord)rec;
+ if (formula.isSharedFormula()) {
+ if ((lastSharedFormula != null) && (lastSharedFormula.isFormulaInShared(formula))) {
+ //Convert this Formula Record from a shared formula to a real formula
+ lastSharedFormula.convertSharedFormulaRecord(formula);
+ } else {
+ Record nextRecord = (Record) records.get(k + 1);
+ if (nextRecord instanceof SharedFormulaRecord) {
+ k++;
+ lastSharedFormula = (SharedFormulaRecord) nextRecord;
+
+ //Convert this Formula Record from a shared formula to a real formula
+ lastSharedFormula.convertSharedFormulaRecord(formula);
+ }
+ else
+ throw new RuntimeException(
+ "Shared formula bit set but next record is not a Shared Formula??");
+ }
+ }
+
lastFormulaAggregate = new FormulaRecordAggregate((FormulaRecord)rec, null);
insertCell( lastFormulaAggregate );
}
@@ -143,11 +164,11 @@ public class ValueRecordsAggregate
{
lastFormulaAggregate.setStringRecord((StringRecord)rec);
}
- else if (rec instanceof SharedFormulaRecord)
- {
- //these follow the first formula in a group
- lastFormulaAggregate.setSharedFormulaRecord((SharedFormulaRecord)rec);
- }
+ //else if (rec instanceof SharedFormulaRecord)
+ //{
+ // //these follow the first formula in a group
+ // lastFormulaAggregate.setSharedFormulaRecord((SharedFormulaRecord)rec);
+ //}
else if (rec.isValue())
{
insertCell(( CellValueRecordInterface ) rec);
diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaAPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaAPtg.java
new file mode 100644
index 000000000..93cc61cb0
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/AreaAPtg.java
@@ -0,0 +1,107 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * AreaPtg.java
+ *
+ * Created on November 17, 2001, 9:30 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.AreaReference;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * Specifies a rectangular area of cells A1:A4 for instance.
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class AreaAPtg
+ extends AreaPtg
+{
+ public final static short sid = 0x65;
+
+ protected AreaAPtg() {
+ //Required for clone methods
+ }
+
+ public AreaAPtg(short firstRow, short lastRow, short firstColumn, short lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
+ super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
+ }
+
+ public AreaAPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public String getAreaPtgName() {
+ return "AreaAPtg";
+ }
+
+ public Object clone() {
+ AreaAPtg ptg = new AreaAPtg();
+ ptg.setFirstRow(getFirstRow());
+ ptg.setLastRow(getLastRow());
+ ptg.setFirstColumnRaw(getFirstColumnRaw());
+ ptg.setLastColumnRaw(getLastColumnRaw());
+ ptg.setClass(ptgClass);
+ return ptg;
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java
new file mode 100644
index 000000000..32751d482
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/AreaNAPtg.java
@@ -0,0 +1,106 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * AreaPtg.java
+ *
+ * Created on November 17, 2001, 9:30 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.AreaReference;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * Specifies a rectangular area of cells A1:A4 for instance.
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class AreaNAPtg
+ extends AreaPtg
+{
+ public final static short sid = 0x6D;
+
+ protected AreaNAPtg() {
+ //Required for clone methods
+ }
+
+ public AreaNAPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public void writeBytes(byte [] array, int offset) {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public String getAreaPtgName() {
+ return "AreaNAPtg";
+ }
+
+ public String toFormulaString(Workbook book)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public Object clone() {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java
new file mode 100644
index 000000000..084e77cc9
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java
@@ -0,0 +1,106 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * AreaPtg.java
+ *
+ * Created on November 17, 2001, 9:30 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.AreaReference;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * Specifies a rectangular area of cells A1:A4 for instance.
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class AreaNPtg
+ extends AreaPtg
+{
+ public final static short sid = 0x2D;
+
+ protected AreaNPtg() {
+ //Required for clone methods
+ }
+
+ public AreaNPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public void writeBytes(byte [] array, int offset) {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public String getAreaPtgName() {
+ return "AreaNPtg";
+ }
+
+ public String toFormulaString(Workbook book)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public Object clone() {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java
new file mode 100644
index 000000000..f7571ecdc
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/AreaNVPtg.java
@@ -0,0 +1,107 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * AreaPtg.java
+ *
+ * Created on November 17, 2001, 9:30 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.AreaReference;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * Specifies a rectangular area of cells A1:A4 for instance.
+ * @author andy
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class AreaNVPtg
+ extends AreaPtg
+{
+ public final static short sid = 0x4D;
+
+ protected AreaNVPtg() {
+ //Required for clone methods
+ }
+
+ public AreaNVPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public void writeBytes(byte [] array, int offset) {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public String getAreaPtgName() {
+ return "AreaNVPtg";
+ }
+
+ public String toFormulaString(Workbook book)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public Object clone() {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
index 0abc1bc1e..85638b5d0 100644
--- a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
+++ b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
@@ -46,7 +46,7 @@ public class AreaPtg
private BitField colRelative = BitFieldFactory.getInstance(0x4000);
private BitField column = BitFieldFactory.getInstance(0x3FFF);
- private AreaPtg() {
+ protected AreaPtg() {
//Required for clone methods
}
@@ -59,9 +59,19 @@ public class AreaPtg
setFirstColRelative(!ar.getCells()[0].isColAbsolute());
setLastColRelative(!ar.getCells()[1].isColAbsolute());
setFirstRowRelative(!ar.getCells()[0].isRowAbsolute());
- setLastRowRelative(!ar.getCells()[1].isRowAbsolute());
-
+ setLastRowRelative(!ar.getCells()[1].isRowAbsolute());
}
+
+ public AreaPtg(short firstRow, short lastRow, short firstColumn, short lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
+ setFirstRow(firstRow);
+ setLastRow(lastRow);
+ setFirstColumn(firstColumn);
+ setLastColumn(lastColumn);
+ setFirstRowRelative(firstRowRelative);
+ setLastRowRelative(lastRowRelative);
+ setFirstColRelative(firstColRelative);
+ setLastColRelative(lastColRelative);
+ }
public AreaPtg(RecordInputStream in)
{
@@ -71,12 +81,17 @@ public class AreaPtg
field_4_last_column = in.readShort();
//System.out.println(toString());
}
+
+ public String getAreaPtgName() {
+ return "AreaPtg";
+ }
public String toString()
{
StringBuffer buffer = new StringBuffer();
- buffer.append("AreaPtg\n");
+ buffer.append(getAreaPtgName());
+ buffer.append("\n");
buffer.append("firstRow = " + getFirstRow()).append("\n");
buffer.append("lastRow = " + getLastRow()).append("\n");
buffer.append("firstCol = " + getFirstColumn()).append("\n");
diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaVPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaVPtg.java
new file mode 100644
index 000000000..cc04f423d
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/AreaVPtg.java
@@ -0,0 +1,108 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * AreaPtg.java
+ *
+ * Created on November 17, 2001, 9:30 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.AreaReference;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * Specifies a rectangular area of cells A1:A4 for instance.
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class AreaVPtg
+ extends AreaPtg
+{
+ public final static short sid = 0x45;
+
+ protected AreaVPtg() {
+ //Required for clone methods
+ }
+
+ public AreaVPtg(short firstRow, short lastRow, short firstColumn, short lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
+ super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
+ }
+
+
+ public AreaVPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public String getAreaPtgName() {
+ return "AreaVPtg";
+ }
+
+ public Object clone() {
+ AreaVPtg ptg = new AreaVPtg();
+ ptg.setFirstRow(getFirstRow());
+ ptg.setLastRow(getLastRow());
+ ptg.setFirstColumnRaw(getFirstColumnRaw());
+ ptg.setLastColumnRaw(getLastColumnRaw());
+ ptg.setClass(ptgClass);
+ return ptg;
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java b/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java
index 8c1d079c7..fba7173b7 100644
--- a/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java
+++ b/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java
@@ -62,12 +62,28 @@ public class ExpPtg
{
return SIZE;
}
+
+ public short getRow() {
+ return field_1_first_row;
+ }
+
+ public short getColumn() {
+ return field_2_first_col;
+ }
public String toFormulaString(Workbook book)
{
return "NO IDEA SHARED FORMULA EXP PTG";
}
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer("[Array Formula or Shared Formula]\n");
+ buffer.append("row = ").append(getRow()).append("\n");
+ buffer.append("col = ").append(getColumn()).append("\n");
+ return buffer.toString();
+ }
+
public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
public Object clone() {
diff --git a/src/java/org/apache/poi/hssf/record/formula/Ptg.java b/src/java/org/apache/poi/hssf/record/formula/Ptg.java
index 5574076db..660952c18 100644
--- a/src/java/org/apache/poi/hssf/record/formula/Ptg.java
+++ b/src/java/org/apache/poi/hssf/record/formula/Ptg.java
@@ -112,19 +112,15 @@ public abstract class Ptg
return stack;
}
- private static Ptg createPtg(RecordInputStream in)
+ public static Ptg createPtg(RecordInputStream in)
{
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)
{
@@ -197,12 +193,22 @@ public abstract class Ptg
case AreaPtg.sid :
retval = new AreaPtg(in);
break;
- case valueArea:
- retval = new AreaPtg(in);
+ case AreaAPtg.sid:
+ retval = new AreaAPtg(in);
break;
- case arrayArea:
- retval = new AreaPtg(in);
+ case AreaVPtg.sid:
+ retval = new AreaVPtg(in);
break;
+ case AreaNAPtg.sid :
+ retval = new AreaNAPtg(in);
+ break;
+ case AreaNPtg.sid :
+ retval = new AreaNPtg(in);
+ break;
+ case AreaNVPtg.sid :
+ retval = new AreaNVPtg(in);
+ break;
+
case MemErrPtg.sid : // 0x27 These 3 values
case MemErrPtg.sid+0x20 : // 0x47 documented in
case MemErrPtg.sid+0x40 : // 0x67 openOffice.org doc.
@@ -216,12 +222,21 @@ public abstract class Ptg
case ReferencePtg.sid :
retval = new ReferencePtg(in);
break;
- case valueRef :
- retval = new ReferencePtg(in);
+ case RefAPtg.sid :
+ retval = new RefAPtg(in);
break;
- case arrayRef :
- retval = new ReferencePtg(in);
+ case RefVPtg.sid :
+ retval = new RefVPtg(in);
break;
+ case RefNAPtg.sid :
+ retval = new RefNAPtg(in);
+ break;
+ case RefNPtg.sid :
+ retval = new RefNPtg(in);
+ break;
+ case RefNVPtg.sid :
+ retval = new RefNVPtg(in);
+ break;
case RefErrorPtg.sid:
retval = new RefErrorPtg(in);
break;
diff --git a/src/java/org/apache/poi/hssf/record/formula/RefAPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefAPtg.java
new file mode 100644
index 000000000..865823ac0
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/RefAPtg.java
@@ -0,0 +1,104 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * ValueReferencePtg.java
+ *
+ * Created on November 21, 2001, 5:27 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * RefNAPtg
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class RefAPtg extends ReferencePtg
+{
+ public final static byte sid = 0x64;
+
+ protected RefAPtg() {
+ super();
+ }
+
+ public RefAPtg(short row, short column, boolean isRowRelative, boolean isColumnRelative) {
+ super(row, column, isRowRelative, isColumnRelative);
+ }
+
+ public RefAPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+
+ public String getRefPtgName() {
+ return "RefAPtg";
+ }
+
+ public Object clone() {
+ RefAPtg ptg = new RefAPtg();
+ ptg.setRow(getRow());
+ ptg.setColumnRaw(getColumnRaw());
+ ptg.setClass(ptgClass);
+ return ptg;
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java
new file mode 100644
index 000000000..490a3bff6
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/RefNAPtg.java
@@ -0,0 +1,105 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * ValueReferencePtg.java
+ *
+ * Created on November 21, 2001, 5:27 PM
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * RefNAPtg
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class RefNAPtg extends ReferencePtg
+{
+ public final static byte sid = 0x6C;
+
+ protected RefNAPtg() {
+ //Required for clone methods
+ }
+
+ public RefNAPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public void writeBytes(byte [] array, int offset)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public String getRefPtgName() {
+ return "RefNAPtg";
+ }
+
+ public String toFormulaString(Workbook book)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public Object clone() {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java
new file mode 100644
index 000000000..5e727b699
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java
@@ -0,0 +1,106 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+/*
+ * RefNPtg.java
+ *
+ */
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * RefNPtg
+ * @author Jason Height (jheight at apache dot com)
+ */
+
+public class RefNPtg extends ReferencePtg
+{
+ public final static byte sid = 0x2C;
+
+ protected RefNPtg() {
+ //Required for clone methods
+ }
+
+ /** Creates new ValueReferencePtg */
+
+ public RefNPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public void writeBytes(byte [] array, int offset)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public String getRefPtgName() {
+ return "RefNPtg";
+ }
+
+ public String toFormulaString(Workbook book)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public Object clone() {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/RefNVPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefNVPtg.java
new file mode 100644
index 000000000..e8626a94b
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/RefNVPtg.java
@@ -0,0 +1,102 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * RefNVPtg
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class RefNVPtg extends ReferencePtg
+{
+ public final static byte sid = 0x4C;
+
+ protected RefNVPtg() {
+ //Required for clone methods
+ }
+
+ /** Creates new ValueReferencePtg */
+
+ public RefNVPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public void writeBytes(byte [] array, int offset)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public String getRefPtgName() {
+ return "RefNVPtg";
+ }
+
+ public String toFormulaString(Workbook book)
+ {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+
+ public Object clone() {
+ throw new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/RefVPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefVPtg.java
new file mode 100644
index 000000000..236214c69
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/formula/RefVPtg.java
@@ -0,0 +1,101 @@
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+package org.apache.poi.hssf.record.formula;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.BitField;
+
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.hssf.model.Workbook;
+
+/**
+ * RefVPtg
+ * @author Jason Height (jheight at chariot dot net dot au)
+ */
+
+public class RefVPtg extends ReferencePtg
+{
+ public final static byte sid = 0x44;
+
+ protected RefVPtg() {
+ super();
+ }
+
+ public RefVPtg(short row, short column, boolean isRowRelative, boolean isColumnRelative) {
+ super(row, column, isRowRelative, isColumnRelative);
+ }
+
+
+ /** Creates new ValueReferencePtg */
+
+ public RefVPtg(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ public String getRefPtgName() {
+ return "RefVPtg";
+ }
+
+ public Object clone() {
+ RefVPtg ptg = new RefVPtg();
+ ptg.setRow(getRow());
+ ptg.setColumnRaw(getColumnRaw());
+ ptg.setClass(ptgClass);
+ return ptg;
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java b/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
index 677327750..3344d23eb 100644
--- a/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
+++ b/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
@@ -39,8 +39,9 @@ public class ReferencePtg extends Ptg
private short field_2_col;
private BitField rowRelative = BitFieldFactory.getInstance(0x8000);
private BitField colRelative = BitFieldFactory.getInstance(0x4000);
+ private BitField column = BitFieldFactory.getInstance(0x3FFF);
- private ReferencePtg() {
+ protected ReferencePtg() {
//Required for clone methods
}
@@ -55,6 +56,13 @@ public class ReferencePtg extends Ptg
setColRelative(!c.isColAbsolute());
setRowRelative(!c.isRowAbsolute());
}
+
+ public ReferencePtg(short row, short column, boolean isRowRelative, boolean isColumnRelative) {
+ setRow(row);
+ setColumn(column);
+ setRowRelative(isRowRelative);
+ setColRelative(isColumnRelative);
+ }
/** Creates new ValueReferencePtg */
@@ -62,15 +70,20 @@ public class ReferencePtg extends Ptg
{
field_1_row = in.readShort();
field_2_col = in.readShort();
-
}
+
+ public String getRefPtgName() {
+ return "ReferencePtg";
+ }
public String toString()
{
- StringBuffer buffer = new StringBuffer("[ValueReferencePtg]\n");
+ StringBuffer buffer = new StringBuffer("[");
+ buffer.append(getRefPtgName());
+ buffer.append("]\n");
buffer.append("row = ").append(getRow()).append("\n");
- buffer.append("col = ").append(getColumnRaw()).append("\n");
+ buffer.append("col = ").append(getColumn()).append("\n");
buffer.append("rowrelative = ").append(isRowRelative()).append("\n");
buffer.append("colrelative = ").append(isColRelative()).append("\n");
return buffer.toString();
@@ -123,12 +136,12 @@ public class ReferencePtg extends Ptg
public void setColumn(short col)
{
- field_2_col = col; // fix this
+ field_2_col = column.setShortValue(field_2_col, col);
}
public short getColumn()
{
- return rowRelative.setShortBoolean(colRelative.setShortBoolean(field_2_col,false),false);
+ return column.getShortValue(field_2_col);
}
public int getSize()