diff --git a/components/fpspreadsheet/examples/ooxmldemo/ooxmlwrite.lpr b/components/fpspreadsheet/examples/ooxmldemo/ooxmlwrite.lpr
index 85ad10d7d..10648f22d 100644
--- a/components/fpspreadsheet/examples/ooxmldemo/ooxmlwrite.lpr
+++ b/components/fpspreadsheet/examples/ooxmldemo/ooxmlwrite.lpr
@@ -19,6 +19,7 @@ var
i: Integer;
a: TStringList;
MyCell: PCell;
+
begin
// Open the output file
MyDir := ExtractFilePath(ParamStr(0));
diff --git a/components/fpspreadsheet/tests/internaltests.pas b/components/fpspreadsheet/tests/internaltests.pas
index 77d305bde..d28c998d6 100644
--- a/components/fpspreadsheet/tests/internaltests.pas
+++ b/components/fpspreadsheet/tests/internaltests.pas
@@ -28,10 +28,13 @@ type
TSpreadInternalTests= class(TTestCase)
private
+ procedure NeedVirtualCellData(Sender: TObject; ARow, ACol: Cardinal;
+ var AValue:Variant; var AStyleCell: PCell);
protected
// Set up expected values:
procedure SetUp; override;
procedure TearDown; override;
+ procedure TestVirtualMode(AFormat: TsSpreadsheetFormat);
published
// Tests getting Excel style A1 cell locations from row/column based locations.
// Bug 26447
@@ -46,10 +49,19 @@ type
procedure OverwriteExistingFile;
// Write out date cell and try to read as UTF8; verify if contents the same
procedure ReadDateAsUTF8;
+
+ // Virtual mode tests for all file formats
+ procedure TestVirtualMode_BIFF2;
+ procedure TestVirtualMode_BIFF5;
+ procedure TestVirtualMode_BIFF8;
+ procedure TestVirtualMode_OOXML;
end;
implementation
+uses
+ numberstests;
+
const
InternalSheet = 'Internal'; //worksheet name
@@ -184,9 +196,76 @@ begin
end;
+procedure TSpreadInternalTests.NeedVirtualCellData(Sender: TObject;
+ ARow, ACol: Cardinal; var AValue:Variant; var AStyleCell: PCell);
+begin
+ AValue := SollNumbers[ARow];
+end;
+procedure TSpreadInternalTests.TestVirtualMode(AFormat: TsSpreadsheetFormat);
+var
+ tempFile: String;
+ workbook: TsWorkbook;
+ worksheet: TsWorksheet;
+ row, col: Integer;
+ value: Double;
+begin
+ TempFile:=GetTempFileName;
+ if FileExists(TempFile) then
+ DeleteFile(TempFile);
+ workbook := TsWorkbook.Create;
+ try
+ worksheet := workbook.AddWorksheet('VirtualMode');
+ workbook.WritingOptions := workbook.WritingOptions + [woVirtualMode];
+ workbook.VirtualRowCount := Length(SollNumbers);
+ workbook.VirtualColCount := 1;
+ workbook.OnNeedCellData := @NeedVirtualCellData;
+ workbook.WriteToFile(tempfile, AFormat);
+ finally
+ workbook.Free;
+ end;
+ if AFormat <> sfOOXML then begin // No reader support for OOXML
+ workbook := TsWorkbook.Create;
+ try
+ workbook.ReadFromFile(tempFile, AFormat);
+ worksheet := workbook.GetWorksheetByIndex(0);
+ col := 0;
+ CheckEquals(Length(SollNumbers), worksheet.GetLastRowIndex+1,
+ 'Row count mismatch');
+ for row := 0 to worksheet.GetLastRowIndex do begin
+ value := worksheet.ReadAsNumber(row, col);
+ CheckEquals(SollNumbers[row], value,
+ 'Test number value mismatch, cell '+CellNotation(workSheet, row, col))
+ end;
+ finally
+ workbook.Free;
+ end;
+ end;
+
+ DeleteFile(tempFile);
+end;
+
+procedure TSpreadInternalTests.TestVirtualMode_BIFF2;
+begin
+ TestVirtualMode(sfExcel2);
+end;
+
+procedure TSpreadInternalTests.TestVirtualMode_BIFF5;
+begin
+ TestVirtualMode(sfExcel5);
+end;
+
+procedure TSpreadInternalTests.TestVirtualMode_BIFF8;
+begin
+ TestVirtualMode(sfExcel8);
+end;
+
+procedure TSpreadInternalTests.TestVirtualMode_OOXML;
+begin
+ TestVirtualMode(sfOOXML);
+end;
initialization
// Register so these tests are included in a full run
diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi
index f56f38668..1166ff9e0 100644
--- a/components/fpspreadsheet/tests/spreadtestgui.lpi
+++ b/components/fpspreadsheet/tests/spreadtestgui.lpi
@@ -88,6 +88,7 @@
+