add HSSFCell.setCachedErrorResult(FormulaError)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1748174 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Javen O'Neal 2016-06-13 10:53:03 +00:00
parent ef3564968a
commit e61e346436
3 changed files with 23 additions and 9 deletions

View File

@ -81,14 +81,25 @@ public final class BoolErrRecord extends CellRecord implements Cloneable {
} }
/** /**
* set the error value for the cell * set the error value for the cell. See {@link FormulaError} for valid codes.
* *
* @param value error representing the error value * @param value error representing the error value
* this value can only be 0,7,15,23,29,36 or 42 * this value can only be 0,7,15,23,29,36 or 42
* see bugzilla bug 16560 for an explanation * see bugzilla bug 16560 for an explanation
*/ */
public void setValue(byte value) { public void setValue(byte value) {
switch(FormulaError.forInt(value)) { setValue(FormulaError.forInt(value));
}
/**
* set the error value for the cell
*
* @param value error representing the error value
* this value can only be 0,7,15,23,29,36 or 42
* see bugzilla bug 16560 for an explanation
*/
public void setValue(FormulaError value) {
switch(value) {
case NULL: case NULL:
case DIV0: case DIV0:
case VALUE: case VALUE:
@ -96,11 +107,11 @@ public final class BoolErrRecord extends CellRecord implements Cloneable {
case NAME: case NAME:
case NUM: case NUM:
case NA: case NA:
_value = value; _value = value.getCode();
_isError = true; _isError = true;
return; return;
default: default:
throw new IllegalArgumentException("Error Value can only be 0,7,15,23,29,36 or 42. It cannot be "+value); throw new IllegalArgumentException("Error Value can only be 0,7,15,23,29,36 or 42. It cannot be "+value.getCode()+" ("+value+")");
} }
} }

View File

@ -24,12 +24,13 @@ import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordFormatException; import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.hssf.record.SharedFormulaRecord; import org.apache.poi.hssf.record.SharedFormulaRecord;
import org.apache.poi.hssf.record.StringRecord; import org.apache.poi.hssf.record.StringRecord;
import org.apache.poi.hssf.util.CellRangeAddress8Bit;
import org.apache.poi.ss.formula.ptg.ExpPtg; import org.apache.poi.ss.formula.ptg.ExpPtg;
import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.hssf.util.CellRangeAddress8Bit;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.formula.Formula;
import org.apache.poi.ss.usermodel.FormulaError;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellReference;
/** /**
* The formula record aggregate is used to join together the formula record and it's * The formula record aggregate is used to join together the formula record and it's
@ -180,6 +181,9 @@ public final class FormulaRecordAggregate extends RecordAggregate implements Cel
_stringRecord = null; _stringRecord = null;
_formulaRecord.setCachedResultErrorCode(errorCode); _formulaRecord.setCachedResultErrorCode(errorCode);
} }
public void setCachedErrorResult(FormulaError error) {
setCachedErrorResult(error.getCode());
}
public void setCachedDoubleResult(double value) { public void setCachedDoubleResult(double value) {
_stringRecord = null; _stringRecord = null;
_formulaRecord.setValue(value); _formulaRecord.setValue(value);

View File

@ -791,16 +791,15 @@ public class HSSFCell implements Cell {
int row=_record.getRow(); int row=_record.getRow();
short col=_record.getColumn(); short col=_record.getColumn();
short styleIndex=_record.getXFIndex(); short styleIndex=_record.getXFIndex();
byte code = error.getCode();
switch (_cellType) { switch (_cellType) {
default: default:
setCellType(CELL_TYPE_ERROR, false, row, col, styleIndex); setCellType(CELL_TYPE_ERROR, false, row, col, styleIndex);
// fall through // fall through
case CELL_TYPE_ERROR: case CELL_TYPE_ERROR:
(( BoolErrRecord ) _record).setValue(code); (( BoolErrRecord ) _record).setValue(error);
break; break;
case CELL_TYPE_FORMULA: case CELL_TYPE_FORMULA:
((FormulaRecordAggregate)_record).setCachedErrorResult(code); ((FormulaRecordAggregate)_record).setCachedErrorResult(error.getCode());
break; break;
} }
} }