diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas
index cb55adc56..e55ed6334 100644
--- a/components/fpspreadsheet/source/common/fpspreadsheet.pas
+++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas
@@ -491,6 +491,8 @@ type
procedure AddPageBreakToCol(ACol: Cardinal);
procedure AddPageBreakToRow(ARow: Cardinal);
+ function IsPageBreakCol(ACol: Cardinal): Boolean;
+ function IsPageBreakRow(ARow: Cardinal): Boolean;
procedure RemovePageBreakFromCol(ACol: Cardinal);
procedure RemovePageBreakFromRow(ARow: Cardinal);
@@ -8400,7 +8402,7 @@ procedure TsWorksheet.AddPageBreakToCol(ACol: Cardinal);
var
lCol: PCol;
begin
- lCol := AddCol(ACol);
+ lCol := GetCol(ACol);
Include(lCol^.Options, croPageBreak);
ChangedCol(ACol);
end;
@@ -8414,11 +8416,35 @@ procedure TsWorksheet.AddPageBreakToRow(ARow: Cardinal);
var
lRow: PRow;
begin
- lRow := AddRow(ARow);
+ lRow := GetRow(ARow);
Include(lRow^.Options, croPageBreak);
ChangedRow(ARow);
end;
+{@@ ----------------------------------------------------------------------------
+ Returns true if the column with the specified index is the first one after a
+ manual page break.
+-------------------------------------------------------------------------------}
+function TsWorksheet.IsPageBreakCol(ACol: Cardinal): Boolean;
+var
+ lCol: PCol;
+begin
+ lCol := FindCol(ACol);
+ Result := Assigned(lCol) and (croPageBreak in lCol^.Options);
+end;
+
+{@@ ----------------------------------------------------------------------------
+ Returns true if the row with the specified index is the first one after a
+ manual page break.
+-------------------------------------------------------------------------------}
+function TsWorksheet.IsPageBreakRow(ARow: Cardinal): Boolean;
+var
+ lRow: PRow;
+begin
+ lRow := FindRow(ARow);
+ Result := Assigned(lRow) and (croPageBreak in lRow^.Options);
+end;
+
{@@ ----------------------------------------------------------------------------
Removes the PageBreak flag for the column record with the specified column
index.
@@ -8431,8 +8457,11 @@ var
lCol: PCol;
begin
lCol := FindCol(ACol);
- if lCol <> nil then begin
+ if Assigned(lCol) then begin
Exclude(lCol^.Options, croPageBreak);
+ // Free and delete node when the col record only has default values now.
+ if (lCol^.Options = []) and (lCol^.FormatIndex = 0) and (lCol^.ColWidthType = cwtDefault) then
+ RemoveCol(ACol);
ChangedCol(ACol);
end;
end;
@@ -8448,8 +8477,11 @@ var
lRow: PRow;
begin
lRow := FindRow(ARow);
- if lRow <> nil then begin
+ if Assigned(lRow) then begin
Exclude(lRow^.Options, croPageBreak);
+ // Free and delete node if the row record only has default values now.
+ if (lRow^.Options = []) and (lRow^.FormatIndex = 0) and (lRow^.RowHeightType = rhtDefault) then
+ RemoveRow(ARow);
ChangedRow(ARow);
end;
end;
diff --git a/components/fpspreadsheet/source/common/xlsxml.pas b/components/fpspreadsheet/source/common/xlsxml.pas
index 74bee2c6a..ab5b8f7be 100644
--- a/components/fpspreadsheet/source/common/xlsxml.pas
+++ b/components/fpspreadsheet/source/common/xlsxml.pas
@@ -91,6 +91,7 @@ type
procedure WriteColumns(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteExcelWorkbook(AStream: TStream);
procedure WriteNames(AStream: TStream; AWorksheet: TsBasicWorksheet);
+ procedure WritePageBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteRows(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteStyle(AStream: TStream; AIndex: Integer);
procedure WriteStyles(AStream: TStream);
@@ -2187,6 +2188,66 @@ begin
);
end;
+procedure TsSpreadExcelXMLWriter.WritePageBreaks(AStream: TStream;
+ AWorksheet: TsBasicWorksheet);
+var
+ i: Integer;
+ nc, nr: Integer;
+ sheet: TsWorksheet absolute AWorksheet;
+ s: String;
+ col: PCol;
+ row: PRow;
+begin
+ nc := 0;
+ for i := 0 to sheet.Cols.Count - 1 do
+ if (croPageBreak in PCol(sheet.Cols[i])^.Options) then inc(nc);
+
+ nr := 0;
+ for i:= 0 to sheet.Rows.Count - 1 do
+ if (croPageBreak in PRow(sheet.Rows[i])^.Options) then inc(nr);
+
+ if (nc = 0) and (nr = 0) then
+ exit;
+
+ s := INDENT2 +
+ '' + LF;
+
+ if nc > 0 then begin
+ s := s + INDENT3 +
+ '' + LF;
+ for i := 0 to sheet.Cols.Count - 1 do begin
+ col := PCol(sheet.Cols[i]);
+ if (croPageBreak in col^.Options) then
+ s := s + INDENT4 +
+ '' + LF + INDENT5 +
+ '' + IntToStr(col^.Col) + '' + LF + INDENT4 +
+ '' + LF;
+ end;
+ s := s + INDENT3 +
+ '' + LF;
+ end;
+
+ if nr > 0 then begin
+ s := s + INDENT3 +
+ '' + LF;
+ for i := 0 to sheet.Rows.Count - 1 do begin
+ row := PRow(sheet.Rows[i]);
+ if (croPageBreak in row^.Options) then
+ s := s + INDENT4 +
+ '' + LF + INDENT5 +
+ '' + IntToStr(row^.Row) + '
' + LF + INDENT4 +
+ '' + LF;
+ end;
+ s := s + INDENT3 +
+ '' + LF;
+ end;
+
+ s := s + INDENT2 +
+ '' + LF;
+
+ AppendToStream(AStream, s);
+end;
+
procedure TsSpreadExcelXMLWriter.WriteRows(AStream: TStream;
AWorksheet: TsBasicWorksheet);
var
@@ -2503,6 +2564,7 @@ begin
WriteNames(AStream, AWorksheet);
WriteTable(AStream, AWorksheet);
WriteWorksheetOptions(AStream, AWorksheet);
+ WritePageBreaks(AStream, AWorksheet);
AppendToStream(AStream,
' ' + LF
);
diff --git a/components/fpspreadsheet/source/common/xlsxooxml.pas b/components/fpspreadsheet/source/common/xlsxooxml.pas
index a3a1a4c48..0bf4decea 100644
--- a/components/fpspreadsheet/source/common/xlsxooxml.pas
+++ b/components/fpspreadsheet/source/common/xlsxooxml.pas
@@ -69,6 +69,7 @@ type
procedure ReadBorders(ANode: TDOMNode);
procedure ReadCell(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
procedure ReadCellXfs(ANode: TDOMNode);
+ procedure ReadColRowBreaks(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
function ReadColor(ANode: TDOMNode): TsColor;
procedure ReadCols(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
procedure ReadComments(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
@@ -135,6 +136,7 @@ type
function PrepareFormula(const AFormula: String): String;
procedure ResetStreams;
procedure WriteBorderList(AStream: TStream);
+ procedure WriteColBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteCols(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteComments(AWorksheet: TsBasicWorksheet);
procedure WriteDefinedNames(AStream: TStream);
@@ -153,6 +155,7 @@ type
procedure WritePageMargins(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WritePageSetup(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WritePrintOptions(AStream: TStream; AWorksheet: TsBasicWorksheet);
+ procedure WriteRowBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteSheetData(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteSheetFormatPr(AStream: TStream; AWorksheet: TsBasicWorksheet);
procedure WriteSheetPr(AStream: TStream; AWorksheet: TsBasicWorksheet);
@@ -1051,6 +1054,43 @@ begin
end;
end;
+procedure TsSpreadOOXMLReader.ReadColRowBreaks(ANode: TDOMNode;
+ AWorksheet: TsBasicWorksheet);
+var
+ s: String;
+ sheet: TsWorksheet absolute AWorksheet;
+ node: TDOMNode;
+ nodeName: String;
+ n: Integer;
+ isCol: Boolean;
+begin
+ if (ANode = nil) or (AWorksheet = nil) then // just to make sure...
+ exit;
+
+ nodeName := ANode.NodeName;
+ isCol := nodeName = 'colBreaks';
+ node := ANode.FirstChild;
+ while node <> nil do
+ begin
+ nodeName := node.NodeName;
+ if nodeName = 'brk' then begin
+ s := GetAttrValue(node, 'id');
+ if (s <> '') and TryStrToInt(s, n) then
+ begin
+ s := GetAttrValue(node, 'man');
+ if s = '1' then
+ begin
+ if isCol then
+ sheet.AddPageBreakToCol(n)
+ else
+ sheet.AddPageBreakToRow(n);
+ end;
+ end;
+ end;
+ node := node.NextSibling;
+ end;
+end;
+
function TsSpreadOOXMLReader.ReadColor(ANode: TDOMNode): TsColor;
var
s: String;
@@ -2678,6 +2718,8 @@ begin
ReadPrintOptions(Doc_FindNode('printOptions'), FWorksheet);
ReadPageMargins(Doc_FindNode('pageMargins'), FWorksheet);
ReadPageSetup(Doc_FindNode('pageSetup'), FWorksheet);
+ ReadColRowBreaks(Doc_FindNode('rowBreaks'), FWorksheet);
+ ReadColRowBreaks(Doc_FindNode('colBreaks'), FWorksheet);
ReadHeaderFooter(Doc_FindNode('headerFooter'), FWorksheet);
FreeAndNil(Doc);
@@ -3034,6 +3076,28 @@ begin
'');
end;
+procedure TsSpreadOOXMLWriter.WriteColBreaks(AStream: TStream;
+ AWorksheet: TsBasicWorksheet);
+var
+ sheet: TsWorksheet absolute AWorksheet;
+ n: Integer;
+ i: Integer;
+begin
+ n := 0;
+ for i := 0 to sheet.Cols.Count - 1 do
+ if (croPageBreak in PCol(sheet.Cols[i])^.Options) then inc(n);
+ if n = 0 then
+ exit;
+
+ AppendToStream(AStream, Format(
+ '', [n, n]));
+ for i := 0 to sheet.Cols.Count - 1 do
+ AppendToStream(AStream, Format(
+ '', [PCol(sheet.Cols[i])^.Col]));
+ AppendToStream(AStream,
+ '');
+end;
+
procedure TsSpreadOOXMLWriter.WriteCols(AStream: TStream;
AWorksheet: TsBasicWorksheet);
var
@@ -3480,6 +3544,27 @@ begin
'');
end;
+procedure TsSpreadOOXMLWriter.WriteRowBreaks(AStream: TStream;
+ AWorksheet: TsBasicWorksheet);
+var
+ i, n: Integer;
+ sheet: TsWorksheet absolute AWorksheet;
+begin
+ n := 0;
+ for i := 0 to sheet.Rows.Count-1 do
+ if (croPageBreak in PRow(sheet.Rows[i])^.Options) then inc(n);
+ if n = 0 then
+ exit;
+
+ AppendToStream(AStream, Format(
+ '', [n, n]));
+ for i := 0 to sheet.Rows.Count - 1 do
+ AppendToStream(AStream, Format(
+ '', [PRow(sheet.Rows[i])^.Row]));
+ AppendToStream(AStream,
+ '');
+end;
+
procedure TsSpreadOOXMLWriter.WriteSheetData(AStream: TStream;
AWorksheet: TsBasicWorksheet);
var
@@ -5078,6 +5163,8 @@ begin
WritePrintOptions(FSSheets[FCurSheetNum], AWorksheet);
WritePageMargins(FSSheets[FCurSheetNum], AWorksheet);
WritePageSetup(FSSheets[FCurSheetNum], AWorksheet);
+ WriteRowBreaks(FSSheets[FCurSheetNum], AWorksheet);
+ WriteColBreaks(FSSheets[FCurSheetNum], AWorksheet);
WriteHeaderFooter(FSSheets[FCurSheetNum], AWorksheet);
{ This item is required for all embedded images.
diff --git a/components/fpspreadsheet/tests/colrowtests.pas b/components/fpspreadsheet/tests/colrowtests.pas
index e630a24ef..3ae231e26 100644
--- a/components/fpspreadsheet/tests/colrowtests.pas
+++ b/components/fpspreadsheet/tests/colrowtests.pas
@@ -52,11 +52,18 @@ type
// Set up expected values:
procedure SetUp; override;
procedure TearDown; override;
+
procedure TestWriteRead_InsDelColRow(ATestIndex: Integer;
AFormat: TsSpreadsheetFormat);
procedure TestWriteRead_HideShowColRow(IsCol: Boolean;
IsHide: boolean; IsDefaultColRow: Boolean; AFormat: TsSpreadsheetFormat);
+ procedure TestWriteRead_AddPageBreak_Col(Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+ procedure TestWriteRead_AddPageBreak_Row(Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+
+ procedure TestWriteRead_RemovePageBreak_Col(Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+ procedure TestWriteRead_RemovePageBreak_Row(Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+
published
// *** Excel 8 tests ***
@@ -165,6 +172,7 @@ type
procedure TestWriteRead_InsDelColRow_33_OOXML; // row through merged block
procedure TestWriteRead_InsDelColRow_34_OOXML; // row after merged block
+
// *** OpenDocument tests ***
// Writes out simple cell layout and inserts columns
@@ -274,6 +282,18 @@ type
procedure TestWriteRead_ShowRow_XML;
procedure TestWriteRead_ShowRow_ODS;
+ // Add a page break column
+ procedure TestWriteRead_AddPageBreak_Col_OOXML;
+ procedure TestWriteRead_AddPageBreak_ColHidden_OOXML;
+ procedure TestWriteRead_AddPageBreak_Row_OOXML;
+ procedure TestWriteRead_AddPageBreak_RowHidden_OOXML;
+
+ // Remove a page break column
+ procedure TestWriteRead_RemovePageBreak_Col_OOXML;
+ procedure TestWriteRead_RemovePageBreak_ColHidden_OOXML;
+ procedure TestWriteRead_RemovePageBreak_Row_OOXML;
+ procedure TestWriteRead_RemovePageBreak_RowHidden_OOXML;
+
end;
implementation
@@ -2093,6 +2113,299 @@ begin
end;
+{ *** Add/remove page breaks *** }
+
+{ Add page break to column
+ - Hidden: set the Hidden flag in the options to test whether it is damaged }
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_AddPageBreak_Col(
+ Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+const
+ COL_INDEX = 5;
+var
+ book: TsWorkbook;
+ sheet: TsWorksheet;
+ tempFile: String;
+ col: PCol;
+begin
+ TempFile := GetTempFileName;
+
+ // Create dummy workbook with forced page break and save to temp file
+ book := TsWorkbook.Create;
+ try
+ sheet := book.AddWorksheet('Test');
+
+ sheet.AddPageBreakToCol(COL_INDEX);
+ if Hidden then
+ sheet.HideCol(COL_INDEX);
+ col := sheet.FindCol(COL_INDEX);
+ CheckEquals(true, col <> nil,
+ 'Col record not found, col ' + IntToStr(COL_INDEX));
+ CheckEquals(true, croPageBreak in col^.Options,
+ 'Unsaved PageBreak flag mismatch, col ' + IntToStr(COL_INDEX));
+ if Hidden then
+ CheckEquals(true, croHidden in col^.Options,
+ 'Unsaved Hidden flag mismatch, col ' + IntToStr(COL_INDEX));
+
+ book.WriteToFile(tempFile, AFormat, true);
+ finally
+ book.Free;
+ end;
+
+ // Read test file
+ book := TsWorkbook.Create;
+ try
+ book.ReadFromFile(tempFile, AFormat);
+ sheet := book.GetFirstWorksheet;
+
+ col := sheet.FindCol(COL_INDEX);
+ CheckEquals(true, col <> nil,
+ 'Saved col record not found, col ' + IntToStr(COL_INDEX));
+ CheckEquals(true, croPageBreak in col^.Options,
+ 'Saved PageBreak flag mismatch, col ' + IntToStr(COL_INDEX));
+ finally
+ book.Free;
+ DeleteFile(TempFile);
+ end;
+end;
+
+{ Add page break to row
+ - Hidden: set the Hidden flag in the options to test whether it is damaged }
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_AddPageBreak_Row(
+ Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+const
+ ROW_INDEX = 5;
+var
+ book: TsWorkbook;
+ sheet: TsWorksheet;
+ tempFile: String;
+ row: PRow;
+begin
+ TempFile := GetTempFileName;
+
+ // Create dummy workbook with forced page break and save to temp file
+ book := TsWorkbook.Create;
+ try
+ sheet := book.AddWorksheet('Test');
+
+ sheet.AddPageBreakToRow(ROW_INDEX);
+ if Hidden then
+ sheet.HideRow(ROW_INDEX);
+ row := sheet.FindRow(ROW_INDEX);
+ CheckEquals(true, row <> nil,
+ 'Row record not found, row ' + IntToStr(ROW_INDEX));
+ CheckEquals(true, croPageBreak in row^.Options,
+ 'Unsaved PageBreak flag mismatch, row ' + IntToStr(ROW_INDEX));
+ if Hidden then
+ CheckEquals(true, croHidden in row^.Options,
+ 'Unsaved Hidden flag mismatch, row ' + IntToStr(ROW_INDEX));
+
+ book.WriteToFile(tempFile, AFormat, true);
+ finally
+ book.Free;
+ end;
+
+ // Read test file
+ book := TsWorkbook.Create;
+ try
+ book.ReadFromFile(tempFile, AFormat);
+ sheet := book.GetFirstWorksheet;
+
+ row := sheet.FindRow(ROW_INDEX);
+ CheckEquals(true, row <> nil,
+ 'Saved row record not found, row ' + IntToStr(ROW_INDEX));
+ CheckEquals(true, croPageBreak in row^.Options,
+ 'Saved PageBreak flag mismatch, row ' + IntToStr(ROW_INDEX));
+ finally
+ book.Free;
+ DeleteFile(TempFile);
+ end;
+end;
+
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_AddPageBreak_Col_OOXML;
+begin
+ TestWriteRead_AddPageBreak_Col(false, sfOOXML);
+end;
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_AddPageBreak_Row_OOXML;
+begin
+ TestWriteRead_AddPageBreak_Row(false, sfOOXML);
+end;
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_AddPageBreak_ColHidden_OOXML;
+begin
+ TestWriteRead_AddPageBreak_Col(true, sfOOXML);
+end;
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_AddPageBreak_RowHidden_OOXML;
+begin
+ TestWriteRead_AddPageBreak_Row(true, sfOOXML);
+end;
+
+
+{ Remove page break
+ - Hidden: set the Hidden flag in the options to test whether it is damaged
+ In the test, the entire row/col record is removed when Hidden is false. }
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_RemovePageBreak_Col(
+ Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+const
+ COL_INDEX = 5;
+var
+ book: TsWorkbook;
+ sheet: TsWorksheet;
+ tempFile: String;
+ col: PCol;
+begin
+ TempFile := GetTempFileName;
+
+ // Create dummy workbook with forced page break and save to temp file
+ book := TsWorkbook.Create;
+ try
+ sheet := book.AddWorksheet('Test');
+ sheet.AddPageBreakToCol(COL_INDEX);
+
+ if Hidden then
+ sheet.HideCol(COL_INDEX);
+ col := sheet.FindCol(COL_INDEX);
+ CheckEquals(true, col <> nil,
+ 'Col record not found, col ' + IntToStr(COL_INDEX));
+ CheckEquals(true, croPageBreak in col^.Options,
+ 'Unsaved PageBreak flag mismatch, col ' + IntToStr(COL_INDEX));
+ if Hidden then
+ CheckEquals(true, croHidden in col^.Options,
+ 'Unsaved Hidden flag mismatch, col ' + IntToStr(COL_INDEX));
+
+ sheet.RemovePageBreakFromCol(COL_INDEX);
+
+ col := sheet.FindCol(COL_INDEX);
+ if Hidden then begin
+ CheckEquals(true, col <> nil,
+ 'Col record not found, col ' + IntToStr(COL_INDEX));
+ CheckEquals(false, croPageBreak in col^.Options,
+ 'Unsaved PageBreak flag mismatch, col ' + IntToStr(COL_INDEX));
+ CheckEquals(true, croHidden in col^.Options,
+ 'Unsaved Hidden flag mismatch, col ' + IntToStr(COL_INDEX));
+ end else begin
+ CheckEquals(true, col = nil,
+ 'Unsaved col record still found, col ' + IntToStr(COL_INDEX));
+ end;
+
+ book.WriteToFile(tempFile, AFormat, true);
+ finally
+ book.Free;
+ end;
+
+ // Read test file
+ book := TsWorkbook.Create;
+ try
+ book.ReadFromFile(tempFile, AFormat);
+ sheet := book.GetFirstWorksheet;
+ col := sheet.FindCol(COL_INDEX);
+
+ if Hidden then begin
+ CheckEquals(true, col <> nil,
+ 'Col record not found, col ' + IntToStr(COL_INDEX));
+ CheckEquals(false, croPageBreak in col^.Options,
+ 'Saved PageBreak flag mismatch, col ' + IntToStr(COL_INDEX));
+ CheckEquals(true, croHidden in col^.Options,
+ 'Saved Hidden flag mismatch, col ' + IntToStr(COL_INDEX));
+ end else begin
+ CheckEquals(true, col = nil,
+ 'Saved col record still found, col ' + IntToStr(COL_INDEX));
+ end;
+ finally
+ book.Free;
+ DeleteFile(tempFile);
+ end;
+end;
+
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_RemovePageBreak_Row(
+ Hidden: Boolean; AFormat: TsSpreadsheetFormat);
+const
+ ROW_INDEX = 5;
+var
+ book: TsWorkbook;
+ sheet: TsWorksheet;
+ tempFile: String;
+ row: PRow;
+begin
+ TempFile := GetTempFileName;
+
+ // Create dummy workbook with forced page break and save to temp file
+ book := TsWorkbook.Create;
+ try
+ sheet := book.AddWorksheet('Test');
+ sheet.AddPageBreakToRow(ROW_INDEX);
+
+ if Hidden then
+ sheet.HideRow(ROW_INDEX);
+ row := sheet.FindRow(ROW_INDEX);
+ CheckEquals(true, row <> nil,
+ 'Row record not found, row ' + IntToStr(ROW_INDEX));
+ CheckEquals(true, croPageBreak in row^.Options,
+ 'Unsaved PageBreak flag mismatch, row ' + IntToStr(ROW_INDEX));
+ if Hidden then
+ CheckEquals(true, croHidden in row^.Options,
+ 'Unsaved Hidden flag mismatch, row ' + IntToStr(ROW_INDEX));
+
+ sheet.RemovePageBreakFromRow(ROW_INDEX);
+
+ row := sheet.FindRow(ROW_INDEX);
+ if Hidden then begin
+ CheckEquals(true, row <> nil,
+ 'Row record not found, row ' + IntToStr(ROW_INDEX));
+ CheckEquals(false, croPageBreak in row^.Options,
+ 'Unsaved PageBreak flag mismatch, row ' + IntToStr(ROW_INDEX));
+ CheckEquals(true, croHidden in row^.Options,
+ 'Unsaved Hidden flag mismatch, row ' + IntToStr(ROW_INDEX));
+ end else begin
+ CheckEquals(true, row = nil,
+ 'Unsaved row record still found, row ' + IntToStr(ROW_INDEX));
+ end;
+
+ book.WriteToFile(tempFile, AFormat, true);
+ finally
+ book.Free;
+ end;
+
+ // Read test file
+ book := TsWorkbook.Create;
+ try
+ book.ReadFromFile(tempFile, AFormat);
+ sheet := book.GetFirstWorksheet;
+ row := sheet.FindRow(ROW_INDEX);
+
+ if Hidden then begin
+ CheckEquals(true, row <> nil,
+ 'Row record not found, col ' + IntToStr(ROW_INDEX));
+ CheckEquals(false, croPageBreak in row^.Options,
+ 'Saved PageBreak flag mismatch, row ' + IntToStr(ROW_INDEX));
+ CheckEquals(true, croHidden in row^.Options,
+ 'Saved Hidden flag mismatch, row ' + IntToStr(ROW_INDEX));
+ end else begin
+ CheckEquals(true, row = nil,
+ 'Saved row record still found, row ' + IntToStr(ROW_INDEX));
+ end;
+ finally
+ book.Free;
+ DeleteFile(tempFile);
+ end;
+end;
+
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_RemovePageBreak_Col_OOXML;
+begin
+ TestWriteRead_RemovePageBreak_Col(false, sfOOXML);
+end;
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_RemovePageBreak_Row_OOXML;
+begin
+ TestWriteRead_RemovePageBreak_Row(false, sfOOXML);
+end;
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_RemovePageBreak_ColHidden_OOXML;
+begin
+ TestWriteRead_RemovePageBreak_Col(true, sfOOXML);
+end;
+procedure TSpreadWriteRead_ColRow_Tests.TestWriteRead_RemovePageBreak_RowHidden_OOXML;
+begin
+ TestWriteRead_RemovePageBreak_Row(true, sfOOXML);
+end;
+
+
initialization
RegisterTest(TSpreadWriteRead_ColRow_Tests);
InitTestData;