From: Amol S. Deshmukh Date: Wed, 22 Nov 2006 23:12:06 +0000 (+0000) Subject: Fixed: X-Git-Tag: REL_3_0_ALPHA3~18 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5d7b255ef5a138fe7bda3a1a75ad7cf818c02c8b;p=poi.git Fixed: 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 --- diff --git a/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java b/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java index bae0ac302c..bad7decd5d 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java +++ b/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java @@ -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); }