Уже несколько лет делаю все отчеты с Delphi через Excel. Сейчас про-
блема — есть шаблон с подготовленной диаграммой, и не знаю, как
к ней обратиться.
Когда раньше создавал ее сам (из программы), проблем не было, а вот до уже
существующей на листе диаграммы почему-то не достучаться — все ошибки
получаются, если по индексу или по имени (как в макросах Excel сам ее назы-
вает). Мне надо максимальное значение шкалы Y установить на заданную ве-
личину. Вот фрагмент кода:
XLApp:=Excel_TLB.CoApplication_.Create;
WorkBks:=XLApp.WorkBooks as WorkBooks;
WorkBks:=XLApp.WorkBooks ;
Workbk:=XLApp.Workbooks.Add(ExtractFilePath(ParamStr(0))+
'ShablonXpareto.xlt', 0);
ASheets:=Workbk.Worksheets,•
Worksheet:=ASheets.Item['изделия'] as _Worksheet;
//А дальше все ошибки при разных вариантах
// AChart:=ASheets.Item ["Диаграмма].1] as Chart;
// AChart:=XLApp.Workbooks.Item[1].Charts[1] As Chart;
// AChart:=WorkSheet.ChartObjects('Диагр. 1',EmptyParam) As Chart;
Доступ к созданным ранее диаграммам обеспечивается через элементы кол-
лекции ChartObjects с помощью позднего связывания. В свою очередь эта
коллекция принадлежит листу рабочей книги. Посредством свойств и мето-
дов этой коллекции мы получаем список диаграмм, а затем, используя имя
или индекс диаграммы, получаем доступ к выбранной диаграмме.
Получение списка диаграмм
procedure TForml.Button2Click(Sender: TObject);
var a_:integer;
begin
ListBoxl.Items.Clear;
for a_:=l to E.ActiveWorkBook.ActiveSheet.ChartObjects.Count do begin
ListBoxl.Items.Add{E.ActiveWorkBook.ActiveSheet.
ChartObjects.Item[a_].name);
end;
end;
На основании списка диаграмм, предварительно загруженного в компонент
ListBoxl, получаем ссылку на диаграмму, выбранную пользователем, и из-
меняем ее свойства.
Получение доступа к существующей диаграмме и изменение ее свойств
procedure TForml.ListBoxlClick(Sender: TObject);
begin
Chart:=E.ActiveWorkBook.ActiveSheet.ChartObj ects.
Item[ListBoxl.Itemlndex+l];
end;
procedure T0KBottomDlg2.SpinEditlChange(Sender: TObject);
begin
Chart.Left:=SpinEdit1.Value;
end;
procedure T0KBottomDlg2.SpinEdit2Change(Sender: TObject);
begin
Chart.Top:=SpinEdit2.Value;
end;
|