fpspreadsheet: Add property Worksheet.Index.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7005 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2019-06-09 23:15:10 +00:00
parent 4a60d9eeda
commit 21b927cc27
3 changed files with 81 additions and 3 deletions

View File

@ -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

View File

@ -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.

View File

@ -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