62815 -- some numeric values not correctly extracted from xlsb
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1843553 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ead92fbe9a
commit
fcbed10cfc
@ -302,9 +302,8 @@ public class XSSFBSheetHandler extends XSSFBParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private double rkNumber(byte[] data, int offset) {
|
private double rkNumber(byte[] data, int offset) {
|
||||||
//see 2.5.122 for this abomination
|
//see 2.5.122
|
||||||
byte b0 = data[offset];
|
byte b0 = data[offset];
|
||||||
String s = Integer.toString(b0, 2);
|
|
||||||
boolean numDivBy100 = ((b0 & 1) == 1); // else as is
|
boolean numDivBy100 = ((b0 & 1) == 1); // else as is
|
||||||
boolean floatingPoint = ((b0 >> 1 & 1) == 0); // else signed integer
|
boolean floatingPoint = ((b0 >> 1 & 1) == 0); // else signed integer
|
||||||
|
|
||||||
@ -320,7 +319,8 @@ public class XSSFBSheetHandler extends XSSFBParser {
|
|||||||
if (floatingPoint) {
|
if (floatingPoint) {
|
||||||
d = LittleEndian.getDouble(rkBuffer);
|
d = LittleEndian.getDouble(rkBuffer);
|
||||||
} else {
|
} else {
|
||||||
d = LittleEndian.getInt(rkBuffer);
|
int rawInt = LittleEndian.getInt(rkBuffer, 4);
|
||||||
|
d = rawInt >> 2;//divide by 4/shift bits coz 30 bit int, not 32
|
||||||
}
|
}
|
||||||
d = (numDivBy100) ? d/100 : d;
|
d = (numDivBy100) ? d/100 : d;
|
||||||
return d;
|
return d;
|
||||||
|
@ -26,6 +26,10 @@ import static org.junit.Assert.assertTrue;
|
|||||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link XSSFBEventBasedExcelExtractor}
|
* Tests for {@link XSSFBEventBasedExcelExtractor}
|
||||||
*/
|
*/
|
||||||
@ -110,4 +114,23 @@ public class TestXSSFBEventBasedExcelExtractor {
|
|||||||
"This is an example spreadsheet created with Microsoft Excel 2007 Beta 2.");
|
"This is an example spreadsheet created with Microsoft Excel 2007 Beta 2.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test62815() throws Exception {
|
||||||
|
//test file based on http://oss.sheetjs.com/test_files/RkNumber.xlsb
|
||||||
|
XSSFEventBasedExcelExtractor extractor = getExtractor("62815.xlsb");
|
||||||
|
extractor.setIncludeCellComments(true);
|
||||||
|
String[] rows = extractor.getText().split("[\r\n]+");
|
||||||
|
assertEquals(283, rows.length);
|
||||||
|
BufferedReader reader = Files.newBufferedReader(XSSFTestDataSamples.getSampleFile("62815.xlsb.txt").toPath(),
|
||||||
|
StandardCharsets.UTF_8);
|
||||||
|
String line = reader.readLine();
|
||||||
|
for (int i = 0; i < rows.length; i++) {
|
||||||
|
assertEquals(line, rows[i]);
|
||||||
|
line = reader.readLine();
|
||||||
|
while (line != null && line.startsWith("#")) {
|
||||||
|
line = reader.readLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
BIN
test-data/spreadsheet/62815.xlsb
Normal file
BIN
test-data/spreadsheet/62815.xlsb
Normal file
Binary file not shown.
284
test-data/spreadsheet/62815.xlsb.txt
Normal file
284
test-data/spreadsheet/62815.xlsb.txt
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
RkNumber
|
||||||
|
10000000
|
||||||
|
1200455
|
||||||
|
0.01
|
||||||
|
12004.55
|
||||||
|
-10000000
|
||||||
|
-1200455
|
||||||
|
-0.01
|
||||||
|
-12004.55
|
||||||
|
10268609
|
||||||
|
1071427521
|
||||||
|
-1071427521
|
||||||
|
273214017855
|
||||||
|
69942788570880
|
||||||
|
17905353874145300
|
||||||
|
17835411085574400
|
||||||
|
273214017855
|
||||||
|
273214017856
|
||||||
|
273214017857
|
||||||
|
273214017858
|
||||||
|
273214017859
|
||||||
|
273214017860
|
||||||
|
273214017861
|
||||||
|
273214017862
|
||||||
|
273214017863
|
||||||
|
273214017864
|
||||||
|
273214017865
|
||||||
|
273214017866
|
||||||
|
273214017867
|
||||||
|
273214017868
|
||||||
|
273214017869
|
||||||
|
273214017870
|
||||||
|
273214017871
|
||||||
|
273214017872
|
||||||
|
273214017873
|
||||||
|
273214017874
|
||||||
|
273214017875
|
||||||
|
273214017876
|
||||||
|
273214017877
|
||||||
|
273214017878
|
||||||
|
273214017879
|
||||||
|
273214017880
|
||||||
|
273214017881
|
||||||
|
273214017882
|
||||||
|
273214017883
|
||||||
|
273214017884
|
||||||
|
273214017885
|
||||||
|
273214017886
|
||||||
|
273214017887
|
||||||
|
273214017888
|
||||||
|
273214017889
|
||||||
|
273214017890
|
||||||
|
273214017891
|
||||||
|
273214017892
|
||||||
|
273214017893
|
||||||
|
273214017894
|
||||||
|
273214017895
|
||||||
|
273214017896
|
||||||
|
273214017897
|
||||||
|
273214017898
|
||||||
|
273214017899
|
||||||
|
273214017900
|
||||||
|
273214017901
|
||||||
|
273214017902
|
||||||
|
273214017903
|
||||||
|
273214017904
|
||||||
|
273214017905
|
||||||
|
273214017906
|
||||||
|
273214017907
|
||||||
|
273214017908
|
||||||
|
273214017909
|
||||||
|
273214017910
|
||||||
|
273214017911
|
||||||
|
273214017912
|
||||||
|
273214017913
|
||||||
|
273214017914
|
||||||
|
273214017915
|
||||||
|
273214017916
|
||||||
|
273214017917
|
||||||
|
273214017918
|
||||||
|
273214017919
|
||||||
|
273214017920
|
||||||
|
273214017921
|
||||||
|
273214017922
|
||||||
|
273214017923
|
||||||
|
273214017924
|
||||||
|
273214017925
|
||||||
|
273214017926
|
||||||
|
273214017927
|
||||||
|
273214017928
|
||||||
|
273214017929
|
||||||
|
273214017930
|
||||||
|
273214017931
|
||||||
|
273214017932
|
||||||
|
273214017933
|
||||||
|
273214017934
|
||||||
|
273214017935
|
||||||
|
273214017936
|
||||||
|
273214017937
|
||||||
|
273214017938
|
||||||
|
273214017939
|
||||||
|
273214017940
|
||||||
|
273214017941
|
||||||
|
273214017942
|
||||||
|
273214017943
|
||||||
|
273214017944
|
||||||
|
273214017945
|
||||||
|
273214017946
|
||||||
|
273214017947
|
||||||
|
273214017948
|
||||||
|
273214017949
|
||||||
|
273214017950
|
||||||
|
273214017951
|
||||||
|
273214017952
|
||||||
|
273214017953
|
||||||
|
273214017954
|
||||||
|
273214017955
|
||||||
|
273214017956
|
||||||
|
273214017957
|
||||||
|
273214017958
|
||||||
|
273214017959
|
||||||
|
273214017960
|
||||||
|
273214017961
|
||||||
|
273214017962
|
||||||
|
273214017963
|
||||||
|
273214017964
|
||||||
|
273214017965
|
||||||
|
273214017966
|
||||||
|
273214017967
|
||||||
|
273214017968
|
||||||
|
273214017969
|
||||||
|
273214017970
|
||||||
|
273214017971
|
||||||
|
273214017972
|
||||||
|
273214017973
|
||||||
|
273214017974
|
||||||
|
273214017975
|
||||||
|
273214017976
|
||||||
|
273214017977
|
||||||
|
273214017978
|
||||||
|
273214017979
|
||||||
|
273214017980
|
||||||
|
273214017981
|
||||||
|
273214017982
|
||||||
|
273214017983
|
||||||
|
273214017984
|
||||||
|
273214017985
|
||||||
|
273214017986
|
||||||
|
273214017987
|
||||||
|
273214017988
|
||||||
|
273214017989
|
||||||
|
273214017990
|
||||||
|
273214017991
|
||||||
|
273214017992
|
||||||
|
273214017993
|
||||||
|
273214017994
|
||||||
|
273214017995
|
||||||
|
273214017996
|
||||||
|
273214017997
|
||||||
|
273214017998
|
||||||
|
273214017999
|
||||||
|
273214018000
|
||||||
|
273214018001
|
||||||
|
273214018002
|
||||||
|
273214018003
|
||||||
|
273214018004
|
||||||
|
273214018005
|
||||||
|
273214018006
|
||||||
|
273214018007
|
||||||
|
273214018008
|
||||||
|
273214018009
|
||||||
|
273214018010
|
||||||
|
273214018011
|
||||||
|
273214018012
|
||||||
|
273214018013
|
||||||
|
273214018014
|
||||||
|
273214018015
|
||||||
|
273214018016
|
||||||
|
273214018017
|
||||||
|
273214018018
|
||||||
|
273214018019
|
||||||
|
273214018020
|
||||||
|
273214018021
|
||||||
|
273214018022
|
||||||
|
273214018023
|
||||||
|
273214018024
|
||||||
|
273214018025
|
||||||
|
273214018026
|
||||||
|
273214018027
|
||||||
|
273214018028
|
||||||
|
273214018029
|
||||||
|
273214018030
|
||||||
|
273214018031
|
||||||
|
273214018032
|
||||||
|
273214018033
|
||||||
|
273214018034
|
||||||
|
273214018035
|
||||||
|
273214018036
|
||||||
|
273214018037
|
||||||
|
273214018038
|
||||||
|
273214018039
|
||||||
|
273214018040
|
||||||
|
273214018041
|
||||||
|
273214018042
|
||||||
|
273214018043
|
||||||
|
273214018044
|
||||||
|
273214018045
|
||||||
|
273214018046
|
||||||
|
273214018047
|
||||||
|
273214018048
|
||||||
|
273214018049
|
||||||
|
273214018050
|
||||||
|
273214018051
|
||||||
|
273214018052
|
||||||
|
273214018053
|
||||||
|
273214018054
|
||||||
|
273214018055
|
||||||
|
273214018056
|
||||||
|
273214018057
|
||||||
|
273214018058
|
||||||
|
273214018059
|
||||||
|
273214018060
|
||||||
|
273214018061
|
||||||
|
273214018062
|
||||||
|
273214018063
|
||||||
|
273214018064
|
||||||
|
273214018065
|
||||||
|
273214018066
|
||||||
|
273214018067
|
||||||
|
273214018068
|
||||||
|
273214018069
|
||||||
|
273214018070
|
||||||
|
273214018071
|
||||||
|
273214018072
|
||||||
|
273214018073
|
||||||
|
273214018074
|
||||||
|
273214018075
|
||||||
|
273214018076
|
||||||
|
273214018077
|
||||||
|
273214018078
|
||||||
|
273214018079
|
||||||
|
273214018080
|
||||||
|
273214018081
|
||||||
|
273214018082
|
||||||
|
273214018083
|
||||||
|
273214018084
|
||||||
|
273214018085
|
||||||
|
273214018086
|
||||||
|
273214018087
|
||||||
|
273214018088
|
||||||
|
273214018089
|
||||||
|
273214018090
|
||||||
|
273214018091
|
||||||
|
273214018092
|
||||||
|
273214018093
|
||||||
|
273214018094
|
||||||
|
273214018095
|
||||||
|
273214018096
|
||||||
|
273214018097
|
||||||
|
273214018098
|
||||||
|
273214018099
|
||||||
|
273214018100
|
||||||
|
273214018101
|
||||||
|
273214018102
|
||||||
|
273214018103
|
||||||
|
273214018104
|
||||||
|
273214018105
|
||||||
|
273214018106
|
||||||
|
273214018107
|
||||||
|
273214018108
|
||||||
|
273214018109
|
||||||
|
273214018110
|
||||||
|
273214018111
|
||||||
|
273214018112
|
||||||
|
273214018113
|
||||||
|
273214018114
|
||||||
|
273214018115
|
||||||
|
910713.3937166670
|
||||||
|
3.03571131238889
|
||||||
|
0.000010119037707963000
|
||||||
|
3.37E-11
|
||||||
|
1.12E-16
|
||||||
|
#excel doesn't display ...863, this was manually altered to get the test to work
|
||||||
|
3.7477917436899863E-22
|
Loading…
Reference in New Issue
Block a user