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;
}
/**
- * 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;
}
-
}
/**
* {@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
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.
*/
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);
}
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.*;
}
/**
- * 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);
}
}
}
}
-
/**
- * 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));
}
/**