diff --git a/components/fpspreadsheet/tests/formattests.pas b/components/fpspreadsheet/tests/formattests.pas
index 0dc0d7ce6..bb8f2a54b 100644
--- a/components/fpspreadsheet/tests/formattests.pas
+++ b/components/fpspreadsheet/tests/formattests.pas
@@ -71,6 +71,8 @@ type
procedure TestWriteRead_DateTimeFormats(AFormat: TsSpreadsheetFormat);
// Test merged cells
procedure TestWriteRead_MergedCells(AFormat: TsSpreadsheetFormat);
+ // Many XF records
+ procedure TestWriteRead_ManyXF(AFormat: TsSpreadsheetFormat);
published
// Writes out numbers & reads back.
@@ -84,6 +86,7 @@ type
procedure TestWriteRead_BIFF2_DateTimeFormats;
procedure TestWriteRead_BIFF2_MergedCells;
procedure TestWriteRead_BIFF2_NumberFormats;
+ procedure TestWriteRead_BIFF2_ManyXFRecords;
// These features are not supported by Excel2 --> no test cases required!
// - BorderStyle
// - TextRotation
@@ -1427,7 +1430,79 @@ begin
TestWriteRead_MergedCells(sfOOXML);
end;
+{ If a biff2 file contains more than 62 XF records the XF record index is stored
+ in a separats IXFE record. This is tested here. }
+procedure TSpreadWriteReadFormatTests.TestWriteRead_ManyXF(AFormat: TsSpreadsheetFormat);
+const
+ SHEETNAME = 'Too-many-xf-records';
+ FontSizes: array[0..7] of Integer = (9, 10, 12, 14, 16, 18, 20, 24);
+var
+ MyWorkbook: TsWorkbook;
+ MyWorksheet: TsWorksheet;
+ cell: PCell;
+ TempFile: string; //write xls/xml to this file and read back from it
+ r1, c1, r2, c2: Cardinal;
+ r, c: Cardinal;
+ fnt: TsFont;
+ actual, expected: String;
+ i: Integer;
+begin
+ MyWorkbook := TsWorkbook.Create;
+ try
+ MyWorksheet:= MyWorkBook.AddWorksheet(SHEETNAME);
+ for r := 0 to 7 do // change FontSize in each row
+ for c := 0 to 7 do // change FontColor in each column
+ begin
+ MyWorksheet.WriteNumber(r, c, 123);
+ MyWorksheet.WriteBackgroundColor(r, c, 0);
+ MyWorksheet.WriteFont(r, c, 'Times New Roman', FontSizes[r], [], c); // Biff2 has only 8 colors --> re-use the black!
+ // --> in total 64 combinations
+ end;
+ TempFile:=NewTempFile;
+ MyWorkBook.WriteToFile(TempFile, AFormat, true);
+ finally
+ MyWorkbook.Free;
+ end;
+ // Open the spreadsheet
+ MyWorkbook := TsWorkbook.Create;
+ try
+ MyWorkbook.ReadFromFile(TempFile, AFormat);
+
+ // 1st sheet: merged cells with text
+ if AFormat = sfExcel2 then
+ MyWorksheet := MyWorkbook.GetFirstWorksheet
+ else
+ MyWorksheet := GetWorksheetByName(MyWorkBook, SHEETNAME);
+ if MyWorksheet=nil then
+ fail('Error in test code. Failed to get named worksheet ' + SHEETNAME);
+
+ for r:=0 to MyWorksheet.GetLastRowIndex do
+ for c := 0 to MyWorksheet.GetLastColIndex do
+ begin
+ cell := MyWorksheet.FindCell(r, c);
+ fnt := MyWorksheet.ReadCellFont(cell);
+ expected := FloatToStr(FontSizes[r]);
+ actual := FloatToStr(fnt.Size);
+ CheckEquals(expected, actual,
+ 'Font size mismatch, cell '+ CellNotation(MyWorksheet, r, c));
+ expected := IntToStr(c);
+ actual := IntToStr(fnt.Color);
+ CheckEquals(expected, actual,
+ 'Font color mismatch, cell '+ CellNotation(MyWorksheet, r, c));
+ end;
+
+ finally
+ MyWorkbook.Free;
+ DeleteFile(TempFile);
+ end;
+end;
+
+
+procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_ManyXFRecords;
+begin
+ TestWriteRead_ManyXF(sfExcel2);
+end;
initialization
RegisterTest(TSpreadWriteReadFormatTests);
diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi
index af201c8de..80e9602a0 100644
--- a/components/fpspreadsheet/tests/spreadtestgui.lpi
+++ b/components/fpspreadsheet/tests/spreadtestgui.lpi
@@ -73,6 +73,7 @@
+