На этом шаге мы рассмотрим метод, позволяющий определить местоположение диаграммы.
Важной характеристикой диаграммы также является место, где расположена сама диаграмма, определяемое с помощью метода Location объекта Chart. У этого метода два аргумента. Первый аргумент (типа Integer) определяет, будет диаграмма находиться на отдельном листе или на обычном листе с данными. Если выбран второй вариант, то второй аргумент метода Location определяет имя листа, на котором будет располагаться диаграмма.
В приложении с прошлого шага диаграмма создана на отдельном листе. С помощью следующих процедур переместим ее на первый лист рабочей книги - туда, где располагаются данные для построения диаграммы, затем переместим обратно на отдельный лист.
. . . . const xlLocationAsNewSheet=1; //Размещение диаграммы на новом листе xlLocationAsObject=2; //Размещение диаграммы на листе с данными . . . . procedure TForm1.Button4Click(Sender: TObject); //Перемещение диаграммы на лист с данными begin Chart.Location(Where:=xlLocationAsObject, Name:='Лист1'); Chart:=E.ActiveChart; end; procedure TForm1.Button5Click(Sender: TObject); //Перемещение диаграммы на новый лист begin Chart.Location(Where:=xlLocationAsNewSheet); Chart:=E.ActiveChart; end;
Обратите внимание на то, что после вызова метода Location необходимо снова получать ссылку на объект ActiveChart, т. к. переменная Chart после переноса диаграммы на новый лист уже не содержит ссылку на диаграмму.
На рисунках 1 и 2 приведены результаты работы приложения.
Рис.1. Диаграмма на листе с данными
Рис.2. Диаграмма на отдельном листе
Вот полный текст приложения.
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; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:variant; Chart:Variant; const xlLocationAsNewSheet=1; //Размещение диаграммы на новом листе xlLocationAsObject=2; //Размещение диаграммы на листе с данными {$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; procedure TForm1.Button4Click(Sender: TObject); //Перемещение диаграммы на лист с данными begin Chart.Location(Where:=xlLocationAsObject, Name:='Лист1'); Chart:=E.ActiveChart; end; procedure TForm1.Button5Click(Sender: TObject); //Перемещение диаграммы на новый лист begin Chart.Location(Where:=xlLocationAsNewSheet); Chart:=E.ActiveChart; end; end.
На следующем шаге мы рассмотрим тип диаграммы.