diff --git a/components/fpspreadsheet/fpsexport.pas b/components/fpspreadsheet/fpsexport.pas index 77414ef88..248e8dd8e 100644 --- a/components/fpspreadsheet/fpsexport.pas +++ b/components/fpspreadsheet/fpsexport.pas @@ -11,7 +11,7 @@ unit fpsexport; interface uses - Classes, SysUtils, db, fpsallformats, fpspreadsheet, fpdbexport; + Classes, SysUtils, db, fpsallformats, fpspreadsheet, fpsstrings, fpdbexport; Type @@ -24,10 +24,10 @@ Type property DestField : TField read FDestField; end; - { TFPSExportFormatSettings } - TExportFormat = (efXLS {BIFF8},efXLSX,efODS,efWikiTable); - + + { TFPSExportFormatSettings } + {@@ Specific export settings that apply to spreadsheet export} TFPSExportFormatSettings = class(TExportFormatSettings) private FExportFormat: TExportFormat; @@ -36,9 +36,10 @@ Type procedure Assign(Source : TPersistent); override; procedure InitSettings; override; published - // File format for the export + {@@ File format for the export } property ExportFormat: TExportFormat read FExportFormat write FExportFormat; - // Write the field list to the first row of the spreadsheet or not + {@@ Flag that determines whethe to write the field list to the first + row of the spreadsheet } property HeaderRow: boolean read FHeaderRow write FHeaderRow default false; end; @@ -63,31 +64,39 @@ Type property FileName: String read FFileName write FFileName; property Workbook: TsWorkbook read FSpreadsheet; public + {@@ Settings for the export. Note: a lot of generic settings are preent + that are not relevant for this export, e.g. decimal point settings } property FormatSettings: TFPSExportFormatSettings read GetSettings write SetSettings; end; + { TFPSExport } + {@@ Export class allowing dataset export to spreadsheet(like) file } TFPSExport = Class(TCustomFPSExport) published + {@@ Destination filename } property FileName; + {@@ Source dataset } property Dataset; + {@@ Fields to be exported } property ExportFields; + {@@ Export starting from current record or beginning. } property FromCurrent; + {@@ Flag indicating whether to return to current dataset position after export } property RestorePosition; property FormatSettings; + {@@ Procedure to run when exporting a row } property OnExportRow; end; - + +{@@ Register export format with fpsdbexport so it can be dynamically used } procedure RegisterFPSExportFormat; +{@@ Remove registration. Opposite to RegisterFPSExportFormat } procedure UnRegisterFPSExportFormat; const SFPSExport = 'xls'; - SPFSExtension = '.xls'; //todo: add others? + SPFSExtension = '.xls'; //Add others? Doesn't seem to fit other dxport units -resourcestring - SFPSDescription = 'Spreadsheet files'; - SFPSFileMustExist = 'Empty file names are not allowed.'; - implementation @@ -118,15 +127,12 @@ procedure TCustomFPSExport.DoBeforeExecute; begin Inherited; if FFileName='' then - Raise EDataExporter.Create(SFPSFileMustExist); + Raise EDataExporter.Create(rsExportFileIsRequired); FSpreadsheet:=TsWorkbook.Create; // For extra performance. Note that virtual mode is not an option // due to the data export determining flow of the program. FSpreadsheet.Options:=FSpreadsheet.Options+[boBufStream]; FSheet:=FSpreadsheet.AddWorksheet('1'); - // todo: look into restoring position after done - if not(Dataset.IsUniDirectional) then - Dataset.First; // needed to export all items FRow:=0; end; @@ -205,7 +211,7 @@ end; procedure RegisterFPSExportFormat; begin - ExportFormats.RegisterExportFormat(SFPSExport,SFPSDescription,SPFSExtension,TFPSExport); + ExportFormats.RegisterExportFormat(SFPSExport,rsFPSExportDescription,SPFSExtension,TFPSExport); end; procedure UnRegisterFPSExportFormat; diff --git a/components/fpspreadsheet/fpsexportreg.pas b/components/fpspreadsheet/fpsexportreg.pas new file mode 100644 index 000000000..f6948becb --- /dev/null +++ b/components/fpspreadsheet/fpsexportreg.pas @@ -0,0 +1,34 @@ +{ + Registration for fpsexport into the Lazarus component palette + This requires package lazdbexport for property editors etc +} +unit fpsexportreg; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LazarusPackageIntf, lresources, fpdataexporter; + +Procedure Register; + +implementation + +//todo: add component graphic +//{$R fpsexportimg.res} + +uses + fpsexport; + +Procedure Register; + +begin + RegisterComponents('Data Export',[TFPSExport]); +end; + +initialization + RegisterPackage('Data Export', @Register ); + +end. + diff --git a/components/fpspreadsheet/fpsstrings.pas b/components/fpspreadsheet/fpsstrings.pas index c746c6f70..37c124481 100644 --- a/components/fpspreadsheet/fpsstrings.pas +++ b/components/fpspreadsheet/fpsstrings.pas @@ -10,6 +10,8 @@ unit fpsStrings; interface resourcestring + rsExportFileIsRequired = 'Export file name is required'; + rsFPSExportDescription = 'Spreadsheet file'; rsUnsupportedReadFormat = 'Tried to read a spreadsheet using an unsupported format'; rsUnsupportedWriteFormat = 'Tried to write a spreadsheet using an unsupported format'; rsNoValidSpreadsheetFile = '"%s" is not a valid spreadsheet file'; diff --git a/components/fpspreadsheet/laz_fpspreadsheetexport_visual.lpk b/components/fpspreadsheet/laz_fpspreadsheetexport_visual.lpk new file mode 100644 index 000000000..3698f2f56 --- /dev/null +++ b/components/fpspreadsheet/laz_fpspreadsheetexport_visual.lpk @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/fpspreadsheet/tests/dbexporttests.pas b/components/fpspreadsheet/tests/dbexporttests.pas index caf7d4d43..9bc08f895 100644 --- a/components/fpspreadsheet/tests/dbexporttests.pas +++ b/components/fpspreadsheet/tests/dbexporttests.pas @@ -121,7 +121,6 @@ var TempFile: string; TheDate: TDateTime; begin - FDataset.First; Exp := TFPSExport.Create(nil); ExpSettings := TFPSExportFormatSettings.Create(true); try @@ -129,6 +128,7 @@ begin ExpSettings.HeaderRow := true; Exp.FormatSettings := ExpSettings; Exp.Dataset:=FDataset; + Exp.FromCurrent:=false; //export from beginning TempFile := NewTempFile; Exp.FileName := TempFile; CheckEquals(length(ExportTestData),Exp.Execute,'Number of exported records');