fpspreadsheet: Prepare ooxml chart reader/writer infrastructure.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9109 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2023-12-28 23:13:01 +00:00
parent a01c5d81ef
commit c065075c5f
5 changed files with 136 additions and 16 deletions

View File

@ -33,7 +33,7 @@
This package is all you need if you don't want graphical components (such as grids and charts)."/>
<License Value="LGPL with static linking exception. This is the same license as is used in the LCL (Lazarus Component Library)."/>
<Version Major="1" Minor="17"/>
<Files Count="59">
<Files Count="60">
<Item1>
<Filename Value="source\fps.inc"/>
<Type Value="Include"/>
@ -309,6 +309,10 @@ This package is all you need if you don&apos;t want graphical components (such a
<Filename Value="source\common\fpsopendocumentchart.pas"/>
<UnitName Value="fpsopendocumentchart"/>
</Item59>
<Item60>
<Filename Value="source\common\xlsxooxmlchart.pas"/>
<UnitName Value="xlsxooxmlchart"/>
</Item60>
</Files>
<CompatibilityMode Value="True"/>
<i18n>

View File

@ -41,16 +41,10 @@ uses
Classes, SysUtils,
laz2_xmlread, laz2_DOM,
avglvltree, math, dateutils, contnrs,
{$IF FPC_FULLVERSION >= 20701}
zipper,
{$ELSE}
fpszipper,
{$ENDIF}
{$IFDEF FPS_PATCHED_ZIPPER} fpszipper, {$ELSE} zipper, {$ENDIF}
fpstypes, fpsReaderWriter, fpsUtils, fpsHeaderFooterParser,
fpsNumFormat, fpsXMLCommon,
{$IFDEF FPS_CHARTS}
fpsChart,
{$ENDIF}
{$IFDEF FPS_CHARTS} fpsChart, {$ENDIF}
fpsPagelayout;
type

View File

@ -9,10 +9,10 @@ interface
uses
Classes, SysUtils, StrUtils, Contnrs, FPImage,
{$IF FPC_FULLVERSION >= 20701}
zipper,
{$ELSE}
{$IFDEF FPS_PATCHED_ZIPPER}
fpszipper,
{$ELSE}
zipper,
{$ENDIF}
laz2_xmlread, laz2_DOM,
fpsTypes, fpSpreadsheet, fpsChart, fpsUtils, fpsNumFormat,

View File

@ -37,13 +37,16 @@ interface
uses
Classes, SysUtils,
laz2_xmlread, laz2_DOM, avglvltree,
{$IFDEF FPS_PATCHED_ZIPPER}
{$ifdef FPS_PATCHED_ZIPPER}
fpszipper,
{$ELSE}
{$else}
zipper,
{$ENDIF}
{$endif}
fpsTypes, fpsUtils, fpsReaderWriter, fpsNumFormat, fpsPalette,
fpsConditionalFormat,
{$ifdef FPS_CHARTS}
fpsChart,
{$ENDIF}
fpsxmlcommon, xlsCommon;
type
@ -52,6 +55,9 @@ type
TsSpreadOOXMLReader = class(TsSpreadXMLReader)
private
{$ifdef FPS_CHARTS}
FChartReader: TsBasicSpreadChartReader;
{$endif}
FDateMode: TDateMode;
FPointSeparatorSettings: TFormatSettings;
FSharedStrings: TStringList;
@ -155,6 +161,9 @@ type
TsSpreadOOXMLWriter = class(TsCustomSpreadWriter)
private
{$IFDEF FPS_CHARTS}
FChartWriter: TsBasicSpreadChartWriter;
{$ENDIF}
FFirstNumFormatIndexInFile: Integer;
vmlDrawingCounter: Integer;
protected
@ -283,6 +292,7 @@ type
public
constructor Create(AWorkbook: TsBasicWorkbook); override;
destructor Destroy; override;
{ General writing methods }
procedure WriteStringToFile(AFileName, AString: string);
procedure WriteToStream(AStream: TStream; AParams: TsStreamParams = []); override;
@ -308,7 +318,9 @@ implementation
uses
variants, strutils, dateutils, math, lazutf8, LazFileUtils, uriparser, typinfo,
{%H-}fpsPatches, fpSpreadsheet, fpsCrypto, fpsExprParser,
fpsStrings, fpsStreams, fpsClasses, fpsImages, fpsChart;
fpsStrings, fpsStreams, fpsClasses,
{$ifdef FPS_CHARTS}xlsxooxmlChart,{$endif}
fpsImages;
const
{ OOXML general XML constants }
@ -830,6 +842,11 @@ end;
constructor TsSpreadOOXMLReader.Create(AWorkbook: TsBasicWorkbook);
begin
inherited Create(AWorkbook);
{$ifdef FPS_CHARTS}
FChartReader := TsSpreadOOXMLChartReader.Create(self);
{$endif}
FDateMode := XlsxSettings.DateMode;
FSharedStrings := TStringList.Create;
@ -898,6 +915,10 @@ begin
FPalette.Free;
{$ifdef FPS_CHARTS}
FChartReader.Free;
{$endif}
inherited Destroy;
end;
@ -4629,6 +4650,10 @@ constructor TsSpreadOOXMLWriter.Create(AWorkbook: TsBasicWorkbook);
begin
inherited Create(AWorkbook);
{$ifdef FPS_CHARTS}
FChartWriter := TsSpreadOOXMLChartWriter.Create(self);
{$endif}
// Initial base date in case it won't be set otherwise.
// Use 1900 to get a bit more range between 1900..1904.
FDateMode := XlsxSettings.DateMode;
@ -4641,6 +4666,15 @@ begin
end;
destructor TsSpreadOOXMLWriter.Destroy;
begin
{$ifdef FPS_CHARTS}
FChartWriter.Free;
{$endif}
inherited;
end;
{@@ ----------------------------------------------------------------------------
Looks for the combination of border attributes of the given format record in
the FBorderList and returns its index.

View File

@ -0,0 +1,88 @@
unit xlsxooxmlChart;
{$mode objfpc}{$H+}
{$include ..\fps.inc}
interface
{$ifdef FPS_CHARTS}
uses
Classes, SysUtils, StrUtils, Contnrs, FPImage,
{$ifdef FPS_PATCHED_ZIPPER}fpszipper,{$else}zipper,{$endif}
laz2_xmlread, laz2_DOM,
fpsTypes, fpSpreadsheet, fpsChart, fpsUtils, fpsNumFormat,
fpsReaderWriter, fpsXMLCommon;
type
{ TsSpreadOOXMLChartReader }
TsSpreadOOXMLChartReader = class(TsBasicSpreadChartReader)
private
FPointSeparatorSettings: TFormatSettings;
protected
public
constructor Create(AReader: TsBasicSpreadReader); override;
destructor Destroy; override;
end;
TsSpreadOOXMLChartWriter = class(TsBasicSpreadChartWriter)
private
FPointSeparatorSettings: TFormatSettings;
protected
public
constructor Create(AWriter: TsBasicSpreadWriter); override;
destructor Destroy; override;
end;
{$ENDIF}
implementation
{$IFDEF FPS_CHARTS}
uses
xlsxooxml;
{ TsSpreadOOXMLChartReader }
constructor TsSpreadOOXMLChartReader.Create(AReader: TsBasicSpreadReader);
begin
inherited Create(AReader);
FPointSeparatorSettings := SysUtils.DefaultFormatSettings;
FPointSeparatorSettings.DecimalSeparator:='.';
end;
destructor TsSpreadOOXMLChartReader.Destroy;
begin
inherited;
end;
{ TsSpreadOOXMLChartWriter }
constructor TsSpreadOOXMLChartWriter.Create(AWriter: TsBasicSpreadWriter);
begin
inherited Create(AWriter);
FPointSeparatorSettings := SysUtils.DefaultFormatSettings;
FPointSeparatorSettings.DecimalSeparator:='.';
end;
destructor TsSpreadOOXMLChartWriter.Destroy;
begin
inherited;
end;
{$ENDIF}
end.