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]>

Reply via email to