![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Excel [D7, XP]
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');
...
Пишет "Член группы не наден", т.е. не может найти мой график. Почему? - тоже не пойму!