Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Excel [D7, XP]


Страницы:   1 2

nickmas ©   (2006-01-29 22:59:00) 

Помогите разобраться с графиком: как из Delphi изменить размер и положение графика в Excel-e?

  На VBA это выглядит так:

ActiveSheet.Shapes("Диагр. 1").ScaleWidth 0.78, msoFalse, msoScaleFromTopLeft

   ActiveSheet.Shapes("Диагр. 1").ScaleHeight 0.7, msoFalse, msoScaleFromTopLeft

   ActiveSheet.Shapes("Диагр. 1").IncrementLeft 117#

   ActiveSheet.Shapes("Диагр. 1").IncrementTop -69#

 
  А вот как из Delphi реализовать подобное - не соображу.


Digitman   (2006-01-31 12:24:00) [21]

Ты, чудо, откуда взял определение ид-ра xlXYScatterSmooth ?
Подключил в USES некий Excel_XXX_TLB.pas ?
Если да , то накой тебе позднее связывание с его геморроем, скажи на милость ?


nickmas   (2006-01-31 12:12:00) [22]


> Digitman ©   (30.01.06 12:40) [7]



> var
> Worksheet: OLEVariant;
> ...
> Worksheet := Workbook.Worksheets.Item(1);

Та же ошибка - "Член группы не наден". А вот если заменить круглые скобки на квадратные

var
Worksheet: OLEVariant;
...
Worksheet := Workbook.Worksheets.Item[1];

и указанный выше рабочий лист стал находить.

Но подобные видоизменения не помогли моему случаю с диаграммой - "Член группы не наден"!

Предложенную статью почитал, изучил - синтаксис вроде оформлен у меня так как надо, также перепробовал другие способы - все тоже: "Член группы не наден"!

Вылаживаю полностью процедуру, может кто конкретно укажет на мою ошибку:

procedure TForm1.Button1Click(Sender: TObject);
var
 WBk: OleVariant;
 Excel: Variant;
 FilePath: string;
 Worksheet: OLEVariant;
begin
 FilePath:='C:\Temp\output.xls';

 if FileExists(FilePath) then
   try
     Excel:=CreateOleObject('Excel.Application');
     WBk:= Excel.WorkBooks.Open(FilePath);
     Excel.Sheets['Массив X-ов'].Cells.Clear;
     //Создаем график
     Excel.Charts.Add;
     Excel.Charts[1].ChartType:=xlXYScatterSmooth;
     Excel.Charts[1].SeriesCollection.NewSeries;
     //Добавляем данные
     Excel.Charts[1].SeriesCollection[1].XValues:=VarArrayOf([1,2,3]);
     Excel.Charts[1].SeriesCollection[1].Values:=VarArrayOf([1,3,2]);
     //Привязываем график
     Excel.ActiveChart.Location(xlLocationAsObject,'Массив X-ов');
     //Настраиваем график
     Excel.ActiveChart.SeriesCollection[1].Border.ColorIndex:=3;
     Excel.ActiveChart.SeriesCollection[1].Border.Weight:=xlThin;
     Excel.ActiveChart.SeriesCollection[1].Border.LineStyle:=xlContinuous;
     Excel.ActiveChart.SeriesCollection[1].MarkerBackgroundColorIndex:=3;
     Excel.ActiveChart.SeriesCollection[1].MarkerForegroundColorIndex:=1;
     Excel.ActiveChart.SeriesCollection[1].MarkerStyle:=xlCircle;
     Excel.ActiveChart.SeriesCollection[1].Smooth:=True;
     Excel.ActiveChart.SeriesCollection[1].MarkerSize:=3;
     Excel.ActiveChart.SeriesCollection[1].Shadow:=False;
     //Изменяем размеры графика - !ошибка здесь!
     Worksheet:=WBk.Worksheets.Item[1];
     Worksheet.Shapes['Chart 1'].ScaleWidth(1,'msoFalse','msoScaleFromTopLeft');
     
     //или      
     //Excel.Sheets['Массив X-ов'].Shapes['Chart 1'].ScaleWidth(1,'msoFalse','msoScaleFromTopLeft');
     
     WBk.Close(SaveChanges:= True);
     Excel.Quit;
   except
     WBk.Close(SaveChanges:= False);
     Excel.Quit;
     MessageBox(Handle,'Не могу сохранить экспериментальные данные в Excel!','Ошибка',16);
   end;
 
end;


Digitman   (2006-01-30 12:40:00) [23]


> nickmas   (30.01.06 12:05) [6]


> Очень интересная и позновательная информация


... и дана она тебе не для развлечения и не для общего, тэкскэть, развития, а для самостоятельного получения ответа на свой вопрос.

У тебя используется позднее связывание, вот и смотри там примеры обращения к объектам-коллекциям и их элементам для этоготипа связывания.

Пример оттуда (обращение к рабочему листу как к 1-му элементу коллекции Worksheets некоей книги Workbook, которая сама является элементом коллекции ExcelApp.Workbooks):

var
Worksheet: OLEVariant;
...
Worksheet := Workbook.Worksheets.Item(1);


nickmas   (2006-01-30 12:05:00) [24]

Спасибо Digitman!

  Очень интересная и позновательная информация (особенно с сайта "Королевство Делфи"), но ответа на свой вопрос я пока еще  не нашел.


Digitman   (2006-01-30 11:07:00) [25]

http://articles.org.ru/cfaq/index.php?qid=1793&frommostrecent=yes


nickmas   (2006-01-30 11:01:00) [26]

А проблема осталась та же...


nickmas   (2006-01-30 10:59:00) [27]

Так книгу я открываю, просто не указал эту строчку в предидущем посте:

Var
WBk: OleVariant;
Excel: Variant;
...
Excel:=CreateOleObject('Excel.Application');
WBk:= Excel.WorkBooks.Open('C:\Temp\output.xls');
... //здесь создается диаграмма - работает нормально
Excel.Sheets[1].Shapes[1].ScaleWidth(1,'msoFalse','msoScaleFromTopLeft');
...


EvS   (2006-01-30 09:02:00) [28]

А где Workbook? Открой книгу а уже потом обращайся к листам.


nickmas   (2006-01-30 08:31:00) [29]

Пробовал следующим образом:

Var
 Excel: Variant;
...
Excel:=CreateOleObject('Excel.Application');
Excel.Sheets[1].Shapes[1].ScaleWidth(1,'msoFalse','msoScaleFromTopLeft');
...

Пишет "Член группы не наден", т.е. не может найти мой график. Почему? - тоже не пойму!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо