You've already forked lazarus-ccr
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:
@ -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 }
|
||||||
|
|
||||||
|
@ -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 --- }
|
||||||
|
|
||||||
|
@ -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 }
|
||||||
|
|
||||||
|
@ -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"/>
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user