diff --git a/components/fpspreadsheet/tests/datetests.pas b/components/fpspreadsheet/tests/datetests.pas
index 0f59628af..995f8ee6d 100644
--- a/components/fpspreadsheet/tests/datetests.pas
+++ b/components/fpspreadsheet/tests/datetests.pas
@@ -197,6 +197,85 @@ type
procedure TestReadODFDate1899_35;
procedure TestReadODFDate1899_36;
procedure TestReadODFDate1899_37;
+
+ procedure TestReadOOXMLDate1904_0; // same as above except Excel xlsx format
+ procedure TestReadOOXMLDate1904_1; //date and time
+ procedure TestReadOOXMLDate1904_2;
+ procedure TestReadOOXMLDate1904_3;
+ procedure TestReadOOXMLDate1904_4; //time only tests start here
+ procedure TestReadOOXMLDate1904_5;
+ procedure TestReadOOXMLDate1904_6;
+ procedure TestReadOOXMLDate1904_7;
+ procedure TestReadOOXMLDate1904_8;
+ procedure TestReadOOXMLDate1904_9;
+ procedure TestReadOOXMLDate1904_10;
+ procedure TestReadOOXMLDate1904_11;
+ procedure TestReadOOXMLDate1904_12;
+ procedure TestReadOOXMLDate1904_13;
+ procedure TestReadOOXMLDate1904_14;
+ procedure TestReadOOXMLDate1904_15;
+ procedure TestReadOOXMLDate1904_16;
+ procedure TestReadOOXMLDate1904_17;
+ procedure TestReadOOXMLDate1904_18;
+ procedure TestReadOOXMLDate1904_19;
+ procedure TestReadOOXMLDate1904_20;
+ procedure TestReadOOXMLDate1904_21;
+ procedure TestReadOOXMLDate1904_22;
+ procedure TestReadOOXMLDate1904_23;
+ procedure TestReadOOXMLDate1904_24;
+ procedure TestReadOOXMLDate1904_25;
+ procedure TestReadOOXMLDate1904_26;
+ procedure TestReadOOXMLDate1904_27;
+ procedure TestReadOOXMLDate1904_28;
+ procedure TestReadOOXMLDate1904_29;
+ procedure TestReadOOXMLDate1904_30;
+ procedure TestReadOOXMLDate1904_31;
+ procedure TestReadOOXMLDate1904_32;
+ procedure TestReadOOXMLDate1904_33;
+ procedure TestReadOOXMLDate1904_34;
+ procedure TestReadOOXMLDate1904_35;
+ procedure TestReadOOXMLDate1904_36;
+ procedure TestReadOOXMLDate1904_37;
+
+ procedure TestReadOOXMLDate1899_0; //same as above except with the 1899/1900 date system set
+ procedure TestReadOOXMLDate1899_1;
+ procedure TestReadOOXMLDate1899_2;
+ procedure TestReadOOXMLDate1899_3;
+ procedure TestReadOOXMLDate1899_4;
+ procedure TestReadOOXMLDate1899_5;
+ procedure TestReadOOXMLDate1899_6;
+ procedure TestReadOOXMLDate1899_7;
+ procedure TestReadOOXMLDate1899_8;
+ procedure TestReadOOXMLDate1899_9;
+ procedure TestReadOOXMLDate1899_10;
+ procedure TestReadOOXMLDate1899_11;
+ procedure TestReadOOXMLDate1899_12;
+ procedure TestReadOOXMLDate1899_13;
+ procedure TestReadOOXMLDate1899_14;
+ procedure TestReadOOXMLDate1899_15;
+ procedure TestReadOOXMLDate1899_16;
+ procedure TestReadOOXMLDate1899_17;
+ procedure TestReadOOXMLDate1899_18;
+ procedure TestReadOOXMLDate1899_19;
+ procedure TestReadOOXMLDate1899_20;
+ procedure TestReadOOXMLDate1899_21;
+ procedure TestReadOOXMLDate1899_22;
+ procedure TestReadOOXMLDate1899_23;
+ procedure TestReadOOXMLDate1899_24;
+ procedure TestReadOOXMLDate1899_25;
+ procedure TestReadOOXMLDate1899_26;
+ procedure TestReadOOXMLDate1899_27;
+ procedure TestReadOOXMLDate1899_28;
+ procedure TestReadOOXMLDate1899_29;
+ procedure TestReadOOXMLDate1899_30;
+ procedure TestReadOOXMLDate1899_31;
+ procedure TestReadOOXMLDate1899_32;
+ procedure TestReadOOXMLDate1899_33;
+ procedure TestReadOOXMLDate1899_34;
+ procedure TestReadOOXMLDate1899_35;
+ procedure TestReadOOXMLDate1899_36;
+ procedure TestReadOOXMLDate1899_37;
+
end;
{ TSpreadWriteReadDateTests }
@@ -1208,6 +1287,392 @@ begin
end;
+{ Excel xlsx 1904 datemode tests }
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_0;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,0);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_1;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,1);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_2;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,2);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_3;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,3);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_4;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,4);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_5;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,5);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_6;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,6);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_7;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,7);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_8;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,8);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_9;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,9);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_10;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,10);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_11;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,11);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_12;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,12);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_13;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,13);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_14;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,14);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_15;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,15);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_16;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,16);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_17;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,17);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_18;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,18);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_19;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,19);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_20;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,20);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_21;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,21);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_22;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,22);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_23;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,23);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_24;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,24);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_25;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,25);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_26;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,26);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_27;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,27);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_28;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,28);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_29;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,29);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_30;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,30);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_31;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,31);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_32;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,32);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_33;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,33);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_34;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,34);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_35;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,35);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_36;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,36);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1904_37;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1904,37);
+end;
+
+
+{ ODS 1899 datemode tests }
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_0;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,0);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_1;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,1);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_2;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,2);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_3;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,3);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_4;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,4);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_5;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,5);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_6;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,6);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_7;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,7);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_8;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,8);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_9;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,9);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_10;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,10);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_11;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,11);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_12;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,12);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_13;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,13);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_14;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,14);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_15;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,15);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_16;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,16);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_17;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,17);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_18;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,18);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_19;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,19);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_20;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,20);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_21;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,21);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_22;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,22);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_23;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,23);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_24;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,24);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_25;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,25);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_26;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,26);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_27;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,27);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_28;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,28);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_29;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,29);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_30;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,30);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_31;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,31);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_32;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,32);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_33;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,33);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_34;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,34);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_35;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,35);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_36;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,36);
+end;
+
+procedure TSpreadReadDateTests.TestReadOOXMLDate1899_37;
+begin
+ TestReadDate(ExtractFilePath(ParamStr(0)) + TestFileOOXML_1899,37);
+end;
+
+
initialization
// Register so these tests are included in a full run
RegisterTest(TSpreadReadDateTests);
diff --git a/components/fpspreadsheet/tests/numberstests.pas b/components/fpspreadsheet/tests/numberstests.pas
index 136d6433b..0166a7665 100644
--- a/components/fpspreadsheet/tests/numberstests.pas
+++ b/components/fpspreadsheet/tests/numberstests.pas
@@ -41,7 +41,7 @@ type
published
// Reads numbers values from spreadsheet and checks against list
// One cell per test so some tests can fail and those further below may still work
- procedure TestReadNumber0; //number tests
+ procedure TestReadNumber0; //number tests for biff8 file format
procedure TestReadNumber1; //number and time
procedure TestReadNumber2;
procedure TestReadNumber3;
@@ -64,6 +64,7 @@ type
procedure TestReadNumber20;
procedure TestReadNumber21;
procedure TestReadNumber22;
+
procedure TestReadODFNumber0; //number tests using ODF/LibreOffice file format
procedure TestReadODFNumber1; //number and time
procedure TestReadODFNumber2;
@@ -87,6 +88,30 @@ type
procedure TestReadODFNumber20;
procedure TestReadODFNumber21;
procedure TestReadODFNumber22;
+
+ procedure TestReadOOXMLNumber0; //number tests using ODF/LibreOffice file format
+ procedure TestReadOOXMLNumber1; //number and time
+ procedure TestReadOOXMLNumber2;
+ procedure TestReadOOXMLNumber3;
+ procedure TestReadOOXMLNumber4; //time only tests start here
+ procedure TestReadOOXMLNumber5;
+ procedure TestReadOOXMLNumber6;
+ procedure TestReadOOXMLNumber7;
+ procedure TestReadOOXMLNumber8;
+ procedure TestReadOOXMLNumber9;
+ procedure TestReadOOXMLNumber10;
+ procedure TestReadOOXMLNumber11;
+ procedure TestReadOOXMLNumber12;
+ procedure TestReadOOXMLNumber13;
+ procedure TestReadOOXMLNumber14;
+ procedure TestReadOOXMLNumber15;
+ procedure TestReadOOXMLNumber16;
+ procedure TestReadOOXMLNumber17;
+ procedure TestReadOOXMLNumber18;
+ procedure TestReadOOXMLNumber19;
+ procedure TestReadOOXMLNumber20;
+ procedure TestReadOOXMLNumber21;
+ procedure TestReadOOXMLNumber22;
end;
{ TSpreadWriteReadNumberTests }
@@ -513,6 +538,123 @@ begin
end;
+{ OOXML Tests }
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber0;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,0);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber1;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,1);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber2;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,2);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber3;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,3);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber4;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,4);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber5;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,5);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber6;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,6);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber7;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,7);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber8;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,8);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber9;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,9);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber10;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,10);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber11;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,11);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber12;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,12);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber13;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,13);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber14;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,14);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber15;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,15);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber16;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,16);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber17;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,17);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber18;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,18);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber19;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,19);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber20;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,20);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber21;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,21);
+end;
+
+procedure TSpreadReadNumberTests.TestReadOOXMLNumber22;
+begin
+ TestReadNumber(ExtractFilePath(ParamStr(0)) + TestFileOOXML,22);
+end;
+
+
initialization
// Register so these tests are included in a full run
RegisterTest(TSpreadReadNumberTests);
diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi
index e985a9241..d798ee65c 100644
--- a/components/fpspreadsheet/tests/spreadtestgui.lpi
+++ b/components/fpspreadsheet/tests/spreadtestgui.lpi
@@ -48,7 +48,6 @@
-
@@ -62,10 +61,12 @@
+
+
@@ -80,12 +81,10 @@
-
-
@@ -98,14 +97,17 @@
+
+
+
diff --git a/components/fpspreadsheet/tests/stringtests.pas b/components/fpspreadsheet/tests/stringtests.pas
index f9e46a003..29920dd7e 100644
--- a/components/fpspreadsheet/tests/stringtests.pas
+++ b/components/fpspreadsheet/tests/stringtests.pas
@@ -49,7 +49,7 @@ type
published
// Reads string values from spreadsheet and checks against list
// One cell per test so some tests can fail and those further below may still work
- procedure TestReadString0; //empty string
+ procedure TestReadString0; //biff8 empty string
procedure TestReadString1;
procedure TestReadString2;
procedure TestReadString3;
@@ -63,6 +63,7 @@ type
procedure TestReadString11;
procedure TestReadString12;
procedure TestReadString13;
+
procedure TestReadODFString0; //OpenDocument/LibreOffice format empty string
procedure TestReadODFString1;
procedure TestReadODFString2;
@@ -77,6 +78,22 @@ type
procedure TestReadODFString11;
procedure TestReadODFString12;
procedure TestReadODFString13;
+
+ procedure TestReadOOXMLString0; //Excel xlsx format empty string
+ procedure TestReadOOXMLString1;
+ procedure TestReadOOXMLString2;
+ procedure TestReadOOXMLString3;
+ procedure TestReadOOXMLString4;
+ procedure TestReadOOXMLString5;
+ procedure TestReadOOXMLString6;
+ procedure TestReadOOXMLString7;
+ procedure TestReadOOXMLString8;
+ procedure TestReadOOXMLString9;
+ procedure TestReadOOXMLString10;
+ procedure TestReadOOXMLString11;
+ procedure TestReadOOXMLString12;
+ procedure TestReadOOXMLString13;
+
end;
{ TSpreadWriteReadStringTests }
@@ -412,6 +429,7 @@ begin
TestReadString(ExtractFilePath(ParamStr(0)) + TestFileBIFF8,13);
end;
+{ ODF Tests }
procedure TSpreadReadStringTests.TestReadODFString0;
begin
TestReadString(ExtractFilePath(ParamStr(0)) + TestFileODF,0);
@@ -482,6 +500,77 @@ begin
TestReadString(ExtractFilePath(ParamStr(0)) + TestFileODF,13);
end;
+{ ODF Tests }
+procedure TSpreadReadStringTests.TestReadOOXMLString0;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,0);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString1;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,1);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString2;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,2);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString3;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,3);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString4;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,4);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString5;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,5);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString6;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,6);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString7;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,7);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString8;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,8);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString9;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,9);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString10;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,10);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString11;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,11);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString12;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,12);
+end;
+
+procedure TSpreadReadStringTests.TestReadOOXMLString13;
+begin
+ TestReadString(ExtractFilePath(ParamStr(0)) + TestFileOOXML,13);
+end;
+
initialization
// Register so these tests are included in a full run
diff --git a/components/fpspreadsheet/tests/testooxml_1899.xlsx b/components/fpspreadsheet/tests/testooxml_1899.xlsx
new file mode 100644
index 000000000..6d3b1fa7c
Binary files /dev/null and b/components/fpspreadsheet/tests/testooxml_1899.xlsx differ
diff --git a/components/fpspreadsheet/tests/testooxml_1904.xlsx b/components/fpspreadsheet/tests/testooxml_1904.xlsx
new file mode 100644
index 000000000..e2d970e1e
Binary files /dev/null and b/components/fpspreadsheet/tests/testooxml_1904.xlsx differ
diff --git a/components/fpspreadsheet/tests/testsutility.pas b/components/fpspreadsheet/tests/testsutility.pas
index 36aa9736d..947a519eb 100644
--- a/components/fpspreadsheet/tests/testsutility.pas
+++ b/components/fpspreadsheet/tests/testsutility.pas
@@ -17,6 +17,9 @@ const
TestFileODF_1904='testodf_1904.ods'; //OpenDocument/LibreOffice with 1904 datemode date system
TestFileODF_1899='testodf_1899.ods'; //OpenDocument/LibreOffice with 1899/1900 datemode date system
TestFileODF=TestFileODF_1899;
+ TestFileOOXML_1904='testooxml_1904.xlsx'; //Excel xlsx with 1904 datemode date system
+ TestFileOOXML_1899='testooxml_1899.xlsx'; //Excel xlsx with 1899/1900 datemode date system
+ TestFileOOXML=TestFileOOXML_1899;
TestFileManual='testmanual.xls'; //file name for manual checking using external spreadsheet program (Excel/LibreOffice..)
DatesSheet = 'Dates'; //worksheet name
FormulasSheet = 'Formulas'; //worksheet name
diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas
index c3820c41b..305008acb 100755
--- a/components/fpspreadsheet/xlsxooxml.pas
+++ b/components/fpspreadsheet/xlsxooxml.pas
@@ -570,7 +570,8 @@ begin
// Number or date/time, depending on format
number := StrToFloat(dataStr, FPointSeparatorSettings);
if IsDateTimeFormat(cell^.NumberFormatStr) then begin
- number := ConvertExcelDateTimeToDateTime(number, FDateMode);
+ if cell^.NumberFormat <> nfTimeInterval then // no correction of time origin for "time interval" format
+ number := ConvertExcelDateTimeToDateTime(number, FDateMode);
AWorksheet.WriteDateTime(cell, number, cell^.NumberFormatStr)
end
else