fpspreadsheet: Add conditional define FPS_CHARTS (active by default) to compile the lib with and without chart support.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9108 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
ccea3cb07d
commit
4f0e2e8b83
@ -26,14 +26,16 @@ unit fpsOpenDocument;
|
|||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
{$include ..\fps.inc}
|
{$include ..\fps.inc}
|
||||||
|
|
||||||
{$define DEBUG_CHART_STYLES}
|
{$IFDEF FPS_CHARTS}
|
||||||
|
{$define DEBUG_CHART_STYLES}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined}
|
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
{$IFDEF DEBUG_CHART_STYLES}
|
{$IF DEFINED(DEBUG_CHART_STYLES) or DEFINED(FPSpreadDebug)}
|
||||||
LazLoggerBase,
|
LazLoggerBase,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Classes, SysUtils,
|
Classes, SysUtils,
|
||||||
@ -44,8 +46,12 @@ uses
|
|||||||
{$ELSE}
|
{$ELSE}
|
||||||
fpszipper,
|
fpszipper,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fpstypes, fpsReaderWriter, fpsutils, fpsHeaderFooterParser,
|
fpstypes, fpsReaderWriter, fpsUtils, fpsHeaderFooterParser,
|
||||||
fpsNumFormat, fpsxmlcommon, fpsPagelayout, fpsChart;
|
fpsNumFormat, fpsXMLCommon,
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
fpsChart,
|
||||||
|
{$ENDIF}
|
||||||
|
fpsPagelayout;
|
||||||
|
|
||||||
type
|
type
|
||||||
TDateModeODS=(
|
TDateModeODS=(
|
||||||
@ -124,14 +130,18 @@ type
|
|||||||
FRepeatedRows: TsRowColRange;
|
FRepeatedRows: TsRowColRange;
|
||||||
FManifestFileEntries: TFPList;
|
FManifestFileEntries: TFPList;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartReader: TsBasicSpreadChartReader;
|
FChartReader: TsBasicSpreadChartReader;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
procedure ApplyColData;
|
procedure ApplyColData;
|
||||||
procedure ApplyStyleToCell(ACell: PCell; AStyleIndex: Integer);
|
procedure ApplyStyleToCell(ACell: PCell; AStyleIndex: Integer);
|
||||||
function ApplyStyleToCell(ACell: PCell; AStyleName: String): Boolean;
|
function ApplyStyleToCell(ACell: PCell; AStyleName: String): Boolean;
|
||||||
function ApplyTableStyle(ASheet: TsBasicWorksheet;
|
function ApplyTableStyle(ASheet: TsBasicWorksheet;
|
||||||
AStyleName: String): Boolean;
|
AStyleName: String): Boolean;
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
function CollectChartFilesFromManifest: Boolean;
|
function CollectChartFilesFromManifest: Boolean;
|
||||||
|
{$ENDIF}
|
||||||
function ExtractBoolFromNode(ANode: TDOMNode): Boolean;
|
function ExtractBoolFromNode(ANode: TDOMNode): Boolean;
|
||||||
function ExtractDateTimeFromNode(ANode: TDOMNode;
|
function ExtractDateTimeFromNode(ANode: TDOMNode;
|
||||||
ANumFormat: TsNumberFormat; const AFormatStr: String): TDateTime;
|
ANumFormat: TsNumberFormat; const AFormatStr: String): TDateTime;
|
||||||
@ -244,8 +254,9 @@ type
|
|||||||
FHeaderFooterFontList: TObjectList;
|
FHeaderFooterFontList: TObjectList;
|
||||||
FHasColFormats: Boolean;
|
FHasColFormats: Boolean;
|
||||||
FHasRowFormats: Boolean;
|
FHasRowFormats: Boolean;
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter: TsBasicSpreadChartWriter;
|
FChartWriter: TsBasicSpreadChartWriter;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
// Routines to write parts of files
|
// Routines to write parts of files
|
||||||
procedure WriteAutomaticStyles(AStream: TStream);
|
procedure WriteAutomaticStyles(AStream: TStream);
|
||||||
@ -372,13 +383,14 @@ var
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
{$IFDEF FPSpreadDebug}
|
|
||||||
LazLogger,
|
|
||||||
{$ENDIF}
|
|
||||||
StrUtils, Variants, LazFileUtils, URIParser, LazUTF8,
|
StrUtils, Variants, LazFileUtils, URIParser, LazUTF8,
|
||||||
{%H-}fpsPatches,
|
{%H-}fpsPatches,
|
||||||
fpsStrings, fpsStreams, fpsCrypto, fpsClasses, fpSpreadsheet,
|
fpsStrings, fpsStreams, fpsCrypto, fpsClasses, fpSpreadsheet,
|
||||||
fpsExprParser, fpsImages, fpsConditionalFormat, fpsOpenDocumentChart;
|
fpsExprParser, fpsImages,
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
fpsOpenDocumentChart,
|
||||||
|
{$ENDIF}
|
||||||
|
fpsConditionalFormat;
|
||||||
|
|
||||||
const
|
const
|
||||||
LE = LineEnding;
|
LE = LineEnding;
|
||||||
@ -391,10 +403,10 @@ const
|
|||||||
OPENDOC_PATH_SETTINGS = 'settings.xml';
|
OPENDOC_PATH_SETTINGS = 'settings.xml';
|
||||||
OPENDOC_PATH_STYLES = 'styles.xml';
|
OPENDOC_PATH_STYLES = 'styles.xml';
|
||||||
OPENDOC_PATH_MIMETYPE = 'mimetype';
|
OPENDOC_PATH_MIMETYPE = 'mimetype';
|
||||||
{%H-}OPENDOC_PATH_METAINF = 'META-INF/';
|
{%H-}OPENDOC_PATH_METAINF = 'META-INF/';
|
||||||
OPENDOC_PATH_METAINF_MANIFEST = 'META-INF/manifest.xml';
|
OPENDOC_PATH_METAINF_MANIFEST = 'META-INF/manifest.xml';
|
||||||
OPENDOC_PATH_CHART_CONTENT = 'Object %d/content.xml';
|
OPENDOC_PATH_CHART_CONTENT = 'Object %d/content.xml';
|
||||||
OPENDOC_PATH_CHART_STYLES = 'Object %d/styles.xml';
|
OPENDOC_PATH_CHART_STYLES = 'Object %d/styles.xml';
|
||||||
|
|
||||||
{ OpenDocument schemas constants }
|
{ OpenDocument schemas constants }
|
||||||
SCHEMAS_XMLNS_OFFICE = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0';
|
SCHEMAS_XMLNS_OFFICE = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0';
|
||||||
@ -1216,7 +1228,9 @@ constructor TsSpreadOpenDocReader.Create(AWorkbook: TsBasicWorkbook);
|
|||||||
begin
|
begin
|
||||||
inherited Create(AWorkbook);
|
inherited Create(AWorkbook);
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartReader := TsSpreadOpenDocChartReader.Create(self);
|
FChartReader := TsSpreadOpenDocChartReader.Create(self);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
InitOpenDocLimitations(FLimitations);
|
InitOpenDocLimitations(FLimitations);
|
||||||
|
|
||||||
@ -1283,7 +1297,9 @@ begin
|
|||||||
|
|
||||||
FHeaderFooterFontList.Free;
|
FHeaderFooterFontList.Free;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartReader.Free;
|
FChartReader.Free;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
@ -1485,6 +1501,7 @@ begin
|
|||||||
Result := true;
|
Result := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
{ Searches the manifest file entries for the names of files needed by charts.
|
{ Searches the manifest file entries for the names of files needed by charts.
|
||||||
Returns false if there no charts are found.
|
Returns false if there no charts are found.
|
||||||
The found filenames are passed over to the chart reader for further processing. }
|
The found filenames are passed over to the chart reader for further processing. }
|
||||||
@ -1532,6 +1549,7 @@ begin
|
|||||||
FileList.Free;
|
FileList.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
{ Extracts a boolean value from a "boolean" cell node.
|
{ Extracts a boolean value from a "boolean" cell node.
|
||||||
Is called from ReadBoolean }
|
Is called from ReadBoolean }
|
||||||
@ -3178,9 +3196,11 @@ begin
|
|||||||
XMLStream.Free;
|
XMLStream.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
// Reading of charts
|
// Reading of charts
|
||||||
if CollectChartFilesFromManifest then
|
if CollectChartFilesFromManifest then
|
||||||
FChartReader.ReadCharts(AStream);
|
FChartReader.ReadCharts(AStream);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
// Active sheet
|
// Active sheet
|
||||||
if FActiveSheet <> '' then
|
if FActiveSheet <> '' then
|
||||||
@ -4996,8 +5016,10 @@ procedure TsSpreadOpenDocReader.ReadShape(ANode: TDOMNode;
|
|||||||
href: String;
|
href: String;
|
||||||
img: PsImage;
|
img: PsImage;
|
||||||
entry: TsOpenDocManifestFileEntry;
|
entry: TsOpenDocManifestFileEntry;
|
||||||
chart: TsChart;
|
|
||||||
handled: Boolean;
|
handled: Boolean;
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
chart: TsChart;
|
||||||
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
nodeName := ANode.NodeName;
|
nodeName := ANode.NodeName;
|
||||||
x := PtsToMM(HTMLLengthStrToPts(GetAttrValue(ANode, 'svg:x')));
|
x := PtsToMM(HTMLLengthStrToPts(GetAttrValue(ANode, 'svg:x')));
|
||||||
@ -5011,6 +5033,7 @@ procedure TsSpreadOpenDocReader.ReadShape(ANode: TDOMNode;
|
|||||||
href := GetAttrValue(childNode, 'xlink:href');
|
href := GetAttrValue(childNode, 'xlink:href');
|
||||||
if href <> '' then
|
if href <> '' then
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
if nodeName = 'draw:object' then
|
if nodeName = 'draw:object' then
|
||||||
begin
|
begin
|
||||||
// Is it a chart?
|
// Is it a chart?
|
||||||
@ -5032,6 +5055,7 @@ procedure TsSpreadOpenDocReader.ReadShape(ANode: TDOMNode;
|
|||||||
Continue;
|
Continue;
|
||||||
end;
|
end;
|
||||||
end else
|
end else
|
||||||
|
{$ENDIF}
|
||||||
if nodeName = 'draw:image' then
|
if nodeName = 'draw:image' then
|
||||||
begin
|
begin
|
||||||
// It is an embedded image.
|
// It is an embedded image.
|
||||||
@ -5806,14 +5830,18 @@ begin
|
|||||||
FSContent := CreateTempStream(FWorkbook, 'fpsC');
|
FSContent := CreateTempStream(FWorkbook, 'fpsC');
|
||||||
FSMimeType := CreateTempStream(FWorkbook, 'fpsMT');
|
FSMimeType := CreateTempStream(FWorkbook, 'fpsMT');
|
||||||
FSMetaInfManifest := CreateTempStream(FWorkbook, 'fpsMIM');
|
FSMetaInfManifest := CreateTempStream(FWorkbook, 'fpsMIM');
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter.CreateStreams;
|
FChartWriter.CreateStreams;
|
||||||
|
{$ENDIF}
|
||||||
// FSSheets will be created when needed.
|
// FSSheets will be created when needed.
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Destroys the temporary streams that were created by the writer }
|
{ Destroys the temporary streams that were created by the writer }
|
||||||
procedure TsSpreadOpenDocWriter.DestroyStreams;
|
procedure TsSpreadOpenDocWriter.DestroyStreams;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter.DestroyStreams;
|
FChartWriter.DestroyStreams;
|
||||||
|
{$ENDIF}
|
||||||
DestroyTempStream(FSMeta);
|
DestroyTempStream(FSMeta);
|
||||||
DestroyTempStream(FSSettings);
|
DestroyTempStream(FSSettings);
|
||||||
DestroyTempStream(FSStyles);
|
DestroyTempStream(FSStyles);
|
||||||
@ -5918,7 +5946,9 @@ begin
|
|||||||
WriteSettings();
|
WriteSettings();
|
||||||
WriteStyles();
|
WriteStyles();
|
||||||
WriteContent;
|
WriteContent;
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter.WriteCharts;
|
FChartWriter.WriteCharts;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
{ Now compress the files }
|
{ Now compress the files }
|
||||||
FZip := TZipper.Create;
|
FZip := TZipper.Create;
|
||||||
@ -5931,7 +5961,9 @@ begin
|
|||||||
FZip.Entries.AddFileEntry(FSMimetype, OPENDOC_PATH_MIMETYPE);
|
FZip.Entries.AddFileEntry(FSMimetype, OPENDOC_PATH_MIMETYPE);
|
||||||
FZip.Entries.AddFileEntry(FSMetaInfManifest, OPENDOC_PATH_METAINF_MANIFEST);
|
FZip.Entries.AddFileEntry(FSMetaInfManifest, OPENDOC_PATH_METAINF_MANIFEST);
|
||||||
ZipPictures(FZip);
|
ZipPictures(FZip);
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
TsSpreadOpenDocChartWriter(FChartWriter).AddChartsToZip(FZip);
|
TsSpreadOpenDocChartWriter(FChartWriter).AddChartsToZip(FZip);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
ResetStreams;
|
ResetStreams;
|
||||||
|
|
||||||
@ -6128,7 +6160,9 @@ begin
|
|||||||
FSContent.Position := 0;
|
FSContent.Position := 0;
|
||||||
FSMimeType.Position := 0;
|
FSMimeType.Position := 0;
|
||||||
FSMetaInfManifest.Position := 0;
|
FSMetaInfManifest.Position := 0;
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter.ResetStreams;
|
FChartWriter.ResetStreams;
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Writes the node "office:automatic-styles". Although this node occurs in both
|
{ Writes the node "office:automatic-styles". Although this node occurs in both
|
||||||
@ -6237,7 +6271,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
TsSpreadOpenDocChartWriter(FChartWriter).AddToMetaInfManifest(FSMetaInfManifest);
|
TsSpreadOpenDocChartWriter(FChartWriter).AddToMetaInfManifest(FSMetaInfManifest);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
AppendToStream(FSMetaInfManifest,
|
AppendToStream(FSMetaInfManifest,
|
||||||
'</manifest:manifest>');
|
'</manifest:manifest>');
|
||||||
@ -7153,6 +7189,7 @@ end;
|
|||||||
|
|
||||||
procedure TsSpreadOpenDocWriter.WriteGraphicStyles(AStream: TStream);
|
procedure TsSpreadOpenDocWriter.WriteGraphicStyles(AStream: TStream);
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
if TsWorkbook(FWorkbook).GetChartCount = 0 then
|
if TsWorkbook(FWorkbook).GetChartCount = 0 then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
@ -7164,6 +7201,7 @@ begin
|
|||||||
'<style:paragraph-properties fo:text-align="center"/>' +
|
'<style:paragraph-properties fo:text-align="center"/>' +
|
||||||
'</style:style>'
|
'</style:style>'
|
||||||
);
|
);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOpenDocWriter.WriteMasterStyles(AStream: TStream);
|
procedure TsSpreadOpenDocWriter.WriteMasterStyles(AStream: TStream);
|
||||||
@ -7419,6 +7457,7 @@ end;
|
|||||||
|
|
||||||
procedure TsSpreadOpenDocWriter.WriteParagraphStyles(AStream: TStream);
|
procedure TsSpreadOpenDocWriter.WriteParagraphStyles(AStream: TStream);
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
if TsWorkbook(FWorkbook).GetChartCount = 0 then
|
if TsWorkbook(FWorkbook).GetChartCount = 0 then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
@ -7428,6 +7467,7 @@ begin
|
|||||||
'<style:paragraph-properties fo:text-align="center"/>' +
|
'<style:paragraph-properties fo:text-align="center"/>' +
|
||||||
'</style:style>'
|
'</style:style>'
|
||||||
);
|
);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TsSpreadOpenDocWriter.WritePrintContentStyleXMLAsString(
|
function TsSpreadOpenDocWriter.WritePrintContentStyleXMLAsString(
|
||||||
@ -8169,7 +8209,9 @@ constructor TsSpreadOpenDocWriter.Create(AWorkbook: TsBasicWorkbook);
|
|||||||
begin
|
begin
|
||||||
inherited Create(AWorkbook);
|
inherited Create(AWorkbook);
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter := TsSpreadOpenDocChartWriter.Create(self);
|
FChartWriter := TsSpreadOpenDocChartWriter.Create(self);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
FColumnStyleList := TFPList.Create;
|
FColumnStyleList := TFPList.Create;
|
||||||
FRowStyleList := TFPList.Create;
|
FRowStyleList := TFPList.Create;
|
||||||
@ -8196,7 +8238,9 @@ begin
|
|||||||
FRichTextFontList.Free; // Do not destroy fonts, they are owned by Workbook
|
FRichTextFontList.Free; // Do not destroy fonts, they are owned by Workbook
|
||||||
FHeaderFooterFontList.Free;
|
FHeaderFooterFontList.Free;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
FChartWriter.Free;
|
FChartWriter.Free;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
@ -9012,8 +9056,6 @@ var
|
|||||||
sheet: TsWorksheet absolute ASheet;
|
sheet: TsWorksheet absolute ASheet;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
sheetIdx: Integer;
|
sheetIdx: Integer;
|
||||||
chart: TsChart;
|
|
||||||
series: TsChartSeries;
|
|
||||||
img: TsImage;
|
img: TsImage;
|
||||||
imgType: TsImageType;
|
imgType: TsImageType;
|
||||||
r1,c1,r2,c2: Cardinal;
|
r1,c1,r2,c2: Cardinal;
|
||||||
@ -9023,13 +9065,18 @@ var
|
|||||||
xml: String;
|
xml: String;
|
||||||
target, bookmark: String;
|
target, bookmark: String;
|
||||||
u: TURI;
|
u: TURI;
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
chart: TsChart;
|
||||||
|
series: TsChartSeries;
|
||||||
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
if (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) then
|
if (sheet.GetImageCount = 0) {$IFDEF FPS_CHARTS}and (sheet.GetChartCount = 0){$ENDIF} then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
AppendToStream(AStream,
|
AppendToStream(AStream,
|
||||||
'<table:shapes>');
|
'<table:shapes>');
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
sheetIdx := sheet.Index;
|
sheetIdx := sheet.Index;
|
||||||
for i:=0 to TsWorkbook(FWorkbook).GetChartCount-1 do
|
for i:=0 to TsWorkbook(FWorkbook).GetChartCount-1 do
|
||||||
begin
|
begin
|
||||||
@ -9096,6 +9143,7 @@ begin
|
|||||||
|
|
||||||
AppendToStream(AStream, xml);
|
AppendToStream(AStream, xml);
|
||||||
end;
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
for i:=0 to (ASheet as TsWorksheet).GetImageCount-1 do
|
for i:=0 to (ASheet as TsWorksheet).GetImageCount-1 do
|
||||||
begin
|
begin
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
unit fpsOpenDocumentChart;
|
unit fpsOpenDocumentChart;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
|
{$include ..\fps.inc}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, StrUtils, Contnrs, FPImage,
|
Classes, SysUtils, StrUtils, Contnrs, FPImage,
|
||||||
{$IF FPC_FULLVERSION >= 20701}
|
{$IF FPC_FULLVERSION >= 20701}
|
||||||
@ -156,8 +159,12 @@ type
|
|||||||
procedure WriteCharts; override;
|
procedure WriteCharts; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
fpsOpenDocument;
|
fpsOpenDocument;
|
||||||
|
|
||||||
@ -4227,5 +4234,7 @@ begin
|
|||||||
inc(AStyleID);
|
inc(AStyleID);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -24,7 +24,11 @@ uses
|
|||||||
{$endif}{$endif}{$endif}
|
{$endif}{$endif}{$endif}
|
||||||
Classes, SysUtils, fpimage, avglvltree, lconvencoding,
|
Classes, SysUtils, fpimage, avglvltree, lconvencoding,
|
||||||
fpsTypes, fpsExprParser, fpsClasses, fpsNumFormat, fpsPageLayout,
|
fpsTypes, fpsExprParser, fpsClasses, fpsNumFormat, fpsPageLayout,
|
||||||
fpsImages, fpsConditionalFormat, fpsChart;
|
fpsImages,
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
|
fpsChart,
|
||||||
|
{$endif}
|
||||||
|
fpsConditionalFormat;
|
||||||
|
|
||||||
type
|
type
|
||||||
{ Forward declarations }
|
{ Forward declarations }
|
||||||
@ -251,7 +255,9 @@ type
|
|||||||
procedure WriteNumber(ACell: PCell; ANumber: Double;
|
procedure WriteNumber(ACell: PCell; ANumber: Double;
|
||||||
ANumFormat: TsNumberFormat; ANumFormatString: String); overload;
|
ANumFormat: TsNumberFormat; ANumFormatString: String); overload;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
function WriteChartColor(ARow, Acol: Cardinal; AColor: TsColor): PCell;
|
function WriteChartColor(ARow, Acol: Cardinal; AColor: TsColor): PCell;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
function WriteRPNFormula(ARow, ACol: Cardinal;
|
function WriteRPNFormula(ARow, ACol: Cardinal;
|
||||||
AFormula: TsRPNFormula): PCell; overload;
|
AFormula: TsRPNFormula): PCell; overload;
|
||||||
@ -635,8 +641,10 @@ type
|
|||||||
ARowOffs1, AColOffs1: Double; out ARowOffs2, AColOffs2: Double;
|
ARowOffs1, AColOffs1: Double; out ARowOffs2, AColOffs2: Double;
|
||||||
out x,y: Double);
|
out x,y: Double);
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{ Chart support }
|
{ Chart support }
|
||||||
function GetChartCount: Integer;
|
function GetChartCount: Integer;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{ Protection }
|
{ Protection }
|
||||||
procedure Protect(AEnable: Boolean);
|
procedure Protect(AEnable: Boolean);
|
||||||
@ -784,7 +792,9 @@ type
|
|||||||
FCellFormatList: TsCellFormatList;
|
FCellFormatList: TsCellFormatList;
|
||||||
FConditionalFormatList: TsConditionalFormatList;
|
FConditionalFormatList: TsConditionalFormatList;
|
||||||
FEmbeddedObjList: TFPList;
|
FEmbeddedObjList: TFPList;
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
FCharts: TsChartList;
|
FCharts: TsChartList;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{ Internal methods }
|
{ Internal methods }
|
||||||
class procedure GetFormatFromFileHeader(const AFileName: TFileName;
|
class procedure GetFormatFromFileHeader(const AFileName: TFileName;
|
||||||
@ -925,11 +935,13 @@ type
|
|||||||
function HasEmbeddedSheetImages: Boolean;
|
function HasEmbeddedSheetImages: Boolean;
|
||||||
procedure RemoveAllEmbeddedObj;
|
procedure RemoveAllEmbeddedObj;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{ Charts }
|
{ Charts }
|
||||||
function AddChart(ASheet: TsBasicWorksheet; ARow, ACol: Cardinal;
|
function AddChart(ASheet: TsBasicWorksheet; ARow, ACol: Cardinal;
|
||||||
AWidth, AHeight: Double; AOffsetX: Double = 0.0; AOffsetY: Double = 0.0): TsChart;
|
AWidth, AHeight: Double; AOffsetX: Double = 0.0; AOffsetY: Double = 0.0): TsChart;
|
||||||
function GetChartByIndex(AIndex: Integer): TsChart;
|
function GetChartByIndex(AIndex: Integer): TsChart;
|
||||||
function GetChartCount: Integer;
|
function GetChartCount: Integer;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{ Utilities }
|
{ Utilities }
|
||||||
function ConvertUnits(AValue: Double; AFromUnits, AToUnits: TsSizeUnits): Double;
|
function ConvertUnits(AValue: Double; AFromUnits, AToUnits: TsSizeUnits): Double;
|
||||||
@ -1555,6 +1567,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
Determines the count of charts on this worksheet
|
Determines the count of charts on this worksheet
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
@ -1572,6 +1585,7 @@ begin
|
|||||||
if chart.SheetIndex = idx then inc(Result);
|
if chart.SheetIndex = idx then inc(Result);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
Calculates all formulas of the worksheet
|
Calculates all formulas of the worksheet
|
||||||
@ -4384,6 +4398,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
Writes an rgb color value as number to the specified cell. As requested by
|
Writes an rgb color value as number to the specified cell. As requested by
|
||||||
the chart module the bytes for red and blue are exchanged.
|
the chart module the bytes for red and blue are exchanged.
|
||||||
@ -4392,7 +4407,7 @@ function TsWorksheet.WriteChartColor(ARow, ACol: Cardinal; AColor: TsColor): PCe
|
|||||||
begin
|
begin
|
||||||
Result := WriteNumber(ARow, ACol, FlipColorBytes(AColor));
|
Result := WriteNumber(ARow, ACol, FlipColorBytes(AColor));
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
Writes an empty cell
|
Writes an empty cell
|
||||||
@ -6556,7 +6571,9 @@ begin
|
|||||||
FCellFormatList := TsCellFormatList.Create(false);
|
FCellFormatList := TsCellFormatList.Create(false);
|
||||||
FConditionalFormatList := TsConditionalFormatList.Create;
|
FConditionalFormatList := TsConditionalFormatList.Create;
|
||||||
FEmbeddedObjList := TFPList.Create;
|
FEmbeddedObjList := TFPList.Create;
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
FCharts := TsChartList.Create;
|
FCharts := TsChartList.Create;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
// Add default cell format
|
// Add default cell format
|
||||||
InitFormatRecord(fmt);
|
InitFormatRecord(fmt);
|
||||||
@ -6589,7 +6606,9 @@ begin
|
|||||||
|
|
||||||
RemoveAllEmbeddedObj;
|
RemoveAllEmbeddedObj;
|
||||||
FEmbeddedObjList.Free;
|
FEmbeddedObjList.Free;
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
FCharts.Free;
|
FCharts.Free;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
@ -7807,7 +7826,10 @@ end;
|
|||||||
{$include fpspreadsheet_hyperlinks.inc} // hyperlinks
|
{$include fpspreadsheet_hyperlinks.inc} // hyperlinks
|
||||||
{$include fpspreadsheet_embobj.inc} // embedded objects
|
{$include fpspreadsheet_embobj.inc} // embedded objects
|
||||||
{$include fpspreadsheet_clipbrd.inc} // clipboard access
|
{$include fpspreadsheet_clipbrd.inc} // clipboard access
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{$include fpspreadsheet_chart.inc} // chart support
|
{$include fpspreadsheet_chart.inc} // chart support
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
|
||||||
end. {** End Unit: fpspreadsheet }
|
end. {** End Unit: fpspreadsheet }
|
||||||
|
@ -19,6 +19,8 @@ unit fpsReaderWriter;
|
|||||||
{$mode delphi}{$H+}
|
{$mode delphi}{$H+}
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
|
{$include ..\fps.inc}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -197,6 +199,7 @@ type
|
|||||||
property NumFormatList: TStringList read FNumFormatList;
|
property NumFormatList: TStringList read FNumFormatList;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
{@@ Helper class for the spreadsheet reader to keep processing of charts
|
{@@ Helper class for the spreadsheet reader to keep processing of charts
|
||||||
out of the main reader unit. }
|
out of the main reader unit. }
|
||||||
TsBasicSpreadChartReader = class
|
TsBasicSpreadChartReader = class
|
||||||
@ -221,6 +224,7 @@ type
|
|||||||
procedure WriteCharts; virtual; abstract;
|
procedure WriteCharts; virtual; abstract;
|
||||||
property Writer: TsBasicSpreadWriter read FWriter;
|
property Writer: TsBasicSpreadWriter read FWriter;
|
||||||
end;
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
type
|
type
|
||||||
TsSpreadFileAccess = (faRead, faWrite);
|
TsSpreadFileAccess = (faRead, faWrite);
|
||||||
@ -937,6 +941,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
{ TsBasicSpreadChartReader }
|
{ TsBasicSpreadChartReader }
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
@ -957,6 +962,7 @@ constructor TsBasicSpreadChartWriter.Create(AWriter: TsBasicSpreadWriter);
|
|||||||
begin
|
begin
|
||||||
FWriter := AWriter;
|
FWriter := AWriter;
|
||||||
end;
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
|
@ -67,13 +67,6 @@ implementation
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
LazUTF8,
|
LazUTF8,
|
||||||
(*
|
|
||||||
{$IF FPC_FULLVERSION >= 20701}
|
|
||||||
zipper,
|
|
||||||
{$ELSE}
|
|
||||||
fpszipper,
|
|
||||||
{$ENDIF}
|
|
||||||
*)
|
|
||||||
fpsStreams, fpsUtils;
|
fpsStreams, fpsUtils;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
|
@ -184,11 +184,13 @@ type
|
|||||||
procedure WriteCFColorRangeRule(AStream: TStream; ARule: TsCFColorRangeRule; APriority: Integer);
|
procedure WriteCFColorRangeRule(AStream: TStream; ARule: TsCFColorRangeRule; APriority: Integer);
|
||||||
procedure WriteCFDataBarRule(AStream: TStream; ARule: TsCFDatabarRule; APriority: Integer);
|
procedure WriteCFDataBarRule(AStream: TStream; ARule: TsCFDatabarRule; APriority: Integer);
|
||||||
procedure WriteCFIconSetRule(AStream: TStream; ARule: TsCFIconSetRule; APriority: Integer);
|
procedure WriteCFIconSetRule(AStream: TStream; ARule: TsCFIconSetRule; APriority: Integer);
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
procedure WriteChart(AStream: TStream; AChartIndex: Integer);
|
procedure WriteChart(AStream: TStream; AChartIndex: Integer);
|
||||||
procedure WriteChartColors;
|
procedure WriteChartColors;
|
||||||
procedure WriteChartRels;
|
procedure WriteChartRels;
|
||||||
procedure WriteCharts;
|
procedure WriteCharts;
|
||||||
procedure WriteChartStyles;
|
procedure WriteChartStyles;
|
||||||
|
{$endif}
|
||||||
procedure WriteColBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet);
|
procedure WriteColBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet);
|
||||||
procedure WriteCols(AStream: TStream; AWorksheet: TsBasicWorksheet);
|
procedure WriteCols(AStream: TStream; AWorksheet: TsBasicWorksheet);
|
||||||
procedure WriteComments(AWorksheet: TsBasicWorksheet);
|
procedure WriteComments(AWorksheet: TsBasicWorksheet);
|
||||||
@ -4726,7 +4728,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Charts or embedded images next
|
// Charts or embedded images next
|
||||||
if (sheet.GetImageCount > 0) or (book.GetChartCount > 0) then
|
if (sheet.GetImageCount > 0) {$ifdef FPS_CHARTS}or (book.GetChartCount > 0){$endif} then
|
||||||
begin
|
begin
|
||||||
ADrawing_rId := next_rId;
|
ADrawing_rId := next_rId;
|
||||||
inc(next_rId);
|
inc(next_rId);
|
||||||
@ -5145,7 +5147,7 @@ begin
|
|||||||
'</cfRule>');
|
'</cfRule>');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
procedure TsSpreadOOXMLWriter.WriteChart(AStream: TStream;
|
procedure TsSpreadOOXMLWriter.WriteChart(AStream: TStream;
|
||||||
AChartIndex: Integer);
|
AChartIndex: Integer);
|
||||||
|
|
||||||
@ -5246,7 +5248,9 @@ begin
|
|||||||
'</c:chartSpace>' + LE
|
'</c:chartSpace>' + LE
|
||||||
);
|
);
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
procedure TsSpreadOOXMLWriter.WriteChartColors;
|
procedure TsSpreadOOXMLWriter.WriteChartColors;
|
||||||
var
|
var
|
||||||
i, n: Integer;
|
i, n: Integer;
|
||||||
@ -5306,7 +5310,9 @@ begin
|
|||||||
);
|
);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{ Write the relationship file for all workbook's chart. The file defines which
|
{ Write the relationship file for all workbook's chart. The file defines which
|
||||||
xml files contain the ChartStyles and Colors needed by each chart. }
|
xml files contain the ChartStyles and Colors needed by each chart. }
|
||||||
procedure TsSpreadOOXMLWriter.WriteChartRels;
|
procedure TsSpreadOOXMLWriter.WriteChartRels;
|
||||||
@ -5332,7 +5338,9 @@ begin
|
|||||||
]));
|
]));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
procedure TsSpreadOOXMLWriter.WriteCharts;
|
procedure TsSpreadOOXMLWriter.WriteCharts;
|
||||||
var
|
var
|
||||||
i, n: Integer;
|
i, n: Integer;
|
||||||
@ -5347,7 +5355,9 @@ begin
|
|||||||
WriteChart(FSCharts[i], i);
|
WriteChart(FSCharts[i], i);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
procedure TsSpreadOOXMLWriter.WriteChartStyles;
|
procedure TsSpreadOOXMLWriter.WriteChartStyles;
|
||||||
var
|
var
|
||||||
i, n: Integer;
|
i, n: Integer;
|
||||||
@ -5901,6 +5911,7 @@ begin
|
|||||||
);
|
);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
procedure TsSpreadOOXMLWriter.WriteColBreaks(AStream: TStream;
|
procedure TsSpreadOOXMLWriter.WriteColBreaks(AStream: TStream;
|
||||||
AWorksheet: TsBasicWorksheet);
|
AWorksheet: TsBasicWorksheet);
|
||||||
@ -7217,7 +7228,7 @@ var
|
|||||||
sheetIdx: Integer;
|
sheetIdx: Integer;
|
||||||
chart: TsChart;
|
chart: TsChart;
|
||||||
begin
|
begin
|
||||||
if (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) then
|
if (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
SetLength(FSDrawings, FCurSheetNum + 1);
|
SetLength(FSDrawings, FCurSheetNum + 1);
|
||||||
@ -7238,6 +7249,7 @@ begin
|
|||||||
inc(rId, 1);
|
inc(rId, 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
// Repeat for each chart
|
// Repeat for each chart
|
||||||
sheetIdx := sheet.Index;
|
sheetIdx := sheet.Index;
|
||||||
j := 1; // Counts the charts in the current sheet
|
j := 1; // Counts the charts in the current sheet
|
||||||
@ -7251,6 +7263,7 @@ begin
|
|||||||
inc(rId);
|
inc(rId);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
// Close node
|
// Close node
|
||||||
AppendToStream(FSDrawings[FCurSheetNum],
|
AppendToStream(FSDrawings[FCurSheetNum],
|
||||||
@ -7274,7 +7287,7 @@ var
|
|||||||
sheet: TsWorksheet absolute AWorksheet;
|
sheet: TsWorksheet absolute AWorksheet;
|
||||||
sheetIdx: Integer;
|
sheetIdx: Integer;
|
||||||
begin
|
begin
|
||||||
if (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) then
|
if (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
SetLength(FSDrawingsRels, FCurSheetNum + 1);
|
SetLength(FSDrawingsRels, FCurSheetNum + 1);
|
||||||
@ -7317,6 +7330,7 @@ begin
|
|||||||
inc(rId);
|
inc(rId);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
// Repeat for each chart
|
// Repeat for each chart
|
||||||
sheetIdx := sheet.Index;
|
sheetIdx := sheet.Index;
|
||||||
for i := 0 to TsWorkbook(FWorkbook).GetChartCount - 1 do
|
for i := 0 to TsWorkbook(FWorkbook).GetChartCount - 1 do
|
||||||
@ -7331,6 +7345,7 @@ begin
|
|||||||
inc(rId);
|
inc(rId);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
AppendToStream(FSDrawingsRels[FCurSheetNum],
|
AppendToStream(FSDrawingsRels[FCurSheetNum],
|
||||||
'</Relationships>');
|
'</Relationships>');
|
||||||
@ -7697,7 +7712,7 @@ begin
|
|||||||
|
|
||||||
// Anything to write?
|
// Anything to write?
|
||||||
if (sheet.Comments.Count = 0) and (sheet.Hyperlinks.Count = 0) and
|
if (sheet.Comments.Count = 0) and (sheet.Hyperlinks.Count = 0) and
|
||||||
(sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) and
|
(sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} and
|
||||||
(not (sheet.PageLayout.HasHeaderFooterImages))
|
(not (sheet.PageLayout.HasHeaderFooterImages))
|
||||||
then
|
then
|
||||||
exit;
|
exit;
|
||||||
@ -7750,7 +7765,7 @@ begin
|
|||||||
// Relationships for charts or embedded images
|
// Relationships for charts or embedded images
|
||||||
// relationship with to the ../drawings/drawingX.xml file containing all
|
// relationship with to the ../drawings/drawingX.xml file containing all
|
||||||
// chart/image infos. X is the 1-based sheet index
|
// chart/image infos. X is the 1-based sheet index
|
||||||
if (sheet.GetImageCount > 0) or (sheet.GetChartCount > 0) then
|
if (sheet.GetImageCount > 0) {$ifdef FPS_CHARTS}or (sheet.GetChartCount > 0){$endif} then
|
||||||
AppendToStream(FSSheetRels[FCurSheetNum], Format(
|
AppendToStream(FSSheetRels[FCurSheetNum], Format(
|
||||||
' <Relationship Id="rId%d" Target="../drawings/drawing%d.xml" Type="%s" />' + LineEnding,
|
' <Relationship Id="rId%d" Target="../drawings/drawing%d.xml" Type="%s" />' + LineEnding,
|
||||||
[rId_Drawing, FCurSheetNum + 1, SCHEMAS_DRAWING]
|
[rId_Drawing, FCurSheetNum + 1, SCHEMAS_DRAWING]
|
||||||
@ -8010,11 +8025,13 @@ begin
|
|||||||
'</sst>');
|
'</sst>');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
{ Write all charts }
|
{ Write all charts }
|
||||||
WriteChartRels;
|
WriteChartRels;
|
||||||
WriteChartStyles;
|
WriteChartStyles;
|
||||||
WriteChartColors;
|
WriteChartColors;
|
||||||
WriteCharts;
|
WriteCharts;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{ Workbook relations - Mark relation to all sheets }
|
{ Workbook relations - Mark relation to all sheets }
|
||||||
WriteWorkbookRels(FSWorkbookRels);
|
WriteWorkbookRels(FSWorkbookRels);
|
||||||
@ -8064,6 +8081,7 @@ begin
|
|||||||
AppendToStream(FSContentTypes,
|
AppendToStream(FSContentTypes,
|
||||||
'<Override PartName="/xl/workbook.xml" ContentType="' + MIME_SHEET + '" />' + LineEnding);
|
'<Override PartName="/xl/workbook.xml" ContentType="' + MIME_SHEET + '" />' + LineEnding);
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
n := 1;
|
n := 1;
|
||||||
for i:=0 to book.GetWorksheetCount-1 do
|
for i:=0 to book.GetWorksheetCount-1 do
|
||||||
begin
|
begin
|
||||||
@ -8076,6 +8094,7 @@ begin
|
|||||||
inc(n);
|
inc(n);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
for i:=1 to book.GetWorksheetCount do
|
for i:=1 to book.GetWorksheetCount do
|
||||||
begin
|
begin
|
||||||
@ -8488,7 +8507,7 @@ begin
|
|||||||
which contains the image/chart-related data of all images/charts in this sheet.
|
which contains the image/chart-related data of all images/charts in this sheet.
|
||||||
The file in turn requires an entry "drawingX.xml.rels" in the drawings rels
|
The file in turn requires an entry "drawingX.xml.rels" in the drawings rels
|
||||||
folder }
|
folder }
|
||||||
if (worksheet.GetImageCount > 0) or (worksheet.GetChartCount > 0) then
|
if (worksheet.GetImageCount > 0) {$ifdef FPS_CHARTS}or (worksheet.GetChartCount > 0){$endif} then
|
||||||
AppendToStream(FSSheets[FCurSheetNum], Format(
|
AppendToStream(FSSheets[FCurSheetNum], Format(
|
||||||
'<drawing r:id="rId%d" />', [rId_Drawing]));
|
'<drawing r:id="rId%d" />', [rId_Drawing]));
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
unit fpsvisualreg;
|
unit fpsvisualreg;
|
||||||
|
|
||||||
{$MODE objfpc}{$H+}
|
{$MODE objfpc}{$H+}
|
||||||
|
|
||||||
|
{$INCLUDE ..\fps.inc}
|
||||||
{$DEFINE REGISTER_ALL_FILE_FORMATS}
|
{$DEFINE REGISTER_ALL_FILE_FORMATS}
|
||||||
|
|
||||||
{$R ../../resource/fpsvisualreg.res}
|
{$R ../../resource/fpsvisualreg.res}
|
||||||
@ -19,7 +21,12 @@ uses
|
|||||||
{$IFDEF REGISTER_ALL_FILE_FORMATS}
|
{$IFDEF REGISTER_ALL_FILE_FORMATS}
|
||||||
{%H-}fpsallformats,
|
{%H-}fpsallformats,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fpspreadsheetctrls, fpspreadsheetgrid, fpspreadsheetchart, fpsactions;
|
fpspreadsheetctrls,
|
||||||
|
fpspreadsheetgrid,
|
||||||
|
{$IFDEF FPS_CHARTS}
|
||||||
|
fpspreadsheetchart,
|
||||||
|
{$ENDIF}
|
||||||
|
fpsactions;
|
||||||
|
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
Registers the visual spreadsheet components in the Lazarus component palette,
|
Registers the visual spreadsheet components in the Lazarus component palette,
|
||||||
@ -35,9 +42,11 @@ begin
|
|||||||
TsSpreadsheetInspector
|
TsSpreadsheetInspector
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
RegisterComponents('Chart', [
|
RegisterComponents('Chart', [
|
||||||
TsWorkbookChartSource
|
TsWorkbookChartSource
|
||||||
]);
|
]);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
RegisterActions('FPSpreadsheet', [
|
RegisterActions('FPSpreadsheet', [
|
||||||
// Worksheet-releated actions
|
// Worksheet-releated actions
|
||||||
|
@ -67,3 +67,5 @@
|
|||||||
Therefore, the following define must be activated if FPC is v3.3 or older. }
|
Therefore, the following define must be activated if FPC is v3.3 or older. }
|
||||||
{$DEFINE FPS_PATCHED_ZIPPER}
|
{$DEFINE FPS_PATCHED_ZIPPER}
|
||||||
|
|
||||||
|
{ The next define activates chart support. }
|
||||||
|
{$DEFINE FPS_CHARTS}
|
||||||
|
@ -13,9 +13,12 @@ LICENSE: See the file COPYING.modifiedLGPL.txt, included in the Lazarus
|
|||||||
unit fpspreadsheetchart;
|
unit fpspreadsheetchart;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
|
{$include ..\fps.inc}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
// RTL/FCL
|
// RTL/FCL
|
||||||
Classes, Contnrs, SysUtils, Types, FPCanvas,
|
Classes, Contnrs, SysUtils, Types, FPCanvas,
|
||||||
@ -191,9 +194,12 @@ type
|
|||||||
|
|
||||||
procedure Convert_sChartLine_to_Pen(AChart: TsChart; ALine: TsChartLine; APen: TPen);
|
procedure Convert_sChartLine_to_Pen(AChart: TsChart; ALine: TsChartLine; APen: TPen);
|
||||||
|
|
||||||
|
{$endif}
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
{$ifdef FPS_CHARTS}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Math;
|
Math;
|
||||||
|
|
||||||
@ -2451,4 +2457,6 @@ begin
|
|||||||
AChartSeries.TickWidthStyle := twsPercentMin;
|
AChartSeries.TickWidthStyle := twsPercentMin;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
unit fpspreadsheetctrls;
|
unit fpspreadsheetctrls;
|
||||||
|
|
||||||
{$MODE objfpc}{$H+}
|
{$MODE objfpc}{$H+}
|
||||||
|
{$include ..\fps.inc}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user