[bug-65939] add partial fix for clearing formula with circular ref

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898680 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2022-03-07 13:11:23 +00:00
parent 3317b6393f
commit 3a496fded8
2 changed files with 8 additions and 4 deletions

View File

@ -604,7 +604,11 @@ public class HSSFCell extends CellBase {
case ERROR:
byte errorValue = (byte) ((FormulaRecordAggregate)_record).getFormulaRecord().getCachedErrorValue();
_record = new BoolErrRecord();
((BoolErrRecord)_record).setValue(errorValue);
try {
((BoolErrRecord)_record).setValue(errorValue);
} catch (IllegalArgumentException ise) {
((BoolErrRecord)_record).setValue((byte) ErrorEval.REF_INVALID.getErrorCode());
}
_cellType = CellType.ERROR;
break;
default:

View File

@ -25,7 +25,6 @@ import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.io.IOException;
@ -34,7 +33,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
class TestFormulaEval {
@Disabled("https://bz.apache.org/bugzilla/show_bug.cgi?id=65939")
@Test
void testCircularRef() throws IOException {
try (HSSFWorkbook wb = new HSSFWorkbook()) {
@ -46,8 +44,10 @@ class TestFormulaEval {
// the following assert should probably be NUMERIC not ERROR (from testing in Excel itself)
assertEquals(CellType.ERROR, formulaEvaluator.evaluateFormulaCell(cell));
cell.setCellFormula(null); //this line fails
cell.setCellFormula(null);
formulaEvaluator.notifyUpdateCell(cell);
//the following assert should probably be BLANK not ERROR
assertEquals(CellType.ERROR, cell.getCellType());
}
}
}