Все диаграммы рабочей книги объединены в коллекцию Charts, свойства и
методы которой позволяют добавлять новые диаграммы, хранить, удалять и
обеспечивать доступ к любой диаграмме коллекции. Коллекция Charts име-
ет такие же свойства, как любая другая коллекция объектов Excel, но есть и
некоторые отличия, обусловленные свойствами диаграммы, т. к. диаграмма
может находиться на листе вместе с другими данными или занимать отдель-
ный лист. Поэтому диаграмма и лист рабочей книги, а также коллекции,
которым они принадлежат, могут иметь общие свойства и методы, которые
придется учитывать при программировании приложений(1).
Для того чтобы создать новую диаграмму, а затем манипулировать общим
списком диаграмм и получать доступ к отдельной диаграмме, достаточно
воспользоваться одним свойством и двумя методами коллекции Charts.
Свойство Count имеет тип Integer, его значение равно количеству диаграмм
в рабочей книге. Метод Add создает новую диаграмму и возвращает ссылку
на нее. Метод Item() возвращает ссылку на созданную ранее диаграмму,
принадлежащую коллекции Charts. Аргументом метода Item() является по-
рядковый номер (индекс) или имя диаграммы в коллекции. Во втором слу-
чае аргументом метода Item является строка, содержащая имя диаграммы.
Индексом может быть целое число со значением в диапазоне от 1
до Charts.Count.
Следующие две процедуры демонстрируют, как можно создать диаграмму,
получив ссылку на нее, или получить доступ к существующей диаграмме
с помощью индекса.
Создание диаграммы и получение доступа к существующей диаграмме
procedure TForm1.Button1Click(Sender: TObject);
begin
Chart:=E.Charts.Add;
Chart.ChartType:=xl3DColumn;
Chart.SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item[2].
Range['Al:F5'],PlotBy:=xlColumns);
end;
procedure TForml.ButtonlClick(Sender: TObject);
begin
Chart:=E.Charts.Item[1];
end;
Результат выполнения первой процедуры, использующей метод Add, пред-
ставлен на рис. 14.1.
РИС. 14.1. Диаграмма, созданная на отдельном листе
Первая процедура состоит из трех операторов: первый создает диаграмму и
возвращает ссылку нее, два других, используя полученную ссылку, опреде-
ляют область значений для построения диаграммы и ее тип. Без этих двух
операторов мы получили бы только пустую область диаграммы. Тип диа-
граммы определяется значением свойства ChartType объекта Chart, имею-
щим целый тип и выбираемым из нескольких десятков констант. Метод
SetSourceData определяет диапазон данных (область ячеек) листа рабочей
книги, по которым будет строиться диаграмма. Первый аргумент этого ме-
тода определяет адрес области, второй — порядок использования ячеек в
заданной области.
Важной характеристикой диаграммы также является место, где расположена
сама диаграмма, определяемое с помощью метода Location объекта Chart.
У этого метода два аргумента. Первый аргумент (типа Integer) определяет,
будет диаграмма находиться на отдельном листе или на обычном листе с
данными. Если выбран второй вариант, то второй аргумент метода Location
определяет имя листа, на котором будет располагаться диаграмма.
В нашем случае диаграмма создана на отдельном листе. С помощью сле-
дующих процедур переместим ее на первый лист рабочей книги — туда, где
располагаются данные для построения диаграммы, затем переместим обрат-
но на отдельный лист (полный пример исходного текста приложения пред-
ставлен на сопроводительном компакт-диске книги).
Перемещение диаграммы на лист с данными
const
xlLocationAsNewSheet=l;
xlLocationAsObject=2;
procedure TForml.Button2Click(Sender: TObject);
begin
Chart.Location(Where:=xlLocationAsObject, Ыате:='Лист1');
Chart:=E.ActiveChart;
end;
procedure TForml.Button3Click(Sender: TObject);
begin
Chart.Location(Where:=xlLocationAsNewSheet);
Chart:=E.ActiveChart;
end;
Обратите внимание на то, что после вызова метода Location необходимо
снова получать ссылку на объект ActiveChart, т. к. переменная Chart после
переноса диаграммы на новый лист уже не содержит ссылку на диаграмму.
В имеющемся на сопроводительном компакт-диске книги примере прило-
жения эти процедуры будут правильно работать, если создана только одна
диаграмма. Если их будет больше, то вам придется изменить исходный
текст приложения.
На рис. 14.2 представлена диаграмма, которая была перенесена с отдельного
листа. Обратите внимание на область ячеек в верхнем левом углу листа —
она определена как область исходных данных.
Рис. 14.2. Диаграмма, перемещенная на лист с данными
Заполним первую строку области исходных данных диаграммы (т. е. область
подписей делений) определенными значениями, а ячейки, определяющие
значения точек данных, — случайными числами. Для этого можно исполь-
зовать следующие процедуры.
Заполнение области исходных данных для диаграммы
function SetValueRange(sheet:variant; range:string;
value__:variant) .-boolean;
begin
SetValueRange:=True;
try
E.ActiveWorkbook.Sheets.Item[sheet].Range[range]:=value_;
except
SetValueRange:=False ;
end;
end;
procedure TForml.Button4Click(Sender: TObject);
var a_:integer;
begin
randomize;
SetValueRange('Лист1','A1','AAAA');
SetValueRangeI('Лист1',' 'B1','BBBB');
SetValueRangeI('ЛИСТ1','C1','CCCC');
SetValueRange('Лист1', 'D1','AAAA1 );
SetValueRange('Лист1','E1','BBBB');
SetValueRange('Лист!','F1','CCCC');
for a__:=2 to 5 do begin
SetValueRange('Лист1','A'+inttostr(a_),a_-l);
SetValueRange('Лист1','В'+inttostr(a_),random(1000));
SetValueRange('Лист1','C'+inttostr(a_),random(l000));
SetValueRange('Лист!','D'+inttostr(a_),random(l000));
SetValueRangeCJlMcrl', 'E'+inttostr (a_), random (1000)) ;
SetValueRange('Лист1',"F'+inttostr(a_),random(1000));
end;
end;
Результат выполнения данных процедур представлен на рис. 14.3.
Рис. 14.3. Заполняем диаграмму исходными данными
1 Диаграмма может располагаться на отдельном листе, поэтому доступ к ней может быть таким
же, как к листу. Например: если диаграмма расположена на первом листе, то ее можно уда-
лить как лист (оператор Application.ActiveWorkbook.Sheets.Item(l).Delete;) или как диаграмму
(оператор Application.ActiveWorkbook.Charts.Item(l).Delete;). Результат будет одним и тем же. |