From 21b927cc27d6f9ac238d27e3ed529cd80f258de2 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 9 Jun 2019 23:15:10 +0000 Subject: [PATCH] fpspreadsheet: Add property Worksheet.Index. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7005 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../examples/visual/fpsctrls/main.lfm | 7 +++- .../examples/visual/fpsctrls/main.pas | 36 ++++++++++++++++ .../source/common/fpspreadsheet.pas | 41 ++++++++++++++++++- 3 files changed, 81 insertions(+), 3 deletions(-) diff --git a/components/fpspreadsheet/examples/visual/fpsctrls/main.lfm b/components/fpspreadsheet/examples/visual/fpsctrls/main.lfm index de2513df7..ce68fc01c 100644 --- a/components/fpspreadsheet/examples/visual/fpsctrls/main.lfm +++ b/components/fpspreadsheet/examples/visual/fpsctrls/main.lfm @@ -7,13 +7,15 @@ object Form1: TForm1 ClientHeight = 601 ClientWidth = 997 Menu = MainMenu1 + OnCreate = FormCreate ShowHint = True - LCLVersion = '1.9.0.0' + LCLVersion = '2.1.0.0' object sWorkbookTabControl1: TsWorkbookTabControl Left = 0 Height = 542 Top = 59 Width = 997 + TabIndex = 0 Tabs.Strings = ( 'Sheet1' ) @@ -26,6 +28,7 @@ object Form1: TForm1 Top = 23 Width = 993 AutoCalc = True + FixedColWidth = 57 FrozenCols = 0 FrozenRows = 0 ReadFormulas = True @@ -82,7 +85,7 @@ object Form1: TForm1 Width = 130 WorkbookSource = sWorkbookSource1 DropDownCount = 24 - ItemIndex = 46 + ItemIndex = 49 TabOrder = 0 Text = 'Arial' end diff --git a/components/fpspreadsheet/examples/visual/fpsctrls/main.pas b/components/fpspreadsheet/examples/visual/fpsctrls/main.pas index 8f45b683a..4d222a4ba 100644 --- a/components/fpspreadsheet/examples/visual/fpsctrls/main.pas +++ b/components/fpspreadsheet/examples/visual/fpsctrls/main.pas @@ -54,6 +54,7 @@ type ToolButton8: TToolButton; procedure FileOpen1Accept(Sender: TObject); procedure FileSaveAs1Accept(Sender: TObject); + procedure FormCreate(Sender: TObject); private protected @@ -78,6 +79,7 @@ uses { TForm1 } { Loads the spreadsheet file selected by the FileOpen standard action } +{ procedure TForm1.FileOpen1Accept(Sender: TObject); begin sWorkbookSource1.AutodetectFormat := false; @@ -92,6 +94,35 @@ begin 8: sWorkbookSource1.FileFormat := sfCSV; // Text files end; sWorkbookSource1.FileName :=FileOpen1.Dialog.FileName; // This loads the file + sWorksheetGrid1.ShowHeaders := false; +end; } + +procedure TForm1.FileOpen1Accept(Sender: TObject); +var + wb: TsWorkbook; + sh: TsWorksheet; + i: Integer; +begin + wb := TsWorkbook.Create; + case FileOpen1.Dialog.FilterIndex of + 1: wb.ReadfromFile(FileOpen1.Dialog.FileName); // all spreadsheet files --> autodetect + 2: wb.ReadFromFile(FileOpen1.Dialog.FileName); // all Excel files --> autodetect + 3: wb.ReadFromFile(FileOpen1.Dialog.FileName, sfOOXML); // Exel 2007+ + 4: wb.ReadFromFile(FileOpen1.Dialog.FileName, sfExcel8); // Excel 97-2003 + 5: wb.ReadFromFile(FileOpen1.Dialog.FileName, sfExcel5); // Excel 5.0 + 6: wb.ReadFromFile(FileOpen1.Dialog.FileName, sfExcel2); // Excel 2.1 + 7: wb.ReadFromFile(FileOpen1.Dialog.FileName, sfOpenDocument); // LibreOffice + 8: wb.ReadFromFile(FileOpen1.Dialog.FileName, sfCSV); // Text files + else + wb.Free; + MessageDlg('File format not implemented.', mtError, [mbOk], 0); + exit; + end; + for i := 0 to wb.GetWorksheetCount - 1 do begin + sh := wb.GetWorksheetByIndex(i); + sh.Options := sh.Options - [soShowHeaders]; + end; + sWorkbookSource1.LoadFromWorkbook(wb); end; { Saves the spreadsheet to the file selected by the FileSaveAs1 action } @@ -116,5 +147,10 @@ begin end; end; +procedure TForm1.FormCreate(Sender: TObject); +begin + sWorksheetGrid1.ShowHeaders := false; +end; + end. diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas index 3855ad157..d40bf98fd 100644 --- a/components/fpspreadsheet/source/common/fpspreadsheet.pas +++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas @@ -105,9 +105,11 @@ type function GetDefaultColWidth: Single; function GetDefaultRowHeight: Single; function GetFormatSettings: TFormatSettings; + function GetIndex: Integer; procedure SetBiDiMode(AValue: TsBiDiMode); procedure SetDefaultColWidth(AValue: Single); procedure SetDefaultRowHeight(AValue: Single); + procedure SetIndex(AValue: Integer); procedure SetVirtualColCount(AValue: Cardinal); procedure SetVirtualRowCount(AValue: Cardinal); procedure SetZoomFactor(AValue: Double); @@ -600,6 +602,8 @@ type property Formulas: TsFormulas read FFormulas; {@@ FormatSettings for localization of some formatting strings } property FormatSettings: TFormatSettings read GetFormatSettings; + {@@ Index of the worksheet in the workbook } + property Index: Integer read GetIndex write SetIndex; {@@ Parameters to be used for printing by the Office applications } property PageLayout: TsPageLayout read FPageLayout write FPageLayout; {@@ List of all row records of the worksheet having a non-standard row height } @@ -724,6 +728,7 @@ type function FixFormula(AFormula: PsFormula; ACorrection: TsFormulaCorrection; AData: Pointer; AParam: PtrInt): Boolean; + procedure MoveSheet(AFromIndex, AToIndex: Integer); public { Base methods } constructor Create; @@ -4492,7 +4497,6 @@ procedure TsWorksheet.Sort(const ASortParams: TsSortParams; dec(J); end; until I > J; - if L < J then QuickSort(L, J); @@ -7247,6 +7251,34 @@ begin Result := FWorkbook.FormatSettings; end; +function TsWorksheet.GetIndex: Integer; +begin + Result := TsWorkbook(FWorkbook).GetWorksheetIndex(self); +end; + +{@@ ---------------------------------------------------------------------------- + Moves the worksheet to the specified index in the workbook. + + @param AValue New index of the sheet in the workbook. If less than 0 the + worksheet will become the first, if greater than the + worksheet count it will become the last worksheet of the + workbook. +-------------------------------------------------------------------------------} +procedure TsWorksheet.SetIndex(AValue: Integer); +var + oldIndex: Integer; +begin + if AValue < 0 then + AValue := 0 + else + if AValue > TsWorkbook(FWorkbook).GetWorksheetCount then + Avalue := TsWorkbook(FWorkbook).GetWorksheetCount - 1; + oldIndex := GetIndex; + if oldIndex <> AValue then + TsWorkbook(FWorkbook).MoveSheet(oldIndex, Avalue); +end; + + {@@ ---------------------------------------------------------------------------- Calculates the optimum height of a given row. Depends on the font size of the individual cells in the row. Is converted to workbook units. @@ -10118,6 +10150,13 @@ begin end; end; +procedure TsWorkbook.MoveSheet(AFromIndex, AToIndex: Integer); +begin + FWorksheets.Move(AFromIndex, AToIndex); + if Assigned(FOnChangeWorksheet) then + FOnChangeWorksheet(Self, GetWorksheetByIndex(AToIndex)); +end; + {@@ ---------------------------------------------------------------------------- Writes the selected cells to a stream for usage in the clipboard. Transfer to the clipboard has do be done by the calling routine since