You've already forked lazarus-ccr
fpspreadsheet: ods reader support chart axes.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9019 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -5,16 +5,19 @@ program barchart_write_demo;
|
|||||||
uses
|
uses
|
||||||
SysUtils,
|
SysUtils,
|
||||||
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
||||||
|
|
||||||
|
const
|
||||||
|
FILE_NAME = 'bars';
|
||||||
var
|
var
|
||||||
b: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
ch: TsChart;
|
ch: TsChart;
|
||||||
ser: TsChartSeries;
|
ser: TsChartSeries;
|
||||||
begin
|
begin
|
||||||
b := TsWorkbook.Create;
|
book := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
// worksheet
|
// worksheet
|
||||||
sheet := b.AddWorksheet('bar_series');
|
sheet := book.AddWorksheet('bar_series');
|
||||||
|
|
||||||
// Enter data
|
// Enter data
|
||||||
sheet.WriteText( 0, 0, 'School Grades');
|
sheet.WriteText( 0, 0, 'School Grades');
|
||||||
@ -30,15 +33,15 @@ begin
|
|||||||
sheet.WriteText(10, 0, 'Computer'); sheet.WriteNumber(10, 1, 16); sheet.WriteNumber(10, 2, 18);
|
sheet.WriteText(10, 0, 'Computer'); sheet.WriteNumber(10, 1, 16); sheet.WriteNumber(10, 2, 18);
|
||||||
|
|
||||||
// Create chart: left/top in cell D4, 160 mm x 100 mm
|
// Create chart: left/top in cell D4, 160 mm x 100 mm
|
||||||
ch := b.AddChart(sheet, 2, 3, 120, 100);
|
ch := book.AddChart(sheet, 2, 3, 120, 100);
|
||||||
|
|
||||||
// Chart properties
|
// Chart properties
|
||||||
ch.Border.Style := clsNoLine;
|
ch.Border.Style := clsNoLine;
|
||||||
ch.Title.Caption := 'School Grades';
|
ch.Title.Caption := 'School Grades';
|
||||||
ch.Title.Font.Style := [fssBold];
|
ch.Title.Font.Style := [fssBold];
|
||||||
ch.Legend.Border.Style := clsNoLine;
|
ch.Legend.Border.Style := clsNoLine;
|
||||||
ch.XAxis.Caption := '';
|
ch.XAxis.Title.Caption := '';
|
||||||
ch.YAxis.Caption := '';
|
ch.YAxis.Title.Caption := 'Grade points';
|
||||||
ch.YAxis.AxisLine.Color := scSilver;
|
ch.YAxis.AxisLine.Color := scSilver;
|
||||||
ch.YAxis.MajorTicks := [];
|
ch.YAxis.MajorTicks := [];
|
||||||
|
|
||||||
@ -62,10 +65,15 @@ begin
|
|||||||
ser.Fill.Hatch := ch.Hatches.AddHatch('Forward', chsSingle, scWhite, 1.5, 45, true);
|
ser.Fill.Hatch := ch.Hatches.AddHatch('Forward', chsSingle, scWhite, 1.5, 45, true);
|
||||||
ser.Fill.Color := scBlue;
|
ser.Fill.Color := scBlue;
|
||||||
|
|
||||||
// b.WriteToFile('bars.xlsx', true); // Excel fails to open the file
|
{
|
||||||
b.WriteToFile('bars.ods', true);
|
book.WriteToFile(FILE_NAME + '.xlsx', true); // Excel fails to open the file
|
||||||
|
WriteLn('Data saved with chart in ', FILENAME, '.xlsx');
|
||||||
|
}
|
||||||
|
|
||||||
|
book.WriteToFile(FILE_NAME + '.ods', true);
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.ods');
|
||||||
finally
|
finally
|
||||||
b.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -5,16 +5,19 @@ program piechart_write_demo;
|
|||||||
uses
|
uses
|
||||||
SysUtils,
|
SysUtils,
|
||||||
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
||||||
|
|
||||||
|
const
|
||||||
|
FILE_NAME = 'world-population';
|
||||||
var
|
var
|
||||||
b: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
ch: TsChart;
|
ch: TsChart;
|
||||||
ser: TsChartSeries;
|
ser: TsChartSeries;
|
||||||
begin
|
begin
|
||||||
b := TsWorkbook.Create;
|
book := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
// worksheet
|
// worksheet
|
||||||
sheet := b.AddWorksheet('pie_series');
|
sheet := book.AddWorksheet('pie_series');
|
||||||
|
|
||||||
// Enter data
|
// Enter data
|
||||||
sheet.WriteText(0, 0, 'World population');
|
sheet.WriteText(0, 0, 'World population');
|
||||||
@ -29,7 +32,7 @@ begin
|
|||||||
sheet.WriteText(8, 0, 'Oceania'); sheet.WriteNumber(8, 1, 42); // sheet.WriteChartColor(8, 2, $FF8080);
|
sheet.WriteText(8, 0, 'Oceania'); sheet.WriteNumber(8, 1, 42); // sheet.WriteChartColor(8, 2, $FF8080);
|
||||||
|
|
||||||
// Create chart: left/top in cell D4, 120 mm x 100 mm
|
// Create chart: left/top in cell D4, 120 mm x 100 mm
|
||||||
ch := b.AddChart(sheet, 2, 3, 120, 100);
|
ch := book.AddChart(sheet, 2, 3, 120, 100);
|
||||||
|
|
||||||
// Chart properties
|
// Chart properties
|
||||||
ch.Border.Style := clsNoLine;
|
ch.Border.Style := clsNoLine;
|
||||||
@ -52,10 +55,15 @@ begin
|
|||||||
ser.LabelFormat := '#,##0';
|
ser.LabelFormat := '#,##0';
|
||||||
//ser.SetFillColorRange(4, 2, 8, 2);
|
//ser.SetFillColorRange(4, 2, 8, 2);
|
||||||
|
|
||||||
b.WriteToFile('world-population.xlsx', true); // Excel fails to open the file
|
{
|
||||||
b.WriteToFile('world-population.ods', true);
|
book.WriteToFile(FILE_NAME+'.xlsx', true); // Excel fails to open the file
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.xlsx');
|
||||||
|
}
|
||||||
|
|
||||||
|
book.WriteToFile(FILE_NAME + '.ods', true);
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.ods');
|
||||||
finally
|
finally
|
||||||
b.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -5,16 +5,19 @@ program radarchart_write_demo;
|
|||||||
uses
|
uses
|
||||||
SysUtils,
|
SysUtils,
|
||||||
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
||||||
|
|
||||||
|
const
|
||||||
|
FILE_NAME = 'school-grades';
|
||||||
var
|
var
|
||||||
b: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
ch: TsChart;
|
ch: TsChart;
|
||||||
ser: TsChartSeries;
|
ser: TsChartSeries;
|
||||||
begin
|
begin
|
||||||
b := TsWorkbook.Create;
|
book := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
// worksheet
|
// worksheet
|
||||||
sheet := b.AddWorksheet('radar_series');
|
sheet := book.AddWorksheet('radar_series');
|
||||||
|
|
||||||
// Enter data
|
// Enter data
|
||||||
sheet.WriteText( 0, 0, 'School Grades');
|
sheet.WriteText( 0, 0, 'School Grades');
|
||||||
@ -30,15 +33,15 @@ begin
|
|||||||
sheet.WriteText(10, 0, 'Computer'); sheet.WriteNumber(10, 1, 16); sheet.WriteNumber(10, 2, 18);
|
sheet.WriteText(10, 0, 'Computer'); sheet.WriteNumber(10, 1, 16); sheet.WriteNumber(10, 2, 18);
|
||||||
|
|
||||||
// Create chart: left/top in cell D4, 160 mm x 100 mm
|
// Create chart: left/top in cell D4, 160 mm x 100 mm
|
||||||
ch := b.AddChart(sheet, 2, 3, 120, 100);
|
ch := book.AddChart(sheet, 2, 3, 120, 100);
|
||||||
|
|
||||||
// Chart properties
|
// Chart properties
|
||||||
ch.Border.Style := clsNoLine;
|
ch.Border.Style := clsNoLine;
|
||||||
ch.Title.Caption := 'School Grades';
|
ch.Title.Caption := 'School Grades';
|
||||||
ch.Title.Font.Style := [fssBold];
|
ch.Title.Font.Style := [fssBold];
|
||||||
ch.Legend.Border.Style := clsNoLine;
|
ch.Legend.Border.Style := clsNoLine;
|
||||||
ch.XAxis.Caption := '';
|
ch.XAxis.Title.Caption := '';
|
||||||
ch.YAxis.Caption := '';
|
ch.YAxis.Title.Caption := '';
|
||||||
ch.YAxis.AxisLine.Color := scSilver;
|
ch.YAxis.AxisLine.Color := scSilver;
|
||||||
ch.YAxis.MajorTicks := [];
|
ch.YAxis.MajorTicks := [];
|
||||||
|
|
||||||
@ -60,10 +63,15 @@ begin
|
|||||||
ser.Fill.Color := scBlue;
|
ser.Fill.Color := scBlue;
|
||||||
ser.Fill.Transparency := 0.35;
|
ser.Fill.Transparency := 0.35;
|
||||||
|
|
||||||
b.WriteToFile('school-grades.xlsx', true); // Excel fails to open the file
|
{
|
||||||
b.WriteToFile('school-grades.ods', true);
|
book.WriteToFile(FILE_NAME + '.xlsx', true); // Excel fails to open the file
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.xlsx');
|
||||||
|
}
|
||||||
|
|
||||||
|
book.WriteToFile(FILE_NAME + '.ods', true);
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.ods');
|
||||||
finally
|
finally
|
||||||
b.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -5,21 +5,23 @@ uses
|
|||||||
fpSpreadsheet, fpsTypes, fpsChart, fpsOpenDocument;
|
fpSpreadsheet, fpsTypes, fpsChart, fpsOpenDocument;
|
||||||
|
|
||||||
const
|
const
|
||||||
// FILE_NAME = 'test.ods';
|
FILE_NAME = 'test.ods';
|
||||||
FILE_NAME = 'area.ods';
|
// FILE_NAME = 'area.ods';
|
||||||
var
|
var
|
||||||
b: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
chart: TsChart;
|
chart: TsChart;
|
||||||
i, j: Integer;
|
i, j: Integer;
|
||||||
begin
|
begin
|
||||||
b := TsWorkbook.Create;
|
book := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
b.ReadFromFile(FILE_NAME);
|
book.ReadFromFile(FILE_NAME);
|
||||||
for i := 0 to b.GetChartCount-1 do
|
for i := 0 to book.GetChartCount-1 do
|
||||||
begin
|
begin
|
||||||
chart := b.GetChartByIndex(i);
|
chart := book.GetChartByIndex(i);
|
||||||
sheet := b.GetWorksheetByIndex(chart.SheetIndex);
|
sheet := book.GetWorksheetByIndex(chart.SheetIndex);
|
||||||
|
|
||||||
|
WriteLn('--------------------------------------------------------------------------------');
|
||||||
WriteLn('Chart "', chart.Name, '":');
|
WriteLn('Chart "', chart.Name, '":');
|
||||||
WriteLn(' Worksheet "', sheet.Name, '", ',
|
WriteLn(' Worksheet "', sheet.Name, '", ',
|
||||||
'row:', chart.Row, ' (+',chart.OffsetY:0:0, 'mm) ',
|
'row:', chart.Row, ' (+',chart.OffsetY:0:0, 'mm) ',
|
||||||
@ -117,10 +119,70 @@ begin
|
|||||||
WriteLn(' Font: "', chart.Subtitle.Font.FontName, '" Size:', chart.Subtitle.Font.Size:0:0,
|
WriteLn(' Font: "', chart.Subtitle.Font.FontName, '" Size:', chart.Subtitle.Font.Size:0:0,
|
||||||
' Style:', SetToString(PTypeInfo(TypeInfo(TsFontStyles)), integer(chart.Subtitle.Font.Style), True),
|
' Style:', SetToString(PTypeInfo(TypeInfo(TsFontStyles)), integer(chart.Subtitle.Font.Style), True),
|
||||||
' Color:', IntToHex(chart.Subtitle.Font.Color, 6));
|
' Color:', IntToHex(chart.Subtitle.Font.Color, 6));
|
||||||
|
|
||||||
|
WriteLn;
|
||||||
|
WriteLn(' CHART X AXIS');
|
||||||
|
WriteLn(' VISIBLE:', chart.YAxis.Visible);
|
||||||
|
WriteLn(' TITLE: Caption: "', StringReplace(chart.XAxis.Title.Caption, FPS_LINE_ENDING, '\n', [rfReplaceAll]), '"',
|
||||||
|
' Visible: ', chart.XAxis.Title.Visible,
|
||||||
|
' Rotation: ', chart.XAxis.Title.RotationAngle,
|
||||||
|
' Font: "', chart.XAxis.Title.Font.FontName, '" Size:', chart.XAxis.Title.Font.Size:0:0,
|
||||||
|
' Style:', SetToString(PTypeInfo(TypeInfo(TsFontStyles)), integer(chart.XAxis.Title.Font.Style), True),
|
||||||
|
' Color:', IntToHex(chart.XAxis.Title.Font.Color, 6));
|
||||||
|
WriteLn(' RANGE: AutomaticMin:', chart.XAxis.AutomaticMin, ' Minimum: ', chart.XAxis.Min:0:3,
|
||||||
|
' AutomaticMax:', chart.XAxis.AutomaticMax, ' Maximum: ', chart.XAxis.Max:0:3);
|
||||||
|
WriteLn(' POSITION: ', GetEnumName(TypeInfo(TsChartAxisPosition), ord(chart.XAXis.Position)),
|
||||||
|
' Value:', chart.XAxis.PositionValue:0:3);
|
||||||
|
WriteLn(' AXIS TICKS: Major interval:', chart.XAxis.MajorInterval:0:2,
|
||||||
|
' Major ticks:', SetToString(PTypeInfo(TypeInfo(TsChartAxisTicks)), integer(chart.XAxis.MajorTicks), True),
|
||||||
|
' Minor count:', chart.XAxis.MinorCount,
|
||||||
|
' Minor ticks:', SetToString(PTypeInfo(TypeInfo(TsChartAxisTicks)), integer(chart.XAxis.MinorTicks), True));
|
||||||
|
WriteLn(' AXIS LINE: Style:', chart.XAxis.AxisLine.Style,
|
||||||
|
' Width:', chart.XAxis.AxisLine.Width:0:0, 'mm',
|
||||||
|
' Color:', IntToHex(chart.XAxis.AxisLine.Color, 6),
|
||||||
|
' Transparency:', chart.XAxis.AxisLine.Transparency:0:2);
|
||||||
|
WriteLn(' MAJOR GRID: Style:', chart.XAxis.MajorGridLines.Style,
|
||||||
|
' Width:', chart.XAxis.MajorGridLines.Width:0:0, 'mm',
|
||||||
|
' Color:', IntToHex(chart.XAxis.MajorGridLines.Color, 6),
|
||||||
|
' Transparency:', chart.XAxis.MajorGridLines.Transparency:0:2);
|
||||||
|
WriteLn(' MINOR GRID: Style:', chart.XAxis.MinorGridLines.Style,
|
||||||
|
' Width:', chart.XAxis.MinorGridLines.Width:0:0, 'mm',
|
||||||
|
' Color:', IntToHex(chart.XAxis.MinorGridLines.Color, 6),
|
||||||
|
' Transparency:', chart.XAxis.MinorGridLines.Transparency:0:2);
|
||||||
|
|
||||||
|
WriteLn;
|
||||||
|
WriteLn(' CHART Y AXIS:');
|
||||||
|
WriteLn(' VISIBLE:', chart.YAxis.Visible);
|
||||||
|
WriteLn(' TITLE: Caption: "', StringReplace(chart.YAxis.Title.Caption, FPS_LINE_ENDING, '\n', [rfReplaceAll]), '"',
|
||||||
|
' Visible: ', chart.YAxis.Title.Visible,
|
||||||
|
' Rotation: ', chart.YAxis.Title.RotationAngle,
|
||||||
|
' Font: "', chart.YAxis.Title.Font.FontName, '" Size:', chart.YAxis.Title.Font.Size:0:0,
|
||||||
|
' Style:', SetToString(PTypeInfo(TypeInfo(TsFontStyles)), integer(chart.YAxis.Title.Font.Style), True),
|
||||||
|
' Color:', IntToHex(chart.YAxis.Title.Font.Color, 6));
|
||||||
|
WriteLn(' RANGE: AutomaticMin:', chart.YAxis.AutomaticMin, ' Minimum: ', chart.YAxis.Min:0:3,
|
||||||
|
' AutomaticMax:', chart.YAxis.AutomaticMax, ' Maximum: ', chart.YAxis.Max:0:3);
|
||||||
|
WriteLn(' POSITION: ', GetEnumName(TypeInfo(TsChartAxisPosition), ord(chart.YAXis.Position)),
|
||||||
|
' Value:', chart.YAxis.PositionValue:0:3);
|
||||||
|
WriteLn(' AXIS TICKS: Major interval:', chart.YAxis.MajorInterval:0:2,
|
||||||
|
' Major ticks:', SetToString(PTypeInfo(TypeInfo(TsChartAxisTicks)), integer(chart.YAxis.MajorTicks), True),
|
||||||
|
' Minor count:', chart.YAxis.MinorCount,
|
||||||
|
' Minor ticks:', SetToString(PTypeInfo(TypeInfo(TsChartAxisTicks)), integer(chart.YAxis.MinorTicks), True));
|
||||||
|
WriteLn(' AXIS LINE: Style:', chart.YAxis.AxisLine.Style,
|
||||||
|
' Width:', chart.YAxis.AxisLine.Width:0:0, 'mm',
|
||||||
|
' Color:', IntToHex(chart.YAxis.AxisLine.Color, 6),
|
||||||
|
' Transparency:', chart.YAxis.AxisLine.Transparency:0:2);
|
||||||
|
WriteLn(' MAJOR GRID: Style:', chart.YAxis.MajorGridLines.Style,
|
||||||
|
' Width:', chart.YAxis.MajorGridLines.Width:0:0, 'mm',
|
||||||
|
' Color:', IntToHex(chart.YAxis.MajorGridLines.Color, 6),
|
||||||
|
' Transparency:', chart.YAxis.MajorGridLines.Transparency:0:2);
|
||||||
|
WriteLn(' MINOR GRID: Style:', chart.YAxis.MinorGridLines.Style,
|
||||||
|
' Width:', chart.YAxis.MinorGridLines.Width:0:0, 'mm',
|
||||||
|
' Color:', IntToHex(chart.YAxis.MinorGridLines.Color, 6),
|
||||||
|
' Transparency:', chart.YAxis.MinorGridLines.Transparency:0:2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
finally
|
finally
|
||||||
b.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
WriteLn;
|
WriteLn;
|
||||||
|
@ -5,16 +5,19 @@ program regressionchart_write_demo;
|
|||||||
uses
|
uses
|
||||||
SysUtils,
|
SysUtils,
|
||||||
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
||||||
|
|
||||||
|
const
|
||||||
|
FILE_NAME = 'regression';
|
||||||
var
|
var
|
||||||
b: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
ch: TsChart;
|
ch: TsChart;
|
||||||
ser: TsScatterSeries;
|
ser: TsScatterSeries;
|
||||||
begin
|
begin
|
||||||
b := TsWorkbook.Create;
|
book := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
// worksheet
|
// worksheet
|
||||||
sheet := b.AddWorksheet('regression_test');
|
sheet := book.AddWorksheet('regression_test');
|
||||||
|
|
||||||
// Enter data
|
// Enter data
|
||||||
sheet.WriteText(0, 0, 'Data');
|
sheet.WriteText(0, 0, 'Data');
|
||||||
@ -28,7 +31,7 @@ begin
|
|||||||
sheet.WriteNumber(8, 0, 6.8); sheet.WriteNumber(8, 1, 7.1); // sheet.WriteChartColor(8, 2, $FF8080);
|
sheet.WriteNumber(8, 0, 6.8); sheet.WriteNumber(8, 1, 7.1); // sheet.WriteChartColor(8, 2, $FF8080);
|
||||||
|
|
||||||
// Create chart: left/top in cell D4, 120 mm x 100 mm
|
// Create chart: left/top in cell D4, 120 mm x 100 mm
|
||||||
ch := b.AddChart(sheet, 2, 3, 120, 100);
|
ch := book.AddChart(sheet, 2, 3, 120, 100);
|
||||||
|
|
||||||
// Chart properties
|
// Chart properties
|
||||||
ch.Border.Style := clsNoLine;
|
ch.Border.Style := clsNoLine;
|
||||||
@ -65,10 +68,15 @@ begin
|
|||||||
//ser.Regression.Equation.Top := 5;
|
//ser.Regression.Equation.Top := 5;
|
||||||
//ser.Regression.Equation.Left := 5;
|
//ser.Regression.Equation.Left := 5;
|
||||||
|
|
||||||
b.WriteToFile('regression.xlsx', true); // Excel fails to open the file
|
{
|
||||||
b.WriteToFile('regression.ods', true);
|
book.WriteToFile(FILE_NAME + '.xlsx', true); // Excel fails to open the file
|
||||||
|
WriteLn('Data saved with chart to ', FILE_NAME, '.xlsx');
|
||||||
|
}
|
||||||
|
|
||||||
|
book.WriteToFile('regression.ods', true);
|
||||||
|
WriteLn('Data saved with chart to ', FILE_NAME, '.ods');
|
||||||
finally
|
finally
|
||||||
b.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -4,7 +4,9 @@ program write_chart_demo;
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
SysUtils, fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
SysUtils, fpspreadsheet, fpstypes, fpsUtils, fpschart, xlsxooxml, fpsopendocument;
|
||||||
|
|
||||||
const
|
const
|
||||||
|
FILE_NAME = 'test';
|
||||||
// SERIES_CLASS: TsChartSeriesClass = TsAreaSeries;
|
// SERIES_CLASS: TsChartSeriesClass = TsAreaSeries;
|
||||||
// SERIES_CLASS: TsChartSeriesClass = TsBarSeries;
|
// SERIES_CLASS: TsChartSeriesClass = TsBarSeries;
|
||||||
// SERIES_CLASS: TsChartSeriesClass = TsBubbleSeries;
|
// SERIES_CLASS: TsChartSeriesClass = TsBubbleSeries;
|
||||||
@ -16,18 +18,18 @@ const
|
|||||||
r2 = 8;
|
r2 = 8;
|
||||||
FILL_COLORS: array[0..r2-r1] of TsColor = (scRed, scGreen, scBlue, scYellow, scMagenta, scSilver, scBlack, scOlive);
|
FILL_COLORS: array[0..r2-r1] of TsColor = (scRed, scGreen, scBlue, scYellow, scMagenta, scSilver, scBlack, scOlive);
|
||||||
var
|
var
|
||||||
b: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet1, sheet2, sheet3: TsWorksheet;
|
sheet1, sheet2, sheet3: TsWorksheet;
|
||||||
ch: TsChart;
|
ch: TsChart;
|
||||||
ser: TsChartSeries;
|
ser: TsChartSeries;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
b := TsWorkbook.Create;
|
book := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// 1st sheet
|
// 1st sheet
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
sheet1 := b.AddWorksheet('test1');
|
sheet1 := book.AddWorksheet('test1');
|
||||||
sheet1.WriteText(0, 1, '1+sin(x)');
|
sheet1.WriteText(0, 1, '1+sin(x)');
|
||||||
sheet1.WriteText(0, 2, '1+sin(x/2)');
|
sheet1.WriteText(0, 2, '1+sin(x/2)');
|
||||||
sheet1.WriteText(0, 3, 'Bubble Radius');
|
sheet1.WriteText(0, 3, 'Bubble Radius');
|
||||||
@ -54,7 +56,7 @@ begin
|
|||||||
sheet1.WriteNumber(r2, 3, r2*r2);
|
sheet1.WriteNumber(r2, 3, r2*r2);
|
||||||
|
|
||||||
// Create chart
|
// Create chart
|
||||||
ch := b.AddChart(sheet1, 4, 6, 160, 100);
|
ch := book.AddChart(sheet1, 4, 6, 160, 100);
|
||||||
|
|
||||||
// Add first series (type depending on SERIES_CLASS)
|
// Add first series (type depending on SERIES_CLASS)
|
||||||
ser := SERIES_CLASS.Create(ch);
|
ser := SERIES_CLASS.Create(ch);
|
||||||
@ -113,9 +115,9 @@ begin
|
|||||||
ch.XAxis.LabelFont.Color := scRed;
|
ch.XAxis.LabelFont.Color := scRed;
|
||||||
//ch.XAxis.LabelFont.Style := [fssStrikeout];
|
//ch.XAxis.LabelFont.Style := [fssStrikeout];
|
||||||
ch.XAxis.AxisLine.Color := scRed;
|
ch.XAxis.AxisLine.Color := scRed;
|
||||||
ch.XAxis.Caption := 'This is the x axis';
|
ch.XAxis.Title.Caption := 'This is the x axis';
|
||||||
ch.XAxis.CaptionFont.Color := scRed;
|
ch.XAxis.Title.Font.Color := scRed;
|
||||||
ch.XAxis.CaptionFont.Size := 12;
|
ch.XAxis.Title.Font.Size := 12;
|
||||||
//ch.XAxis.Inverted := true;
|
//ch.XAxis.Inverted := true;
|
||||||
ch.XAxis.MajorGridLines.Color := scRed;
|
ch.XAxis.MajorGridLines.Color := scRed;
|
||||||
ch.XAxis.MinorGridLines.Color := scBlue;
|
ch.XAxis.MinorGridLines.Color := scBlue;
|
||||||
@ -127,9 +129,9 @@ begin
|
|||||||
ch.YAxis.LabelFont.Size := 8;
|
ch.YAxis.LabelFont.Size := 8;
|
||||||
ch.YAxis.LabelFont.Color := scBlue;
|
ch.YAxis.LabelFont.Color := scBlue;
|
||||||
ch.YAxis.AxisLine.Color := scBlue;
|
ch.YAxis.AxisLine.Color := scBlue;
|
||||||
ch.YAxis.Caption := 'This is the y axis';
|
ch.YAxis.Title.Caption := 'This is the y axis';
|
||||||
ch.YAxis.CaptionFont.Color := scBlue;
|
ch.YAxis.Title.Font.Color := scBlue;
|
||||||
ch.YAxis.CaptionFont.Size := 12;
|
ch.YAxis.Title.Font.Size := 12;
|
||||||
//ch.YAxis.LabelRotation := 90;
|
//ch.YAxis.LabelRotation := 90;
|
||||||
//ch.YAxis.CaptionRotation := 90;
|
//ch.YAxis.CaptionRotation := 90;
|
||||||
ch.YAxis.Min := -5;
|
ch.YAxis.Min := -5;
|
||||||
@ -163,13 +165,13 @@ begin
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// 2nd sheet
|
// 2nd sheet
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
sheet2 := b.AddWorksheet('test2');
|
sheet2 := book.AddWorksheet('test2');
|
||||||
sheet2.WriteText(0, 0, 'abc');
|
sheet2.WriteText(0, 0, 'abc');
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// 3rd sheet
|
// 3rd sheet
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
sheet3 := b.AddWorksheet('test3');
|
sheet3 := book.AddWorksheet('test3');
|
||||||
sheet3.WriteText(0, 1, 'cos(x)');
|
sheet3.WriteText(0, 1, 'cos(x)');
|
||||||
sheet3.WriteText(0, 2, 'sin(x)');
|
sheet3.WriteText(0, 2, 'sin(x)');
|
||||||
for i := 1 to 7 do
|
for i := 1 to 7 do
|
||||||
@ -180,7 +182,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Create the chart
|
// Create the chart
|
||||||
ch := b.AddChart(sheet3, 1, 3, 125, 95);
|
ch := book.AddChart(sheet3, 1, 3, 125, 95);
|
||||||
|
|
||||||
// Add two series
|
// Add two series
|
||||||
ser := TsLineSeries.Create(ch);
|
ser := TsLineSeries.Create(ch);
|
||||||
@ -210,18 +212,23 @@ begin
|
|||||||
ch.XAxis.MinorGridLines.Style := clsNoLine;
|
ch.XAxis.MinorGridLines.Style := clsNoLine;
|
||||||
ch.YAxis.MajorGridLines.Style := clsNoLine;
|
ch.YAxis.MajorGridLines.Style := clsNoLine;
|
||||||
ch.YAxis.MinorGridLines.Style := clsNoLine;
|
ch.YAxis.MinorGridLines.Style := clsNoLine;
|
||||||
ch.YAxis.CaptionRotation := 90;
|
ch.YAxis.Title.RotationAngle := 90;
|
||||||
ch.XAxis.CaptionFont.Size := 14;
|
ch.XAxis.Title.Font.Size := 14;
|
||||||
ch.YAxis.CaptionFont.Size := 14;
|
ch.YAxis.Title.Font.Size := 14;
|
||||||
ch.XAxis.LabelFont.Style := [fssItalic];
|
ch.XAxis.LabelFont.Style := [fssItalic];
|
||||||
ch.YAxis.LabelFont.Style := [fssItalic];
|
ch.YAxis.LabelFont.Style := [fssItalic];
|
||||||
ch.YAxis.MajorTicks := [catInside, catOutside];
|
ch.YAxis.MajorTicks := [catInside, catOutside];
|
||||||
ch.YAxis.MinorTicks := [catOutside];
|
ch.YAxis.MinorTicks := [catOutside];
|
||||||
|
|
||||||
b.WriteToFile('test.xlsx', true); // Excel fails to open the file
|
{
|
||||||
b.WriteToFile('test.ods', true);
|
book.WriteToFile(FILE_NAME + '.xlsx', true); // Excel fails to open the file
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.xlsx');
|
||||||
|
}
|
||||||
|
|
||||||
|
book.WriteToFile(FILE_NAME + '.ods', true);
|
||||||
|
WriteLn('Data saved with chart in ', FILE_NAME, '.ods');
|
||||||
finally
|
finally
|
||||||
b.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
WriteLn;
|
WriteLn;
|
||||||
|
@ -169,7 +169,6 @@ type
|
|||||||
private
|
private
|
||||||
FCaption: String;
|
FCaption: String;
|
||||||
FRotationAngle: Integer;
|
FRotationAngle: Integer;
|
||||||
FShowCaption: Boolean;
|
|
||||||
FFont: TsFont;
|
FFont: TsFont;
|
||||||
FPosX, FPosY: Double;
|
FPosX, FPosY: Double;
|
||||||
public
|
public
|
||||||
@ -177,10 +176,10 @@ type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
property Caption: String read FCaption write FCaption;
|
property Caption: String read FCaption write FCaption;
|
||||||
property Font: TsFont read FFont write FFont;
|
property Font: TsFont read FFont write FFont;
|
||||||
property ShowCaption: Boolean read FShowCaption write FShowCaption;
|
|
||||||
property RotationAngle: Integer read FRotationAngle write FRotationAngle;
|
property RotationAngle: Integer read FRotationAngle write FRotationAngle;
|
||||||
property PosX: Double read FPosX write FPosX;
|
property PosX: Double read FPosX write FPosX;
|
||||||
property PosY: Double read FPosY write FPosY;
|
property PosY: Double read FPosY write FPosY;
|
||||||
|
property Visible;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TsChartAxisPosition = (capStart, capEnd, capValue);
|
TsChartAxisPosition = (capStart, capEnd, capValue);
|
||||||
@ -196,12 +195,10 @@ type
|
|||||||
FAutomaticMajorInterval: Boolean;
|
FAutomaticMajorInterval: Boolean;
|
||||||
FAutomaticMinorSteps: Boolean;
|
FAutomaticMinorSteps: Boolean;
|
||||||
FAxisLine: TsChartLine;
|
FAxisLine: TsChartLine;
|
||||||
|
FCategoryRange: TsCellRange;
|
||||||
FMajorGridLines: TsChartLine;
|
FMajorGridLines: TsChartLine;
|
||||||
FMinorGridLines: TsChartline;
|
FMinorGridLines: TsChartline;
|
||||||
FInverted: Boolean;
|
FInverted: Boolean;
|
||||||
FCaption: String;
|
|
||||||
FCaptionFont: TsFont;
|
|
||||||
FCaptionRotation: Integer;
|
|
||||||
FLabelFont: TsFont;
|
FLabelFont: TsFont;
|
||||||
FLabelFormat: String;
|
FLabelFormat: String;
|
||||||
FLabelFormatPercent: String;
|
FLabelFormatPercent: String;
|
||||||
@ -211,11 +208,11 @@ type
|
|||||||
FMajorTicks: TsChartAxisTicks;
|
FMajorTicks: TsChartAxisTicks;
|
||||||
FMax: Double;
|
FMax: Double;
|
||||||
FMin: Double;
|
FMin: Double;
|
||||||
FMinorSteps: Double;
|
FMinorCount: Integer;
|
||||||
FMinorTicks: TsChartAxisTicks;
|
FMinorTicks: TsChartAxisTicks;
|
||||||
FPosition: TsChartAxisPosition;
|
FPosition: TsChartAxisPosition;
|
||||||
|
FTitle: TsChartText;
|
||||||
FPositionValue: Double;
|
FPositionValue: Double;
|
||||||
FShowCaption: Boolean;
|
|
||||||
FShowLabels: Boolean;
|
FShowLabels: Boolean;
|
||||||
public
|
public
|
||||||
constructor Create(AChart: TsChart);
|
constructor Create(AChart: TsChart);
|
||||||
@ -225,9 +222,7 @@ type
|
|||||||
property AutomaticMajorInterval: Boolean read FAutomaticMajorInterval write FAutomaticMajorInterval;
|
property AutomaticMajorInterval: Boolean read FAutomaticMajorInterval write FAutomaticMajorInterval;
|
||||||
property AutomaticMinorSteps: Boolean read FAutomaticMinorSteps write FAutomaticMinorSteps;
|
property AutomaticMinorSteps: Boolean read FAutomaticMinorSteps write FAutomaticMinorSteps;
|
||||||
property AxisLine: TsChartLine read FAxisLine write FAxisLine;
|
property AxisLine: TsChartLine read FAxisLine write FAxisLine;
|
||||||
property Caption: String read FCaption write FCaption;
|
property CategoryRange: TsCellRange read FCategoryRange write FCategoryRange;
|
||||||
property CaptionFont: TsFont read FCaptionFont write FCaptionFont;
|
|
||||||
property CaptionRotation: Integer read FCaptionRotation write FCaptionRotation;
|
|
||||||
property Inverted: Boolean read FInverted write FInverted;
|
property Inverted: Boolean read FInverted write FInverted;
|
||||||
property LabelFont: TsFont read FLabelFont write FLabelFont;
|
property LabelFont: TsFont read FLabelFont write FLabelFont;
|
||||||
property LabelFormat: String read FLabelFormat write FLabelFormat;
|
property LabelFormat: String read FLabelFormat write FLabelFormat;
|
||||||
@ -240,12 +235,13 @@ type
|
|||||||
property Max: Double read FMax write FMax;
|
property Max: Double read FMax write FMax;
|
||||||
property Min: Double read FMin write FMin;
|
property Min: Double read FMin write FMin;
|
||||||
property MinorGridLines: TsChartLine read FMinorGridLines write FMinorGridLines;
|
property MinorGridLines: TsChartLine read FMinorGridLines write FMinorGridLines;
|
||||||
property MinorSteps: Double read FMinorSteps write FMinorSteps;
|
property MinorCount: Integer read FMinorCount write FMinorCount;
|
||||||
property MinorTicks: TsChartAxisTicks read FMinorTicks write FMinorTicks;
|
property MinorTicks: TsChartAxisTicks read FMinorTicks write FMinorTicks;
|
||||||
property Position: TsChartAxisPosition read FPosition write FPosition;
|
property Position: TsChartAxisPosition read FPosition write FPosition;
|
||||||
property PositionValue: Double read FPositionValue write FPositionValue;
|
property PositionValue: Double read FPositionValue write FPositionValue;
|
||||||
property ShowCaption: Boolean read FShowCaption write FShowCaption;
|
|
||||||
property ShowLabels: Boolean read FShowLabels write FShowLabels;
|
property ShowLabels: Boolean read FShowLabels write FShowLabels;
|
||||||
|
property Title: TsChartText read FTitle write FTitle;
|
||||||
|
property Visible;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TsChartLegendPosition = (lpRight, lpTop, lpBottom, lpLeft);
|
TsChartLegendPosition = (lpRight, lpTop, lpBottom, lpLeft);
|
||||||
@ -839,11 +835,11 @@ end;
|
|||||||
constructor TsChartText.Create(AChart: TsChart);
|
constructor TsChartText.Create(AChart: TsChart);
|
||||||
begin
|
begin
|
||||||
inherited Create(AChart);
|
inherited Create(AChart);
|
||||||
FShowCaption := true;
|
|
||||||
FFont := TsFont.Create;
|
FFont := TsFont.Create;
|
||||||
FFont.Size := 10;
|
FFont.Size := 10;
|
||||||
FFont.Style := [];
|
FFont.Style := [];
|
||||||
FFont.Color := scBlack;
|
FFont.Color := scBlack;
|
||||||
|
FVisible := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TsChartText.Destroy;
|
destructor TsChartText.Destroy;
|
||||||
@ -864,10 +860,7 @@ begin
|
|||||||
FAutomaticMajorInterval := true;
|
FAutomaticMajorInterval := true;
|
||||||
FAutomaticMinorSteps := true;
|
FAutomaticMinorSteps := true;
|
||||||
|
|
||||||
FCaptionFont := TsFont.Create;
|
FTitle := TsChartText.Create(AChart);
|
||||||
FCaptionFont.Size := 10;
|
|
||||||
FCaptionFont.Style := [];
|
|
||||||
FCaptionFont.Color := scBlack;
|
|
||||||
|
|
||||||
FLabelFont := TsFont.Create;
|
FLabelFont := TsFont.Create;
|
||||||
FLabelFont.Size := 9;
|
FLabelFont.Size := 9;
|
||||||
@ -875,11 +868,7 @@ begin
|
|||||||
FLabelFont.Color := scBlack;
|
FLabelFont.Color := scBlack;
|
||||||
|
|
||||||
FLabelFormatPercent := '0%';
|
FLabelFormatPercent := '0%';
|
||||||
|
|
||||||
FCaptionRotation := 0;
|
|
||||||
FLabelRotation := 0;
|
FLabelRotation := 0;
|
||||||
|
|
||||||
FShowCaption := true;
|
|
||||||
FShowLabels := true;
|
FShowLabels := true;
|
||||||
|
|
||||||
FAxisLine := TsChartLine.Create;
|
FAxisLine := TsChartLine.Create;
|
||||||
@ -907,7 +896,7 @@ begin
|
|||||||
FMajorGridLines.Free;
|
FMajorGridLines.Free;
|
||||||
FAxisLine.Free;
|
FAxisLine.Free;
|
||||||
FLabelFont.Free;
|
FLabelFont.Free;
|
||||||
FCaptionFont.Free;
|
FTitle.Free;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1318,29 +1307,29 @@ begin
|
|||||||
FLegend := TsChartLegend.Create(self);
|
FLegend := TsChartLegend.Create(self);
|
||||||
|
|
||||||
FXAxis := TsChartAxis.Create(self);
|
FXAxis := TsChartAxis.Create(self);
|
||||||
FXAxis.Caption := 'x axis';
|
FXAxis.Title.Caption := 'x axis';
|
||||||
FXAxis.CaptionFont.Style := [fssBold];
|
FXAxis.Title.Font.Style := [fssBold];
|
||||||
FXAxis.LabelFont.Size := 9;
|
FXAxis.LabelFont.Size := 9;
|
||||||
FXAxis.Position := capStart;
|
FXAxis.Position := capStart;
|
||||||
|
|
||||||
FX2Axis := TsChartAxis.Create(self);
|
FX2Axis := TsChartAxis.Create(self);
|
||||||
FX2Axis.Caption := 'Secondary x axis';
|
FX2Axis.Title.Caption := 'Secondary x axis';
|
||||||
FX2Axis.CaptionFont.Style := [fssBold];
|
FX2Axis.Title.Font.Style := [fssBold];
|
||||||
FX2Axis.LabelFont.Size := 9;
|
FX2Axis.LabelFont.Size := 9;
|
||||||
FX2Axis.Visible := false;
|
FX2Axis.Visible := false;
|
||||||
FX2Axis.Position := capEnd;
|
FX2Axis.Position := capEnd;
|
||||||
|
|
||||||
FYAxis := TsChartAxis.Create(self);
|
FYAxis := TsChartAxis.Create(self);
|
||||||
FYAxis.Caption := 'y axis';
|
FYAxis.Title.Caption := 'y axis';
|
||||||
FYAxis.CaptionFont.Style := [fssBold];
|
FYAxis.Title.Font.Style := [fssBold];
|
||||||
FYAxis.CaptionRotation := 90;
|
FYAxis.Title.RotationAngle := 90;
|
||||||
FYAxis.LabelFont.Size := 9;
|
FYAxis.LabelFont.Size := 9;
|
||||||
FYAxis.Position := capStart;
|
FYAxis.Position := capStart;
|
||||||
|
|
||||||
FY2Axis := TsChartAxis.Create(self);
|
FY2Axis := TsChartAxis.Create(self);
|
||||||
FY2Axis.Caption := 'Secondary y axis';
|
FY2Axis.Title.Caption := 'Secondary y axis';
|
||||||
FY2Axis.CaptionFont.Style := [fssBold];
|
FY2Axis.Title.Font.Style := [fssBold];
|
||||||
FY2Axis.CaptionRotation := 90;
|
FY2Axis.Title.RotationAngle := 90;
|
||||||
FY2Axis.LabelFont.Size := 9;
|
FY2Axis.LabelFont.Size := 9;
|
||||||
FY2Axis.Visible := false;
|
FY2Axis.Visible := false;
|
||||||
FY2Axis.Position := capEnd;
|
FY2Axis.Position := capEnd;
|
||||||
|
@ -23,9 +23,14 @@ type
|
|||||||
procedure GetChartFillProps(ANode: TDOMNode; AChart: TsChart; AFill: TsChartFill);
|
procedure GetChartFillProps(ANode: TDOMNode; AChart: TsChart; AFill: TsChartFill);
|
||||||
procedure GetChartLineProps(ANode: TDOMNode; AChart: TsChart; ALine: TsChartLine);
|
procedure GetChartLineProps(ANode: TDOMNode; AChart: TsChart; ALine: TsChartLine);
|
||||||
|
|
||||||
|
procedure ReadChartAxisGrid(ANode, AStyleNode: TDOMNode; AChart: TsChart; Axis: TsChartAxis);
|
||||||
|
procedure ReadChartAxisProps(ANode, AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
|
procedure ReadChartAxisStyle(AStyleNode: TDOMNode; AChart: TsChart; Axis: TsChartAxis);
|
||||||
procedure ReadChartBackgroundStyle(AStyleNode: TDOMNode; AChart: TsChart);
|
procedure ReadChartBackgroundStyle(AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
|
procedure ReadChartCellRange(ANode: TDOMNode; AChart: TsChart; var ARange: TsCellRange);
|
||||||
procedure ReadChartProps(AChartNode, AStyleNode: TDOMNode; AChart: TsChart);
|
procedure ReadChartProps(AChartNode, AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
procedure ReadChartPlotAreaProps(ANode, AStyleNode: TDOMNode; AChart: TsChart);
|
procedure ReadChartPlotAreaProps(ANode, AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
|
procedure ReadChartPlotAreaStyle(AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
procedure ReadChartLegendProps(ANode, AStyleNode: TDOMNode; AChart: TsChart);
|
procedure ReadChartLegendProps(ANode, AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
procedure ReadChartLegendStyle(AStyleNode: TDOMNode; AChart: TsChart);
|
procedure ReadChartLegendStyle(AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
procedure ReadChartTitleProps(ANode, AStyleNode: TDOMNode; AChart: TsChart; ATitle: TsChartText);
|
procedure ReadChartTitleProps(ANode, AStyleNode: TDOMNode; AChart: TsChart; ATitle: TsChartText);
|
||||||
@ -451,6 +456,158 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOpenDocChartReader.ReadChartAxisGrid(ANode, AStyleNode: TDOMNode;
|
||||||
|
AChart: TsChart; Axis: TsChartAxis);
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
styleNode: TDOMNode;
|
||||||
|
grid: TsChartLine;
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(ANode, 'chart:class');
|
||||||
|
case s of
|
||||||
|
'major': grid := Axis.MajorGridLines;
|
||||||
|
'minor': grid := Axis.MinorGridLines;
|
||||||
|
else exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
s := GetAttrValue(ANode, 'chart:style-name');
|
||||||
|
styleNode := FindStyleNode(AStyleNode, s);
|
||||||
|
GetChartLineProps(styleNode, AChart, grid);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOpenDocChartReader.ReadChartAxisProps(ANode, AStyleNode: TDOMNode;
|
||||||
|
AChart: TsChart);
|
||||||
|
var
|
||||||
|
s, styleName, nodeName: String;
|
||||||
|
styleNode, subNode: TDOMNode;
|
||||||
|
axis: TsChartAxis;
|
||||||
|
rng: TsCellRange;
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(ANode, 'chart:name');
|
||||||
|
case s of
|
||||||
|
'primary-x': axis := AChart.XAxis;
|
||||||
|
'primary-y': axis := AChart.YAxis;
|
||||||
|
'secondary-x': axis := AChart.X2Axis;
|
||||||
|
'secondary-y': axis := AChart.Y2Axis;
|
||||||
|
else raise Exception.Create('Unknown chart axis.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
s := GetAttrValue(ANode, 'chart:style-name');
|
||||||
|
styleNode := FindStyleNode(AStyleNode, s);
|
||||||
|
ReadChartAxisStyle(styleNode, AChart, axis);
|
||||||
|
|
||||||
|
subNode := ANode.FirstChild;
|
||||||
|
while subNode <> nil do
|
||||||
|
begin
|
||||||
|
nodeName := subNode.NodeName;
|
||||||
|
case nodeName of
|
||||||
|
'chart:title':
|
||||||
|
ReadChartTitleProps(subNode, AStyleNode, AChart, axis.Title);
|
||||||
|
'chart:categories':
|
||||||
|
begin
|
||||||
|
rng := axis.CategoryRange;
|
||||||
|
ReadChartCellRange(subNode, AChart, rng);
|
||||||
|
axis.CategoryRange := rng;
|
||||||
|
end;
|
||||||
|
'chart:grid':
|
||||||
|
ReadChartAxisGrid(subNode, AStyleNode, AChart, axis);
|
||||||
|
end;
|
||||||
|
subNode := subNode.NextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOpenDocChartReader.ReadChartAxisStyle(AStyleNode: TDOMNode;
|
||||||
|
AChart: TsChart; Axis: TsChartAxis);
|
||||||
|
var
|
||||||
|
nodeName: String;
|
||||||
|
s: String;
|
||||||
|
value: Double;
|
||||||
|
n: Integer;
|
||||||
|
ticks: TsChartAxisTicks = [];
|
||||||
|
begin
|
||||||
|
AStyleNode := AStyleNode.FirstChild;
|
||||||
|
while AStyleNode <> nil do
|
||||||
|
begin
|
||||||
|
nodeName := AStyleNode.NodeName;
|
||||||
|
case nodeName of
|
||||||
|
'style:text-properties':
|
||||||
|
TsSpreadOpenDocReader(Reader).ReadFont(AStyleNode, Axis.LabelFont);
|
||||||
|
'style:graphic-properties':
|
||||||
|
GetChartLineProps(AStyleNode, AChart, Axis.AxisLine);
|
||||||
|
'style:chart-properties':
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:display-label');
|
||||||
|
if s = 'true' then
|
||||||
|
Axis.ShowLabels := true;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:logarithmic');
|
||||||
|
if s = 'true' then
|
||||||
|
Axis.Logarithmic := true;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:minimum');
|
||||||
|
if (s = 'true') and TryStrToFloat(s, value, FPointSeparatorSettings) then
|
||||||
|
begin
|
||||||
|
Axis.Min := value;
|
||||||
|
Axis.AutomaticMin := false;
|
||||||
|
end else
|
||||||
|
Axis.AutomaticMin := true;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:maximum');
|
||||||
|
if (s = 'true') and TryStrToFloat(s, value, FPointSeparatorSettings) then
|
||||||
|
begin
|
||||||
|
Axis.Max := value;
|
||||||
|
Axis.AutomaticMax := false;
|
||||||
|
end else
|
||||||
|
Axis.AutomaticMax := true;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:interval-major');
|
||||||
|
if (s <> '') and TryStrToFloat(s, value, FPointSeparatorSettings) then
|
||||||
|
Axis.MajorInterval := value;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:interval-minor-divisor');
|
||||||
|
if (s <> '') and TryStrToInt(s, n) then
|
||||||
|
Axis.MinorCount := n;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:axis-position');
|
||||||
|
case s of
|
||||||
|
'start':
|
||||||
|
Axis.Position := capStart;
|
||||||
|
'end':
|
||||||
|
Axis.Position := capEnd;
|
||||||
|
else
|
||||||
|
if TryStrToFloat(s, value, FPointSeparatorSettings) then
|
||||||
|
begin
|
||||||
|
Axis.Position := capValue;
|
||||||
|
Axis.PositionValue := value;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ticks := []; // To do: check defaults...
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:tick-marks-major-inner');
|
||||||
|
if s = 'true' then ticks := ticks + [catInside];
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:tick-marks-major-outer');
|
||||||
|
if s = 'true' then ticks := ticks + [catOutside];
|
||||||
|
Axis.MajorTicks := ticks;
|
||||||
|
|
||||||
|
ticks := []; // To do: check defaults...
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:tick-marks-minor-inner');
|
||||||
|
if s = 'true' then ticks := ticks + [catInside];
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:tick-marks-minor-outer');
|
||||||
|
if s = 'true' then ticks := ticks + [catOutside];
|
||||||
|
Axis.MinorTicks := ticks;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:reverse-direction');
|
||||||
|
if s = 'true' then Axis.Inverted := true;
|
||||||
|
|
||||||
|
s := GetAttrValue(AStyleNode, 'style:rotation-angle');
|
||||||
|
if (s <> '') and TryStrToFloat(s, value, FPointSeparatorSettings) then
|
||||||
|
Axis.LabelRotation := Round(value);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
AStyleNode := AStyleNode.NextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOpenDocChartReader.ReadChartBackgroundStyle(AStyleNode: TDOMNode;
|
procedure TsSpreadOpenDocChartReader.ReadChartBackgroundStyle(AStyleNode: TDOMNode;
|
||||||
AChart: TsChart);
|
AChart: TsChart);
|
||||||
var
|
var
|
||||||
@ -469,6 +626,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOpenDocChartReader.ReadChartCellRange(ANode: TDOMNode;
|
||||||
|
AChart: TsChart; var ARange: TsCellRange);
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
rng: TsCellRange;
|
||||||
|
sh1, sh2: String;
|
||||||
|
relFlags: TsRelFlags;
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(ANode, 'table:cell-range-address');
|
||||||
|
if (s <> '') and TryStrToCellRange_ODS(s, sh1, sh2, rng.Row1, rng.Col1, rng.Row2, rng.Col2, relFlags) then
|
||||||
|
// TO DO: sheets are ignored here !!!
|
||||||
|
ARange := rng;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOpenDocChartReader.ReadChartFiles(AStream: TStream;
|
procedure TsSpreadOpenDocChartReader.ReadChartFiles(AStream: TStream;
|
||||||
AFileList: String);
|
AFileList: String);
|
||||||
var
|
var
|
||||||
@ -566,7 +737,48 @@ end;
|
|||||||
|
|
||||||
procedure TsSpreadOpenDocChartReader.ReadChartPlotAreaProps(ANode, AStyleNode: TDOMNode;
|
procedure TsSpreadOpenDocChartReader.ReadChartPlotAreaProps(ANode, AStyleNode: TDOMNode;
|
||||||
AChart: TsChart);
|
AChart: TsChart);
|
||||||
|
var
|
||||||
|
nodeName: String;
|
||||||
|
styleName: String;
|
||||||
|
styleNode: TDOMNode;
|
||||||
begin
|
begin
|
||||||
|
styleName := GetAttrValue(ANode, 'chart:style-name');
|
||||||
|
styleNode := FindStyleNode(AStyleNode, styleName);
|
||||||
|
ReadChartPlotAreaStyle(styleNode, AChart);
|
||||||
|
|
||||||
|
ANode := ANode.FirstChild;
|
||||||
|
while ANode <> nil do
|
||||||
|
begin
|
||||||
|
nodeName := ANode.NodeName;
|
||||||
|
case nodeName of
|
||||||
|
'chart:axis':
|
||||||
|
ReadChartAxisProps(ANode, AStyleNode, AChart);
|
||||||
|
end;
|
||||||
|
ANode := ANode.NextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOpenDocChartReader.ReadChartPlotAreaStyle(AStyleNode: TDOMNode; AChart: TsChart);
|
||||||
|
var
|
||||||
|
nodeName, s: String;
|
||||||
|
begin
|
||||||
|
AStyleNode := AStyleNode.FirstChild;
|
||||||
|
while AStyleNode <> nil do
|
||||||
|
begin
|
||||||
|
nodeName := AStyleNode.NodeName;
|
||||||
|
case nodeName of
|
||||||
|
'style:chart-properties':
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:stacked');
|
||||||
|
if s = 'true' then
|
||||||
|
AChart.StackMode := csmStacked;
|
||||||
|
s := GetAttrValue(AStyleNode, 'chart:percentage');
|
||||||
|
if s = 'true' then
|
||||||
|
Achart.StackMode := csmStackedPercentage;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
AStyleNode := AStyleNode.NextSibling;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOpenDocChartReader.ReadChartLegendProps(ANode, AStyleNode: TDOMNode;
|
procedure TsSpreadOpenDocChartReader.ReadChartLegendProps(ANode, AStyleNode: TDOMNode;
|
||||||
@ -1019,7 +1231,7 @@ begin
|
|||||||
if not Axis.AutomaticMajorInterval then
|
if not Axis.AutomaticMajorInterval then
|
||||||
chartProps := chartProps + Format('chart:interval-major="%g" ', [Axis.MajorInterval], FPointSeparatorSettings);
|
chartProps := chartProps + Format('chart:interval-major="%g" ', [Axis.MajorInterval], FPointSeparatorSettings);
|
||||||
if not Axis.AutomaticMinorSteps then
|
if not Axis.AutomaticMinorSteps then
|
||||||
chartProps := chartProps + Format('chart:interval-minor-divisor="%d" ', [Axis.MinorSteps]);
|
chartProps := chartProps + Format('chart:interval-minor-divisor="%d" ', [Axis.MinorCount]);
|
||||||
|
|
||||||
// Position of the axis
|
// Position of the axis
|
||||||
case Axis.Position of
|
case Axis.Position of
|
||||||
@ -1133,8 +1345,8 @@ begin
|
|||||||
5: axis := AChart.X2Axis;
|
5: axis := AChart.X2Axis;
|
||||||
6: axis := AChart.Y2Axis;
|
6: axis := AChart.Y2Axis;
|
||||||
end;
|
end;
|
||||||
font := axis.CaptionFont;
|
font := axis.Title.Font;
|
||||||
rotAngle := axis.CaptionRotation;
|
rotAngle := axis.Title.RotationAngle;
|
||||||
if AChart.RotatedAxes then
|
if AChart.RotatedAxes then
|
||||||
begin
|
begin
|
||||||
if rotAngle = 0 then rotAngle := 90 else if rotAngle = 90 then rotAngle := 0;
|
if rotAngle = 0 then rotAngle := 90 else if rotAngle = 90 then rotAngle := 0;
|
||||||
@ -1947,13 +2159,13 @@ begin
|
|||||||
inc(AStyleID);
|
inc(AStyleID);
|
||||||
|
|
||||||
// Axis title
|
// Axis title
|
||||||
if Axis.ShowCaption and (Axis.Caption <> '') then
|
if Axis.Title.Visible and (Axis.Title.Caption <> '') then
|
||||||
begin
|
begin
|
||||||
AppendToStream(AChartStream, Format(
|
AppendToStream(AChartStream, Format(
|
||||||
indent + ' <chart:title chart:style-name="ch%d">' + LE +
|
indent + ' <chart:title chart:style-name="ch%d">' + LE +
|
||||||
indent + ' <text:p>%s</text:p>' + LE +
|
indent + ' <text:p>%s</text:p>' + LE +
|
||||||
indent + ' </chart:title>' + LE,
|
indent + ' </chart:title>' + LE,
|
||||||
[ AStyleID, Axis.Caption ]
|
[ AStyleID, Axis.Title.Caption ]
|
||||||
));
|
));
|
||||||
|
|
||||||
// Axis title style
|
// Axis title style
|
||||||
|
Reference in New Issue
Block a user