fpspreadsheet: Add test cases for xlsx number and date/time formats. Two fails.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3384 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-07-26 21:52:59 +00:00
parent 77d6fd704d
commit 565df8a3e3
5 changed files with 64 additions and 16 deletions

View File

@ -215,6 +215,7 @@ type
procedure TestWriteReadDates_BIFF5; procedure TestWriteReadDates_BIFF5;
procedure TestWriteReadDates_BIFF8; procedure TestWriteReadDates_BIFF8;
procedure TestWriteReadDates_ODS; procedure TestWriteReadDates_ODS;
procedure TestWriteReadDates_OOXML;
end; end;
@ -364,6 +365,11 @@ begin
TestWriteReadDates(sfOpenDocument); TestWriteReadDates(sfOpenDocument);
end; end;
procedure TSpreadWriteReadDateTests.TestWriteReadDates_OOXML;
begin
TestWriteReadDates(sfOOXML);
end;
{ TSpreadReadDateTests } { TSpreadReadDateTests }

View File

@ -113,8 +113,15 @@ type
procedure TestWriteRead_ODS_BorderStyles; procedure TestWriteRead_ODS_BorderStyles;
procedure TestWriteRead_ODS_ColWidths; procedure TestWriteRead_ODS_ColWidths;
procedure TestWriteRead_ODS_RowHeights; procedure TestWriteRead_ODS_RowHeights;
procedure TestWriteRead_ODS_DateTimeFormats;
procedure TestWriteRead_ODS_NumberFormats;
procedure TestWriteRead_ODS_TextRotation; procedure TestWriteRead_ODS_TextRotation;
procedure TestWriteRead_ODS_WordWrap; procedure TestWriteRead_ODS_WordWrap;
{ OOXML Tests }
procedure TestWriteRead_OOXML_DateTimeFormats;
procedure TestWriteRead_OOXML_NumberFormats;
end; end;
implementation implementation
@ -155,9 +162,9 @@ begin
SollNumbers[0] := 0.0; SollNumbers[0] := 0.0;
SollNumbers[1] := 1.0; SollNumbers[1] := 1.0;
SollNumbers[2] := -1.0; SollNumbers[2] := -1.0;
SollNumbers[3] := 1.2345E6; SollNumbers[3] := 1.23456E6;
SollNumbers[4] := -1.23456E6; SollNumbers[4] := -1.23456E6;
SollNumbers[5] := 1.23456E-6; SollNumbers[5] := 1.23456E-6;
SollNumbers[6] := -1.23456E-6; SollNumbers[6] := -1.23456E-6;
SollNumberFormats[0] := nfGeneral; SollNumberDecimals[0] := 0; SollNumberFormats[0] := nfGeneral; SollNumberDecimals[0] := 0;
@ -292,13 +299,14 @@ begin
begin begin
MyWorksheet.WriteNumber(Row, Col, SollNumbers[Row], SollNumberFormats[Col], SollNumberDecimals[Col]); MyWorksheet.WriteNumber(Row, Col, SollNumbers[Row], SollNumberFormats[Col], SollNumberDecimals[Col]);
ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col); ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col);
CheckEquals(SollNumberStrings[Row, Col], ActualString, 'Test unsaved string mismatch cell ' + CellNotation(MyWorksheet,Row,Col)); CheckEquals(SollNumberStrings[Row, Col], ActualString,
'Test unsaved string mismatch cell ' + CellNotation(MyWorksheet,Row,Col));
end; end;
TempFile:=NewTempFile; TempFile:=NewTempFile;
MyWorkBook.WriteToFile(TempFile, AFormat, true); MyWorkBook.WriteToFile(TempFile, AFormat, true);
MyWorkbook.Free; MyWorkbook.Free;
// Open the spreadsheet, as biff8 // Open the spreadsheet
MyWorkbook := TsWorkbook.Create; MyWorkbook := TsWorkbook.Create;
MyWorkbook.ReadFromFile(TempFile, AFormat); MyWorkbook.ReadFromFile(TempFile, AFormat);
if AFormat = sfExcel2 then if AFormat = sfExcel2 then
@ -311,7 +319,8 @@ begin
for Col := Low(SollNumberFormats) to High(SollNumberFormats) do for Col := Low(SollNumberFormats) to High(SollNumberFormats) do
begin begin
ActualString := MyWorkSheet.ReadAsUTF8Text(Row,Col); ActualString := MyWorkSheet.ReadAsUTF8Text(Row,Col);
CheckEquals(SollNumberStrings[Row,Col],ActualString,'Test saved string mismatch cell '+CellNotation(MyWorkSheet,Row,Col)); CheckEquals(SollNumberStrings[Row,Col], ActualString,
'Test saved string mismatch cell '+CellNotation(MyWorkSheet,Row,Col));
end; end;
// Finalization // Finalization
@ -335,6 +344,16 @@ begin
TestWriteReadNumberFormats(sfExcel8); TestWriteReadNumberFormats(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_NumberFormats;
begin
TestWriteReadNumberFormats(sfOpenDocument);
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_NumberFormats;
begin
TestWriteReadNumberFormats(sfOOXML);
end;
{ --- Date/time formats --- } { --- Date/time formats --- }
@ -409,6 +428,15 @@ begin
TestWriteReadDateTimeFormats(sfExcel8); TestWriteReadDateTimeFormats(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_DateTimeFormats;
begin
TestWriteReadDateTimeFormats(sfOpenDocument);
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_DateTimeFormats;
begin
TestWriteReadDateTimeFormats(sfOOXML);
end;
{ --- Alignment tests --- } { --- Alignment tests --- }

View File

@ -105,6 +105,7 @@ type
procedure TestWriteReadNumbers_BIFF5; procedure TestWriteReadNumbers_BIFF5;
procedure TestWriteReadNumbers_BIFF8; procedure TestWriteReadNumbers_BIFF8;
procedure TestWriteReadNumbers_ODS; procedure TestWriteReadNumbers_ODS;
procedure TestWriteReadNumbers_OOXML;
end; end;
@ -169,7 +170,6 @@ var
Row: Cardinal; Row: Cardinal;
TempFile: string; //write xls/xml to this file and read back from it TempFile: string; //write xls/xml to this file and read back from it
begin begin
//todo: add support for ODF format
{// Not needed: use workbook.writetofile with overwrite=true {// Not needed: use workbook.writetofile with overwrite=true
if fileexists(TempFile) then if fileexists(TempFile) then
DeleteFile(TempFile); DeleteFile(TempFile);
@ -230,6 +230,11 @@ begin
TestWriteReadNumbers(sfOpenDocument); TestWriteReadNumbers(sfOpenDocument);
end; end;
procedure TSpreadWriteReadNumberTests.TestWriteReadNumbers_OOXML;
begin
TestWriteReadNumbers(sfOOXML);
end;
{ TSpreadReadNumberTests } { TSpreadReadNumberTests }

View File

@ -89,6 +89,7 @@
<Unit3> <Unit3>
<Filename Value="numberstests.pas"/> <Filename Value="numberstests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="numberstests"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="manualtests.pas"/> <Filename Value="manualtests.pas"/>
@ -106,6 +107,7 @@
<Unit7> <Unit7>
<Filename Value="formattests.pas"/> <Filename Value="formattests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="formattests"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="colortests.pas"/> <Filename Value="colortests.pas"/>

View File

@ -597,15 +597,17 @@ var
fmtStr: String; fmtStr: String;
nodeName: String; nodeName: String;
begin begin
node := ANode.FirstChild; if Assigned(ANode) then begin
while Assigned(node) do begin node := ANode.FirstChild;
nodeName := node.NodeName; while Assigned(node) do begin
if nodeName = 'numFmt' then begin nodeName := node.NodeName;
idStr := GetAttrValue(node, 'numFmtId'); if nodeName = 'numFmt' then begin
fmtStr := GetAttrValue(node, 'formatCode'); idStr := GetAttrValue(node, 'numFmtId');
NumFormatList.AnalyzeAndAdd(StrToInt(idStr), fmtStr); fmtStr := GetAttrValue(node, 'formatCode');
NumFormatList.AnalyzeAndAdd(StrToInt(idStr), fmtStr);
end;
node := node.NextSibling;
end; end;
node := node.NextSibling;
end; end;
end; end;
@ -1373,7 +1375,8 @@ begin
'<sheets>'); '<sheets>');
for i:=1 to Workbook.GetWorksheetCount do for i:=1 to Workbook.GetWorksheetCount do
AppendToStream(FSWorkbook, Format( AppendToStream(FSWorkbook, Format(
'<sheet name="Sheet%d" sheetId="%d" r:id="rId%d" />', [i, i, i+2])); '<sheet name="%s" sheetId="%d" r:id="rId%d" />', [Workbook.GetWorksheetByIndex(i-1).Name, i, i+2]));
// '<sheet name="Sheet%d" sheetId="%d" r:id="rId%d" />', [i, i, i+2]));
AppendToStream(FSWorkbook, AppendToStream(FSWorkbook,
'</sheets>'); '</sheets>');
AppendToStream(FSWorkbook, AppendToStream(FSWorkbook,
@ -1831,7 +1834,11 @@ begin
CellPosText := TsWorksheet.CellPosToText(ARow, ACol); CellPosText := TsWorksheet.CellPosToText(ARow, ACol);
lStyleIndex := GetStyleIndex(ACell); lStyleIndex := GetStyleIndex(ACell);
lDateTime := ConvertDateTimeToExcelDateTime(AValue, FDateMode); lDateTime := ConvertDateTimeToExcelDateTime(AValue, FDateMode);
CellValueText := Format('%g', [lDateTime], FPointSeparatorSettings); // !!!!!!!!!!!!!!!!!!!!! NEED "IF" TO CHECK FOR DATE/TIME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// CellValueText := Format('%g', [lDateTime], FPointSeparatorSettings);
CellValueText := FloatToStr(lDateTime, FPointSeparatorSettings);
AppendToStream(AStream, Format( AppendToStream(AStream, Format(
'<c r="%s" s="%d" t="n"><v>%s</v></c>', [CellPosText, lStyleIndex, CellValueText])); '<c r="%s" s="%d" t="n"><v>%s</v></c>', [CellPosText, lStyleIndex, CellValueText]));
end; end;