Author: amol
Date: Wed Aug  9 13:26:40 2006
New Revision: 430137

URL: http://svn.apache.org/viewvc?rev=430137&view=rev
Log:
In setCellFormula(String) the Ptg stack in FormulaRecord is cleared before 
filling it with new values. Prior to this fix, repeated calls to setCellFormula 
would keep accumulating Ptgs in the stack although only the topmost "size" 
number of Ptgs would ever be used.

Modified:
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java?rev=430137&r1=430136&r2=430137&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java 
(original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java Wed 
Aug  9 13:26:40 2006
@@ -597,8 +597,9 @@
         } else {
             setCellType(CELL_TYPE_FORMULA,false,row,col,styleIndex);
             FormulaRecordAggregate rec = (FormulaRecordAggregate) record;
-            rec.getFormulaRecord().setOptions(( short ) 2);
-            rec.getFormulaRecord().setValue(0);
+            FormulaRecord frec = rec.getFormulaRecord();
+            frec.setOptions(( short ) 2);
+            frec.setValue(0);
             
             //only set to default if there is no extended format index already 
set
             if (rec.getXFIndex() == (short)0) rec.setXFIndex(( short ) 0x0f);
@@ -606,10 +607,16 @@
             fp.parse();
             Ptg[] ptg  = fp.getRPNPtg();
             int   size = 0;
-            //System.out.println("got Ptgs " + ptg.length);
+
+            // clear the Ptg Stack
+            for (int i=0, iSize=frec.getNumberOfExpressionTokens(); i<iSize; 
i++) {
+                frec.popExpressionToken();
+            }
+
+            // fill the Ptg Stack with Ptgs of new formula
             for (int k = 0; k < ptg.length; k++) {
                 size += ptg[ k ].getSize();
-                rec.getFormulaRecord().pushExpressionToken(ptg[ k ]);
+                frec.pushExpressionToken(ptg[ k ]);
             }
             rec.getFormulaRecord().setExpressionLength(( short ) size);
             //Workbook.currentBook = null;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/

Reply via email to