From 935c054138c71f16de4d265a1cae052e4b561a57 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 2 Jan 2017 09:35:10 +0000 Subject: [PATCH] fpspreadsheet: Add TsWorksheet.IsEmpty and TsWorkbook.RemoveAllEmptyWorksheets. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5582 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/common/fpspreadsheet.pas | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas index 015ff5154..16c83a64a 100644 --- a/components/fpspreadsheet/source/common/fpspreadsheet.pas +++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas @@ -197,6 +197,8 @@ type function ReadWordwrap(ACell: PCell): boolean; function ReadBiDiMode(ACell: PCell): TsBiDiMode; + function IsEmpty: Boolean; + { Writing of values } function WriteBlank(ARow, ACol: Cardinal): PCell; overload; procedure WriteBlank(ACell: PCell); overload; @@ -761,6 +763,7 @@ type function GetWorksheetCount: Integer; function GetWorksheetIndex(AWorksheet: TsWorksheet): Integer; procedure RemoveAllWorksheets; + procedure RemoveAllEmptyWorksheets; procedure RemoveWorksheet(AWorksheet: TsWorksheet); procedure SelectWorksheet(AWorksheet: TsWorksheet); function ValidWorksheetName(var AName: String; @@ -3373,6 +3376,25 @@ begin end; +{@@ ---------------------------------------------------------------------------- + Returns true if the worksheet does not contain any cell, column or row records +-------------------------------------------------------------------------------} +function TsWorksheet.IsEmpty: Boolean; +var + cell: PCell; +begin + Result := false; + for cell in Cells do + if cell^.ContentType <> cctEmpty then + exit; + + if (Rows.Count > 0) or (Cols.Count > 0) then + exit; + + Result := true; +end; + + { Merged cells } {@@ ---------------------------------------------------------------------------- @@ -8424,6 +8446,22 @@ begin FWorksheets.ForEachCall(RemoveWorksheetsCallback, nil); end; +{@@ ---------------------------------------------------------------------------- + Removes all empty worksheets +-------------------------------------------------------------------------------} +procedure TsWorkbook.RemoveAllEmptyWorksheets; +var + sheet: TsWorksheet; + i: Integer; +begin + for i:= FWorksheets.Count-1 downto 0 do + begin + sheet := TsWorksheet(FWorksheets.Items[i]); + if sheet.IsEmpty then + RemoveWorksheet(sheet); + end; +end; + {@@ ---------------------------------------------------------------------------- Removes the specified worksheet: Removes the sheet from the internal sheet list, generates an event OnRemoveWorksheet, and releases all memory.