diff --git a/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi b/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi index 749b9c68c..8a87e8e29 100644 --- a/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi +++ b/components/fpspreadsheet/examples/fpsgrid/fpsgrid.lpi @@ -46,7 +46,7 @@ - + @@ -60,18 +60,18 @@ - + - + - - - + + + @@ -79,12 +79,9 @@ - - - - - - + + + @@ -161,10 +158,12 @@ + - - - + + + + @@ -176,10 +175,12 @@ + - - + + + @@ -192,11 +193,14 @@ - + - - - + + + + + + @@ -217,10 +221,12 @@ + - - - + + + + @@ -249,124 +255,124 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index b6c807baf..46261a56e 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -57,14 +57,15 @@ type function GetAttrValue(ANode : TDOMNode; AAttrName : string) : string; // Figures out what the base year for times in this file (dates are unambiguous) procedure ReadDateMode(SpreadSheetNode: TDOMNode); - public - { General reading methods } - procedure ReadFromFile(AFileName: string; AData: TsWorkbook); override; + protected { Record writing methods } procedure ReadFormula(ARow : Word; ACol : Word; ACellNode: TDOMNode); procedure ReadLabel(ARow : Word; ACol : Word; ACellNode: TDOMNode); procedure ReadNumber(ARow : Word; ACol : Word; ACellNode: TDOMNode); procedure ReadDate(ARow : Word; ACol : Word; ACellNode: TDOMNode); + public + { General reading methods } + procedure ReadFromFile(AFileName: string; AData: TsWorkbook); override; end; { TsSpreadOpenDocWriter } @@ -88,6 +89,11 @@ type procedure WriteWorksheet(CurSheet: TsWorksheet); // Routines to write parts of those files function WriteStylesXMLAsString: string; + { Record writing methods } + procedure WriteFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsFormula; ACell: PCell); override; + procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); override; + procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); override; + procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); override; public constructor Create; override; { General writing methods } @@ -95,11 +101,6 @@ type procedure WriteToFile(const AFileName: string; AData: TsWorkbook; const AOverwriteExisting: Boolean = False); override; procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; - { Record writing methods } - procedure WriteFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsFormula; ACell: PCell); override; - procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); override; - procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); override; - procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); override; end; implementation diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index 99ac07219..f156a3516 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -368,16 +368,16 @@ type protected FWorkbook: TsWorkbook; FWorksheet: TsWorksheet; + { Record reading methods } + procedure ReadFormula(AStream: TStream); virtual; abstract; + procedure ReadLabel(AStream: TStream); virtual; abstract; + procedure ReadNumber(AStream: TStream); virtual; abstract; public constructor Create; virtual; // To allow descendents to override it { General writing methods } procedure ReadFromFile(AFileName: string; AData: TsWorkbook); virtual; procedure ReadFromStream(AStream: TStream; AData: TsWorkbook); virtual; procedure ReadFromStrings(AStrings: TStrings; AData: TsWorkbook); virtual; - { Record reading methods } - procedure ReadFormula(AStream: TStream); virtual; abstract; - procedure ReadLabel(AStream: TStream); virtual; abstract; - procedure ReadNumber(AStream: TStream); virtual; abstract; end; {@@ TsSpreadWriter class reference type } @@ -389,6 +389,23 @@ type { TsCustomSpreadWriter } TsCustomSpreadWriter = class + protected + { Helper routines } + procedure AddDefaultFormats(); virtual; + function ExpandFormula(AFormula: TsFormula): TsExpandedFormula; + function FindFormattingInList(AFormat: PCell): Integer; + function FPSColorToHexString(AColor: TsColor; ARGBColor: TFPColor): string; + procedure ListAllFormattingStylesCallback(ACell: PCell; AStream: TStream); + procedure ListAllFormattingStyles(AData: TsWorkbook); + { Helpers for writing } + procedure WriteCellCallback(ACell: PCell; AStream: TStream); + procedure WriteCellsToStream(AStream: TStream; ACells: TAVLTree); + { Record writing methods } + procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); virtual; abstract; + procedure WriteFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsFormula; ACell: PCell); virtual; + procedure WriteRPNFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsRPNFormula; ACell: PCell); virtual; + procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); virtual; abstract; + procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); virtual; abstract; public {@@ An array with cells which are models for the used styles @@ -397,27 +414,12 @@ type FFormattingStyles: array of TCell; NextXFIndex: Integer; // Indicates which should be the next XF (Style) Index when filling the styles list constructor Create; virtual; // To allow descendents to override it - { Helper routines } - function FindFormattingInList(AFormat: PCell): Integer; - procedure AddDefaultFormats(); virtual; - procedure ListAllFormattingStylesCallback(ACell: PCell; AStream: TStream); - procedure ListAllFormattingStyles(AData: TsWorkbook); - function ExpandFormula(AFormula: TsFormula): TsExpandedFormula; - function FPSColorToHexString(AColor: TsColor; ARGBColor: TFPColor): string; { General writing methods } - procedure WriteCellCallback(ACell: PCell; AStream: TStream); - procedure WriteCellsToStream(AStream: TStream; ACells: TAVLTree); procedure IterateThroughCells(AStream: TStream; ACells: TAVLTree; ACallback: TCellsCallback); procedure WriteToFile(const AFileName: string; AData: TsWorkbook; const AOverwriteExisting: Boolean = False); virtual; procedure WriteToStream(AStream: TStream; AData: TsWorkbook); virtual; procedure WriteToStrings(AStrings: TStrings; AData: TsWorkbook); virtual; - { Record writing methods } - procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); virtual; abstract; - procedure WriteFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsFormula; ACell: PCell); virtual; - procedure WriteRPNFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsRPNFormula; ACell: PCell); virtual; - procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); virtual; abstract; - procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); virtual; abstract; end; {@@ List of registered formats } diff --git a/components/fpspreadsheet/xlsbiff2.pas b/components/fpspreadsheet/xlsbiff2.pas index a2fb680b2..5fbddf7b0 100755 --- a/components/fpspreadsheet/xlsbiff2.pas +++ b/components/fpspreadsheet/xlsbiff2.pas @@ -46,14 +46,15 @@ type RecordSize: Word; FWorksheet: TsWorksheet; procedure ReadRowInfo(AStream: TStream); - public - { General reading methods } - procedure ReadFromStream(AStream: TStream; AData: TsWorkbook); override; + protected { Record writing methods } procedure ReadFormula(AStream: TStream); override; procedure ReadLabel(AStream: TStream); override; procedure ReadNumber(AStream: TStream); override; procedure ReadInteger(AStream: TStream); + public + { General reading methods } + procedure ReadFromStream(AStream: TStream; AData: TsWorkbook); override; end; { TsSpreadBIFF2Writer } @@ -61,9 +62,6 @@ type TsSpreadBIFF2Writer = class(TsSpreadBIFFWriter) private procedure WriteCellFormatting(AStream: TStream; ACell: PCell); - public - { General writing methods } - procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; { Record writing methods } procedure WriteBOF(AStream: TStream); procedure WriteEOF(AStream: TStream); @@ -71,6 +69,9 @@ type procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); override; procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); override; procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); override; + public + { General writing methods } + procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; end; implementation diff --git a/components/fpspreadsheet/xlsbiff5.pas b/components/fpspreadsheet/xlsbiff5.pas index 9b6986c16..1c53a5ef3 100755 --- a/components/fpspreadsheet/xlsbiff5.pas +++ b/components/fpspreadsheet/xlsbiff5.pas @@ -81,24 +81,25 @@ type FWorksheet: TsWorksheet; FWorksheetNames: TStringList; FCurrentWorksheet: Integer; + protected + { Helpers } + function DecodeRKValue(const ARK: DWORD): Double; + { Record writing methods } + procedure ReadFormula(AStream: TStream); override; + procedure ReadFormulaExcel(AStream: TStream); + procedure ReadLabel(AStream: TStream); override; + procedure ReadMulRKValues(AStream: TStream); + procedure ReadNumber(AStream: TStream); override; procedure ReadWorkbookGlobals(AStream: TStream; AData: TsWorkbook); procedure ReadWorksheet(AStream: TStream; AData: TsWorkbook); procedure ReadBoundsheet(AStream: TStream); procedure ReadRichString(AStream: TStream); procedure ReadRKValue(AStream: TStream); - procedure ReadMulRKValues(AStream: TStream); - procedure ReadFormulaExcel(AStream: TStream); - protected - function DecodeRKValue(const ARK: DWORD): Double; procedure ReadRowColXF(const AStream: TStream; out ARow,ACol,AXF: WORD); virtual; public { General reading methods } procedure ReadFromFile(AFileName: string; AData: TsWorkbook); override; procedure ReadFromStream(AStream: TStream; AData: TsWorkbook); override; - { Record writing methods } - procedure ReadFormula(AStream: TStream); override; - procedure ReadLabel(AStream: TStream); override; - procedure ReadNumber(AStream: TStream); override; end; { TsSpreadBIFF5Writer } @@ -106,13 +107,7 @@ type TsSpreadBIFF5Writer = class(TsSpreadBIFFWriter) private WorkBookEncoding: TsEncoding; - public -// constructor Create; -// destructor Destroy; override; - { General writing methods } - procedure WriteToFile(const AFileName: string; AData: TsWorkbook; - const AOverwriteExisting: Boolean = False); override; - procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; + protected { Record writing methods } procedure WriteBOF(AStream: TStream; ADataType: Word); function WriteBoundsheet(AStream: TStream; ASheetName: string): Int64; @@ -129,6 +124,11 @@ type procedure WriteWindow1(AStream: TStream); procedure WriteWindow2(AStream: TStream; ASheetSelected: Boolean); procedure WriteXF(AStream: TStream; AFontIndex: Word; AXF_TYPE_PROT: Byte); + public + { General writing methods } + procedure WriteToFile(const AFileName: string; AData: TsWorkbook; + const AOverwriteExisting: Boolean = False); override; + procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; end; implementation diff --git a/components/fpspreadsheet/xlsbiff8.pas b/components/fpspreadsheet/xlsbiff8.pas index 3e3224be4..634aeaef9 100755 --- a/components/fpspreadsheet/xlsbiff8.pas +++ b/components/fpspreadsheet/xlsbiff8.pas @@ -159,23 +159,11 @@ type procedure WriteXFFieldsForFormattingStyles(AStream: TStream); protected procedure AddDefaultFormats(); override; - procedure WriteColInfo(AStream: TStream; ASheet: TsWorksheet; ACol: PCol); - procedure WriteXF(AStream: TStream; AFontIndex: Word; - AFormatIndex: Word; AXF_TYPE_PROT, ATextRotation: Byte; ABorders: TsCellBorders; - AHorAlignment: TsHorAlignment = haDefault; AVertAlignment: TsVertAlignment = vaDefault; - AWordWrap: Boolean = false; AddBackground: Boolean = false; - ABackgroundColor: TsColor = scSilver); - public -// constructor Create; -// destructor Destroy; override; - { General writing methods } - procedure WriteToFile(const AFileName: string; AData: TsWorkbook; - const AOverwriteExisting: Boolean = False); override; - procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; { Record writing methods } procedure WriteBOF(AStream: TStream; ADataType: Word); function WriteBoundsheet(AStream: TStream; ASheetName: string): Int64; // procedure WriteCodepage in xlscommon; Workbook Globals record + procedure WriteColInfo(AStream: TStream; ASheet: TsWorksheet; ACol: PCol); procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); override; // procedure WriteDateMode in xlscommon; Workbook Globals record procedure WriteDimensions(AStream: TStream; AWorksheet: TsWorksheet); @@ -190,6 +178,18 @@ type procedure WriteStyle(AStream: TStream); procedure WriteWindow1(AStream: TStream); procedure WriteWindow2(AStream: TStream; ASheetSelected: Boolean); + procedure WriteXF(AStream: TStream; AFontIndex: Word; + AFormatIndex: Word; AXF_TYPE_PROT, ATextRotation: Byte; ABorders: TsCellBorders; + AHorAlignment: TsHorAlignment = haDefault; AVertAlignment: TsVertAlignment = vaDefault; + AWordWrap: Boolean = false; AddBackground: Boolean = false; + ABackgroundColor: TsColor = scSilver); + public +// constructor Create; +// destructor Destroy; override; + { General writing methods } + procedure WriteToFile(const AFileName: string; AData: TsWorkbook; + const AOverwriteExisting: Boolean = False); override; + procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; end; implementation diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas index 835a871fe..ba38f1885 100755 --- a/components/fpspreadsheet/xlsxooxml.pas +++ b/components/fpspreadsheet/xlsxooxml.pas @@ -63,6 +63,11 @@ type procedure WriteContent(AData: TsWorkbook); procedure WriteWorksheet(CurSheet: TsWorksheet); function GetStyleIndex(ACell: PCell): Cardinal; + { Record writing methods } + //todo: add WriteDate + procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); override; + procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); override; + procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); override; public constructor Create; override; destructor Destroy; override; @@ -71,11 +76,6 @@ type procedure WriteToFile(const AFileName: string; AData: TsWorkbook; const AOverwriteExisting: Boolean = False); override; procedure WriteToStream(AStream: TStream; AData: TsWorkbook); override; - { Record writing methods } - //todo: add WriteDate - procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); override; - procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); override; - procedure WriteDateTime(AStream: TStream; const ARow, ACol: Cardinal; const AValue: TDateTime; ACell: PCell); override; end; implementation