diff --git a/src/java/org/apache/poi/hssf/record/RecordInputStream.java b/src/java/org/apache/poi/hssf/record/RecordInputStream.java index 6a49ad283..8309f8843 100644 --- a/src/java/org/apache/poi/hssf/record/RecordInputStream.java +++ b/src/java/org/apache/poi/hssf/record/RecordInputStream.java @@ -273,7 +273,10 @@ public final class RecordInputStream implements LittleEndianInput { long valueLongBits = readLong(); double result = Double.longBitsToDouble(valueLongBits); if (Double.isNaN(result)) { - throw new RuntimeException("Did not expect to read NaN"); // (Because Excel typically doesn't write NaN + // YK: Excel doesn't write NaN but instead converts the cell type into CELL_TYPE_ERROR. + // HSSF prior to version 3.7 had a bug: it could write Double.NaN but could not read such a file back. + // This behavior was fixed in POI-3.7. + //throw new RuntimeException("Did not expect to read NaN"); // (Because Excel typically doesn't write NaN } return result; } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java index 76f53c9c3..a943f3aef 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java @@ -321,5 +321,10 @@ public final class TestHSSFCell extends BaseTestCell { } } - + /** + * HSSF prior to version 3.7 had a bug: it could write a NaN but could not read such a file back. + */ + public void testReadNaN() { + HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("49761.xls"); + } } diff --git a/test-data/spreadsheet/49761.xls b/test-data/spreadsheet/49761.xls new file mode 100644 index 000000000..948a0d117 Binary files /dev/null and b/test-data/spreadsheet/49761.xls differ