На этом шаге мы рассмотрим создание диаграммы.
Все диаграммы рабочей книги объединены в коллекцию Charts, свойствам методы которой позволяют добавлять новые диаграммы, хранить, удалять и обеспечивать доступ к любой диаграмме коллекции. Коллекция Charts имеет такие же свойства, как любая другая коллекция объектов Excel, но есть и некоторые отличия, обусловленные свойствами диаграммы, т.к. диаграмма может находиться на листе вместе с другими данными или занимать отдельный лист. Поэтому диаграмма и лист рабочей книги, а также коллекции, которым они принадлежат, могут иметь общие свойства и методы, которые придется учитывать при программировании приложений.
Для того чтобы создать новую диаграмму, а затем манипулировать общим списком диаграмм и получать доступ к отдельной диаграмме, достаточно воспользоваться одним свойством и двумя методами коллекции 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.
В заключение отметим, что помимо значения параметра PlotBy xlColumns, равного 2, можно использовать также константу xlRows, которая имеет значение 1.
В следующей таблице приведены константы, определяющие тип диаграммы.
Константа | Значение |
---|---|
xl3DArea | -4098 |
xl3DAreaStacked | 78 |
xl3DAreaStacked100 | 79 |
xl3DBarClustered | 60 |
xl3DBarStacked | 61 |
xl3DBarStacked100 | 62 |
xl3DColumn | -4100 |
xl3DColumnClustered | 54 |
xl3DColumnStacked | 55 |
xl3DColumnStacked100 | 56 |
xl3DLine | -4101 |
xl3DPie | -4102 |
xl3DPieExploded | 70 |
xlArea | 1 |
xlAreaStacked | 76 |
xlAreaStacked100 | 77 |
xlBarClustered | 57 |
xlBarOfPie | 71 |
xlBarStacked | 58 |
xlBarStacked100 | 59 |
xlBubble | 15 |
xlBubble3DEffect | 87 |
xlColumnClustered | 51 |
xlColumnStacked | 52 |
xlColumnStacked100 | 53 |
xlConeBarClustered | 102 |
xlConeBarStacked | 103 |
xlConeBarStacked100 | 104 |
xlConeCol | 105 |
xlConeColClustered | 99 |
xlConeColStacked | 100 |
xlConeColStacked100 | 101 |
xlCylinderBarClustered | 95 |
xlCylinderBarStacked | 96 |
xlCylinderBarStacked100 | 97 |
xlCylinderCol | 98 |
xlCylinderColClustered | 92 |
xlCylinderColStacked | 93 |
xlCylinderColStacked100 | 94 |
xlDoughnut | -4120 |
xlDoughnutExploded | 80 |
xlLine | 4 |
xlLineMarkers | 65 |
xlLineMarkersStacked | 66 |
xlLineMarkersStacked100 | 67 |
xlLineStacked | 63 |
xlLineStacked100 | 64 |
xlPie | 5 |
xlPieExploded | 69 |
xlPieOfPie | 68 |
xlPyramidBarClustered | 109 |
xlPyramidBarStacked | 110 |
xlPyramidBarStacked100 | 111 |
xlPyramidCol | 112 |
xlPyramidColClustered | 106 |
xlPyramidColStacked | 107 |
xlPyramidColStacked100 | 108 |
xlRadar | -4151 |
xlRadarFilled | 82 |
xlRadarMarkers | 81 |
xlStockHLC | 88 |
xlStockOHLC | 89 |
xlStockVHLC | 90 |
xlStockVOHLC | 91 |
xlSurface | 83 |
xlSurfaceTopView | 85 |
xlSurfaceTopViewWireframe | 86 |
xlSurfaceWireframe | 84 |
xlXYScatter | -4169 |
xlXYScatterLines | 74 |
xlXYScatterLinesNoMarkers | 75 |
xlXYScatterSmooth | 72 |
xlXYScatterSmoothNoMarkers | 73 |
На следующем шаге мы продолжим изучение этого вопроса.