Коллекция Charts

   
На этом шаге мы рассмотрим создание диаграммы.

   
Все диаграммы рабочей книги объединены в коллекцию Charts, свойствам методы которой позволяют добавлять
новые диаграммы, хранить, удалять и обеспечивать доступ к любой диаграмме коллекции. Коллекция Charts имеет
такие же свойства, как любая другая коллекция объектов Excel, но есть и некоторые отличия, обусловленные
свойствами диаграммы, т.к. диаграмма может находиться на листе вместе с другими данными или занимать отдельный
лист. Поэтому диаграмма и лист рабочей книги, а также коллекции, которым они принадлежат, могут иметь общие
свойства и методы, которые придется учитывать при программировании приложений.

   
Замечание.
Диаграмма может располагаться на отдельном листе, поэтому доступ к ней может быть таким же, как к листу.
Например: если диаграмма расположена на первом листе, то ее можно удалить как лист (оператор
Application.ActiveWorkbook.Sheets.Item(l).Delete;) или как диаграмму (оператор
Application.ActiveWorkbook.Charts.Item(l).Delete;). Результат будет одним и тем же.

   
Для того чтобы создать новую диаграмму, а затем манипулировать общим списком диаграмм и получать доступ к
отдельной диаграмме, достаточно воспользоваться одним свойством и двумя методами коллекции Charts.
Свойство Count имеет тип Integer, его значение равно количеству диаграмм в рабочей книге. Метод
Add создает новую диаграмму и возвращает ссылку на нее. Метод Item() возвращает ссылку на
созданную ранее диаграмму, принадлежащую коллекции Charts. Аргументом метода Item() является
порядковый номер (индекс) или имя диаграммы в коллекции. Во втором случае аргументом метода Item является
строка, содержащая имя диаграммы. Индексом может быть целое число со значением в диапазоне от 1 до Charts.Count.

   
Следующая процедура демонстрирует, как можно создать диаграмму, получив ссылку на нее, а ниже расположенная строка -
как получить доступ к существующей диаграмме с помощью индекса.

    Chart:=E.Charts.Item[1];
procedure TForm1.Button3Click(Sender: TObject);
//Добавление диаграммы и получение ссылки на нее
var
  i:Integer;
const xl3DColumn=-4100;
      xlColumns=2;
begin
  Chart:=E.Charts.Add;
  Chart.ChartType:=xl3DColumn;
  Chart.SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item['Лист1'].Range['A1:F5'],
     PlotBy:=xlColumns);
end;

   
Результат выполнения процедуры, использующей метод Add, представлен на рисунке 1.


Рис.1. Диаграмма, созданная на отдельном листе

   
Процедура состоит из трех операторов: первый создает диаграмму и возвращает ссылку нее, два других,
используя полученную ссылку, определяют область значений для построения диаграммы и ее тип. Без этих
двух операторов мы получили бы только пустую область диаграммы. Тип диаграммы определяется значением
свойства ChartType объекта Chart, имеющим целый тип и выбираемым из нескольких десятков
констант. Метод SetSourceData определяет диапазон данных (область ячеек) листа рабочей книги, по
которым будет строиться диаграмма. Первый аргумент этого метода определяет адрес области, второй -
порядок использования ячеек в заданной области.

   
Приведем полный текст приложения.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  Chart:Variant;
{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и отображение окна
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание рабочей книги
begin
  E.WorkBooks.Add;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Добавление диаграммы и получение ссылки на нее
var
  i:Integer;
const xl3DColumn=-4100;
      xlColumns=2;
begin
  Randomize;
  for i:=1 to 5 do
  begin
    E.ActiveSheet.Cells(1,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(2,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(3,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(4,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(5,i):=i*(1+Random(50));
  end;
  Chart:=E.Charts.Add;
  Chart.ChartType:=xl3DColumn;
  Chart.SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item['Лист1'].Range['A1:F5'],
     PlotBy:=xlColumns);
end;

end.

Текст этого приложения можно взять здесь (6,2 Кб).

   
В заключение отметим, что помимо значения параметра PlotBy xlColumns, равного 2, можно использовать
также константу xlRows, которая имеет значение 1.

   
В следующей таблице приведены константы, определяющие тип диаграммы.

Таблица 1. Константы, определяющие тип диаграммы

КонстантаЗначение
xl3DArea-4098
xl3DAreaStacked78
xl3DAreaStacked10079
xl3DBarClustered60
xl3DBarStacked61
xl3DBarStacked10062
xl3DColumn-4100
xl3DColumnClustered54
xl3DColumnStacked55
xl3DColumnStacked10056
xl3DLine-4101
xl3DPie-4102
xl3DPieExploded70
xlArea1
xlAreaStacked76
xlAreaStacked10077
xlBarClustered57
xlBarOfPie71
xlBarStacked58
xlBarStacked10059
xlBubble15
xlBubble3DEffect87
xlColumnClustered51
xlColumnStacked52
xlColumnStacked10053
xlConeBarClustered102
xlConeBarStacked103
xlConeBarStacked100104
xlConeCol105
xlConeColClustered99
xlConeColStacked100
xlConeColStacked100101
xlCylinderBarClustered95
xlCylinderBarStacked96
xlCylinderBarStacked10097
xlCylinderCol98
xlCylinderColClustered92
xlCylinderColStacked93
xlCylinderColStacked10094
xlDoughnut-4120
xlDoughnutExploded80
xlLine4
xlLineMarkers65
xlLineMarkersStacked66
xlLineMarkersStacked10067
xlLineStacked63
xlLineStacked10064
xlPie5
xlPieExploded69
xlPieOfPie68
xlPyramidBarClustered109
xlPyramidBarStacked110
xlPyramidBarStacked100111
xlPyramidCol112
xlPyramidColClustered106
xlPyramidColStacked107
xlPyramidColStacked100108
xlRadar-4151
xlRadarFilled82
xlRadarMarkers81
xlStockHLC88
xlStockOHLC89
xlStockVHLC90
xlStockVOHLC91
xlSurface83
xlSurfaceTopView85
xlSurfaceTopViewWireframe86
xlSurfaceWireframe84
xlXYScatter-4169
xlXYScatterLines74
xlXYScatterLinesNoMarkers75
xlXYScatterSmooth72
xlXYScatterSmoothNoMarkers73

   
На следующем шаге мы продолжим изучение этого вопроса.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий