]> source.dussan.org Git - poi.git/commitdiff
Fixed:
authorAmol S. Deshmukh <amol@apache.org>
Wed, 22 Nov 2006 23:12:06 +0000 (23:12 +0000)
committerAmol S. Deshmukh <amol@apache.org>
Wed, 22 Nov 2006 23:12:06 +0000 (23:12 +0000)
1. evaluateInCell failed if the cell originally contained a numeric value
2. Sheet references were not handled correctly

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@478367 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java

index bae0ac302cef1199d7f8ecea13e1142fdde415a0..bad7decd5d69b3f39db2f2055241797cc90d99f2 100644 (file)
@@ -10,6 +10,7 @@ import java.util.Map;
 import java.util.Stack;
 
 import org.apache.poi.hssf.model.FormulaParser;
+import org.apache.poi.hssf.model.Workbook;
 import org.apache.poi.hssf.record.formula.AddPtg;
 import org.apache.poi.hssf.record.formula.Area3DPtg;
 import org.apache.poi.hssf.record.formula.AreaPtg;
@@ -100,11 +101,9 @@ public class HSSFFormulaEvaluator {
     private static final Map OPERATION_EVALS_MAP = new HashMap();
 
     /*
-     * If you dont like this map, join the club :) I did this becoz it was
-     * desired to keep the FormulaEvaluator separate from FormulaParser and
-     * related classes in the CVS-HEAD. So now we need some mapping between the
-     * Ptg tokens that the FormulaParser returns and the *Eval classes taht are
-     * used by the FormulaEvaluator - hence the following :)
+     * Following is the mapping between the Ptg tokens returned 
+     * by the FormulaParser and the *Eval classes that are used 
+     * by the FormulaEvaluator
      */
     static {
         VALUE_EVALS_MAP.put(BoolPtg.class, BoolEval.class);
@@ -214,6 +213,7 @@ public class HSSFFormulaEvaluator {
                     cell.setCellValue(cv.getErrorValue());
                     break;
                 case HSSFCell.CELL_TYPE_NUMERIC:
+                       cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                     cell.setCellValue(cv.getNumberValue());
                     break;
                 case HSSFCell.CELL_TYPE_STRING:
@@ -326,8 +326,9 @@ public class HSSFFormulaEvaluator {
                 Ref3DPtg ptg = (Ref3DPtg) ptgs[i];
                 short colnum = ptg.getColumn();
                 short rownum = ptg.getRow();
-                HSSFSheet xsheet = workbook.getSheetAt(ptg.getExternSheetIndex());
-                HSSFRow row = sheet.getRow(rownum);
+                Workbook wb = workbook.getWorkbook();
+                HSSFSheet xsheet = workbook.getSheetAt(wb.getSheetIndexFromExternSheetIndex(ptg.getExternSheetIndex()));
+                HSSFRow row = xsheet.getRow(rownum);
                 HSSFCell cell = (row != null) ? row.getCell(colnum) : null;
                 pushRef3DEval(ptg, stack, cell, row, xsheet, workbook);
             }