avik 02/05/06 11:23:24
Modified: src/java/org/apache/poi/hssf/record/formula Ptg.java
ReferencePtg.java
src/testcases/org/apache/poi/hssf/usermodel
TestFormulas.java
Log:
committing patches supplied by Matthew McClain for bug 8757. This will handle most
cases, since majority formulas expect value class params. Ptgs to be refactored for
full functionality
Revision Changes Path
1.15 +11 -8 jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java
Index: Ptg.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Ptg.java 30 Apr 2002 23:22:27 -0000 1.14
+++ Ptg.java 6 May 2002 18:23:24 -0000 1.15
@@ -155,20 +155,23 @@
}
return result;
}*/
-
+
public static Ptg createPtg(byte [] data, int offset)
{
byte id = data[ offset + 0 ];
Ptg retval = null;
- final int valueRef = ReferencePtg.sid + 0x20; //note this only matters for
READ
- final int arrayRef = ReferencePtg.sid + 0x40; // excel doesn't really care
which one you
- // write.
+ final int refRef = ReferencePtg.sid - 0x20;
+ final int arrayRef = ReferencePtg.sid + 0x20;
+
+
+ final int valueFunc = FunctionPtg.sid + 0x20;
+ final int arrayFunc = FunctionPtg.sid + 0x40;
+
- final int valueFunc = FunctionPtg.sid + 0x20; //note this only matters for
READ
- final int arrayFunc = FunctionPtg.sid + 0x40; // excel doesn't really care
which one you
- // write.
+ final int refArea = AreaPtg.sid-0x20;
+ final int arrayArea = AreaPtg.sid+0x20;
switch (id)
@@ -219,7 +222,7 @@
retval = new ReferencePtg(data, offset);
break;
- case valueRef :
+ case refRef :
retval = new ReferencePtg(data, offset);
break;
1.4 +2 -1
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
Index: ReferencePtg.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ReferencePtg.java 4 May 2002 15:45:05 -0000 1.3
+++ ReferencePtg.java 6 May 2002 18:23:24 -0000 1.4
@@ -76,7 +76,8 @@
public class ReferencePtg extends Ptg
{
private final static int SIZE = 5;
- public final static byte sid = 0x24;
+ //public final static byte sid = 0x24;
+ public final static byte sid = 0x44;
private short field_1_row;
private short field_2_col;
private BitField rowRelative = new BitField(0x8000);
1.16 +33 -3
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java
Index: TestFormulas.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- TestFormulas.java 5 May 2002 16:55:41 -0000 1.15
+++ TestFormulas.java 6 May 2002 18:23:24 -0000 1.16
@@ -723,9 +723,9 @@
c.setCellFormula("A$3+A$2");
c=r.createCell( (short) 3);
c.setCellFormula("$A$3+$A$2");
- c=r.createCell( (short) 4);
+ c=r.createCell( (short) 4);
c.setCellFormula("SUM($A$3,$A$2)");
-
+
wb.write(out);
out.close();
assertTrue("file exists",file.exists());
@@ -742,9 +742,39 @@
assertTrue("A$3+A$2", ("A$3+A$2").equals(c.getCellFormula()));
c = r.getCell((short)3);
assertTrue("$A$3+$A$2", ("$A$3+$A$2").equals(c.getCellFormula()));
- c = r.getCell((short)4);
+ c = r.getCell((short)4);
assertTrue("SUM($A$3,$A$2)",
("SUM($A$3,$A$2)").equals(c.getCellFormula()));
in.close();
+ }
+
+ public void testRVAoperands() throws Exception {
+ File file = File.createTempFile("testFormulaRVA",".xls");
+ FileOutputStream out = new FileOutputStream(file);
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet();
+ HSSFRow r = null;
+ HSSFCell c = null;
+
+
+ r = s.createRow((short) 0);
+
+ c = r.createCell((short) 0);
+ c.setCellFormula("A3+A2");
+ c=r.createCell( (short) 1);
+ c.setCellFormula("AVERAGE(A3,A2)");
+ c=r.createCell( (short) 2);
+ c.setCellFormula("ROW(A3)");
+ c=r.createCell( (short) 3);
+ c.setCellFormula("AVERAGE(A2:A3)");
+ c=r.createCell( (short) 4);
+ c.setCellFormula("POWER(A2,A3)");
+
+ r = s.createRow((short) 1);c=r.createCell( (short) 0);
c.setCellValue(2.0);
+ r = s.createRow((short) 2);c=r.createCell( (short) 0);
c.setCellValue(3.0);
+
+ wb.write(out);
+ out.close();
+ assertTrue("file exists",file.exists());
}
public static void main(String [] args) {
System.out
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>