Patch from Josh from bug #44508 - Fix formula evaluation with evaluateInCell on boolean formulas
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@633169 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a16fa738f0
commit
c5e82b7bae
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.1-beta1" date="2008-??-??">
|
<release version="3.1-beta1" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44508 - Fix formula evaluation with evaluateInCell on boolean formulas</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44510 - Fix how DVALRecord works with dropdowns</action>
|
<action dev="POI-DEVELOPERS" type="fix">44510 - Fix how DVALRecord works with dropdowns</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44495 - Handle named cell ranges in formulas that have lower case parts</action>
|
<action dev="POI-DEVELOPERS" type="fix">44495 - Handle named cell ranges in formulas that have lower case parts</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
|
<action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.1-beta1" date="2008-??-??">
|
<release version="3.1-beta1" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44508 - Fix formula evaluation with evaluateInCell on boolean formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44510 - Fix how DVALRecord works with dropdowns</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44495 - Handle named cell ranges in formulas that have lower case parts</action>
|
<action dev="POI-DEVELOPERS" type="fix">44495 - Handle named cell ranges in formulas that have lower case parts</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
|
<action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44471 - Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this</action>
|
<action dev="POI-DEVELOPERS" type="fix">44471 - Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this</action>
|
||||||
|
@ -452,7 +452,7 @@ public class HSSFCell
|
|||||||
boolRec.setColumn(col);
|
boolRec.setColumn(col);
|
||||||
if (setValue)
|
if (setValue)
|
||||||
{
|
{
|
||||||
boolRec.setValue(getBooleanCellValue());
|
boolRec.setValue(convertCellValueToBoolean());
|
||||||
}
|
}
|
||||||
boolRec.setXFIndex(styleIndex);
|
boolRec.setXFIndex(styleIndex);
|
||||||
boolRec.setRow(row);
|
boolRec.setRow(row);
|
||||||
@ -825,6 +825,34 @@ public class HSSFCell
|
|||||||
}
|
}
|
||||||
(( BoolErrRecord ) record).setValue(value);
|
(( BoolErrRecord ) record).setValue(value);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Chooses a new boolean value for the cell when its type is changing.<p/>
|
||||||
|
*
|
||||||
|
* Usually the caller is calling setCellType() with the intention of calling
|
||||||
|
* setCellValue(boolean) straight afterwards. This method only exists to give
|
||||||
|
* the cell a somewhat reasonable value until the setCellValue() call (if at all).
|
||||||
|
* TODO - perhaps a method like setCellTypeAndValue(int, Object) should be introduced to avoid this
|
||||||
|
*/
|
||||||
|
private boolean convertCellValueToBoolean() {
|
||||||
|
|
||||||
|
switch (cellType) {
|
||||||
|
case CELL_TYPE_BOOLEAN:
|
||||||
|
return (( BoolErrRecord ) record).getBooleanValue();
|
||||||
|
case CELL_TYPE_STRING:
|
||||||
|
return Boolean.valueOf(((StringRecord)record).getString()).booleanValue();
|
||||||
|
case CELL_TYPE_NUMERIC:
|
||||||
|
return ((NumberRecord)record).getValue() != 0;
|
||||||
|
|
||||||
|
// All other cases convert to false
|
||||||
|
// These choices are not well justified.
|
||||||
|
case CELL_TYPE_FORMULA:
|
||||||
|
// should really evaluate, but HSSFCell can't call HSSFFormulaEvaluator
|
||||||
|
case CELL_TYPE_ERROR:
|
||||||
|
case CELL_TYPE_BLANK:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw new RuntimeException("Unexpected cell type (" + cellType + ")");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the value of the cell as a boolean. For strings, numbers, and errors, we throw an exception.
|
* get the value of the cell as a boolean. For strings, numbers, and errors, we throw an exception.
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package org.apache.poi.hssf.usermodel;
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class TestBug44508 extends TestCase {
|
||||||
|
protected String cwd = System.getProperty("HSSF.testdata.path");
|
||||||
|
|
||||||
|
public void testEvaluateBooleanInCell_bug44508() {
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
HSSFSheet sheet = wb.createSheet();
|
||||||
|
wb.setSheetName(0, "Sheet1");
|
||||||
|
HSSFRow row = sheet.createRow(0);
|
||||||
|
HSSFCell cell = row.createCell((short)0);
|
||||||
|
|
||||||
|
cell.setCellFormula("1=1");
|
||||||
|
|
||||||
|
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(sheet, wb);
|
||||||
|
fe.setCurrentRow(row);
|
||||||
|
try {
|
||||||
|
fe.evaluateInCell(cell);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
fail("Identified bug 44508");
|
||||||
|
}
|
||||||
|
assertEquals(true, cell.getBooleanCellValue());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user