]> source.dussan.org Git - poi.git/commitdiff
pulled *Cell.setCellValue(double) to the common base
authorVladislav Galas <gallon@apache.org>
Sat, 26 Jan 2019 23:19:53 +0000 (23:19 +0000)
committerVladislav Galas <gallon@apache.org>
Sat, 26 Jan 2019 23:19:53 +0000 (23:19 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1852253 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
src/java/org/apache/poi/ss/usermodel/Cell.java
src/java/org/apache/poi/ss/usermodel/CellBase.java
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java

index b1cf8a4845446174e5166ee160795db91418de98..7abfe59d20c1a5c9497ca68a3a10a1e572e177e1 100644 (file)
@@ -50,7 +50,6 @@ import org.apache.poi.ss.usermodel.Comment;
 import org.apache.poi.ss.usermodel.FormulaError;
 import org.apache.poi.ss.usermodel.Hyperlink;
 import org.apache.poi.ss.usermodel.RichTextString;
-import org.apache.poi.ss.util.CellAddress;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.ss.util.NumberToTextConverter;
@@ -420,41 +419,26 @@ public class HSSFCell extends CellBase {
     }
 
     /**
-     * set a numeric value for the cell
-     *
-     * @param value  the numeric value to set this cell to.  For formulas we'll set the
-     *        precalculated value, for numerics we'll set its value. For other types we
-     *        will change the cell to a numeric cell and set its value.
+     * {@inheritDoc}
      */
-    @SuppressWarnings("fallthrough")
     @Override
-    public void setCellValue(double value) {
-        if(Double.isInfinite(value)) {
-            // Excel does not support positive/negative infinities,
-            // rather, it gives a #DIV/0! error in these cases.
-            setCellErrorValue(FormulaError.DIV0.getCode());
-        } else if (Double.isNaN(value)){
-            // Excel does not support Not-a-Number (NaN),
-            // instead it immediately generates a #NUM! error.
-            setCellErrorValue(FormulaError.NUM.getCode());
-        } else {
-            int row=_record.getRow();
-            short col=_record.getColumn();
-            short styleIndex=_record.getXFIndex();
-
-            switch (_cellType) {
-                default:
-                    setCellType(CellType.NUMERIC, false, row, col, styleIndex);
-                    // fall through
-                case NUMERIC:
-                    (( NumberRecord ) _record).setValue(value);
-                    break;
-                case FORMULA:
-                    ((FormulaRecordAggregate)_record).setCachedDoubleResult(value);
-                    break;
-            }
+    @SuppressWarnings("fallthrough")
+    protected void setCellValueImpl(double value) {
+        switch (_cellType) {
+            default:
+                setCellType(CellType.NUMERIC,
+                        false,
+                        _record.getRow(),
+                        _record.getColumn(),
+                        _record.getXFIndex());
+                // fall through
+            case NUMERIC:
+                ((NumberRecord)_record).setValue(value);
+                break;
+            case FORMULA:
+                ((FormulaRecordAggregate)_record).setCachedDoubleResult(value);
+                break;
         }
-
     }
 
     /**
index 533f21a92f249d1478251a73fa1a83267475a7f5..d806ef6842637a908df8e4917e44a338d2b576a9 100644 (file)
@@ -145,6 +145,7 @@ public interface Cell {
      *     {@link CellType#BOOLEAN}, {@link CellType#ERROR}) depending
      * on the cached value of the formula
      * @since POI 3.15 beta 3
+     * @deprecated will be removed in 4.2
      * Will be renamed to <code>getCachedFormulaResultType()</code> when we make the CellType enum transition in POI 4.0. See bug 59791.
      */
     @Deprecated
@@ -152,9 +153,9 @@ public interface Cell {
     CellType getCachedFormulaResultTypeEnum();
 
     /**
-     * Set a numeric value for the cell
+     * Set a numeric value for the cell.
      *
-     * @param value  the numeric value to set this cell to.  For formulas we'll set the
+     * @param value the numeric value to set this cell to.  For formulas we'll set the
      *        precalculated value, for numerics we'll set its value. For other types we
      *        will change the cell to a numeric cell and set its value.
      */
index 46fa21f3f4bb91836990d61fbf3bff73b0bda85e..107f906668eeb2b50a23d345bd1f28bbe9d3afa7 100644 (file)
@@ -188,4 +188,29 @@ public abstract class CellBase implements Cell {
             tryToDeleteArrayFormula(null);
         }
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public final void setCellValue(double value) {
+        if(Double.isInfinite(value)) {
+            // Excel does not support positive/negative infinities,
+            // rather, it gives a #DIV/0! error in these cases.
+            setCellErrorValue(FormulaError.DIV0.getCode());
+        } else if (Double.isNaN(value)){
+            setCellErrorValue(FormulaError.NUM.getCode());
+        } else {
+            setCellValueImpl(value);
+        }
+    }
+
+    /**
+     * Implementation-specific way to set a numeric value.
+     * <code>value</code> is guaranteed to be a valid (non-NaN) double.
+     * The implementation is expected to adjust the cell type accordingly, so that after this call
+     * getCellType() or getCachedFormulaResultType() would return {@link CellType#NUMERIC}.
+     * @param value the new value to set
+     */
+    protected abstract void setCellValueImpl(double value);
 }
index be01f3ef549101f6da874075dca3189712fb89e8..2b5f4bbf5dd176b504ea546c675615090b183d20 100644 (file)
@@ -36,7 +36,6 @@ import org.apache.poi.ss.usermodel.FormulaError;
 import org.apache.poi.ss.usermodel.Hyperlink;
 import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.util.CellAddress;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.util.*;
@@ -159,27 +158,15 @@ public class SXSSFCell extends CellBase {
     }
 
     /**
-     * Set a numeric value for the cell
-     *
-     * @param value  the numeric value to set this cell to.  For formulas we'll set the
-     *        precalculated value, for numerics we'll set its value. For other types we
-     *        will change the cell to a numeric cell and set its value.
+     * {@inheritDoc}
      */
     @Override
-    public void setCellValue(double value)
-    {
-        if(Double.isInfinite(value)) {
-            // Excel does not support positive/negative infinities,
-            // rather, it gives a #DIV/0! error in these cases.
-            setCellErrorValue(FormulaError.DIV0.getCode());
-        } else if (Double.isNaN(value)){
-            setCellErrorValue(FormulaError.NUM.getCode());
+    public void setCellValueImpl(double value) {
+        ensureTypeOrFormulaType(CellType.NUMERIC);
+        if(_value.getType() == CellType.FORMULA) {
+            ((NumericFormulaValue) _value).setPreEvaluatedValue(value);
         } else {
-            ensureTypeOrFormulaType(CellType.NUMERIC);
-            if(_value.getType()==CellType.FORMULA)
-                ((NumericFormulaValue)_value).setPreEvaluatedValue(value);
-            else
-                ((NumericValue)_value).setValue(value);
+            ((NumericValue)_value).setValue(value);
         }
     }
 
index 42c34da85afa0e3a9fc2e572452347369243d8ba..b16ce37d03d7129bcf69bafcfb85da9e3d21737e 100644 (file)
@@ -311,30 +311,13 @@ public final class XSSFCell extends CellBase {
         }
     }
 
-
     /**
-     * Set a numeric value for the cell
-     *
-     * @param value  the numeric value to set this cell to.  For formulas we'll set the
-     *        precalculated value, for numerics we'll set its value. For other types we
-     *        will change the cell to a numeric cell and set its value.
+     * {@inheritDoc}
      */
     @Override
-    public void setCellValue(double value) {
-        if(Double.isInfinite(value)) {
-            // Excel does not support positive/negative infinities,
-            // rather, it gives a #DIV/0! error in these cases.
-            _cell.setT(STCellType.E);
-            _cell.setV(FormulaError.DIV0.getString());
-        } else if (Double.isNaN(value)){
-            // Excel does not support Not-a-Number (NaN),
-            // instead it immediately generates an #NUM! error.
-            _cell.setT(STCellType.E);
-            _cell.setV(FormulaError.NUM.getString());
-        } else {
-            _cell.setT(STCellType.N);
-            _cell.setV(String.valueOf(value));
-        }
+    public void setCellValueImpl(double value) {
+        _cell.setT(STCellType.N);
+        _cell.setV(String.valueOf(value));
     }
 
     /**