Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

Delphi vs Макросы Excel   Найти похожие ветки 

 
Neket   (2008-02-26 12:34) [0]

Подскажите возможно ли совместное использование инструментов Delphi
и макросов Excel.
Объясню поподробнее.
Имеется экселевский шаблон. Я посредством Delphi вытягиваю из БД данные, обрабатываю их и вывожу в документ Excel. Но некоторые механизмы вычисления хотелось заложить в Сам эексель.
Для этого был написан макрос. (Одна функция) но если я прописываю в ячейку такую команду :
XL.Sheets[2].Cells.Item[i+19, 21].Formula:="=BB2AB(G"+Inttostr(i+19)+";R"+Inttostr(i+19)+")";
То вылетает ошибка. Тип которой не совсем понятен.
Но если записать так:
XL.Sheets[2].Cells.Item[i+19, 21].Formula:="BB2AB(G"+Inttostr(i+19)+";R"+Inttostr(i+19)+")";
А потом в самос екселе добавить = то тогда все нормально вычисляется.
Подскажите в чем может быть дело?


 
Сергей М. ©   (2008-02-26 12:37) [1]

FormulaR1C1


 
Neket   (2008-02-26 12:42) [2]

Не не помогает. Такая же ошибка.


 
Сергей М. ©   (2008-02-26 12:43) [3]


> Такая же ошибка.


Какая ? Секретная ?)


 
Neket   (2008-02-26 12:50) [4]

Project Project1.exe raised exeption class EOleException with message "OLE error 800A03EC". Process stopped.

Судя по коду наверное закриптованная ;-)


 
Сергей М. ©   (2008-02-26 12:54) [5]

А если так

XL.Sheets[2].Activate;
ActiveSheet.Cells.Item[i+19, 21].Formula:="=BB2AB(G"+Inttostr(i+19)+";R"+Inttostr(i+19)+")";

?


 
Neket   (2008-02-26 13:02) [6]

У меня так:
If XL.Sheets[2].activate=false then XL.Sheets[3].activate:=true;
XL.Sheets[2].Cells.Item[i+19, 21].Formula:="=BB2AB(G"+Inttostr(i+19)+";R"+Inttostr(i+19)+")";


Но попробовал и по твоему. Одинаково.


 
Сергей М. ©   (2008-02-26 13:13) [7]


> У меня так:
> If XL.Sheets[2].activate=false


Что за ерунда ?
У объекта WorkSheet нет св-ва Activate. Есть метод Activate.


> Одинаково


А как насчет FormulaLocal ?


 
Neket   (2008-02-26 13:51) [8]


> Что за ерунда ?
> У объекта WorkSheet нет св-ва Activate. Есть метод Activate

Ну повсей вероятности он может возвращать булевское значение. Потому как рабтает ;-)

Опа... Заработало... Спасибо. А что это такое?
FormulaLocal ?


 
Сергей М. ©   (2008-02-26 13:54) [9]


> Потому как рабтает


Не может это

XL.Sheets[3].activate:=true;

работать.


> что это такое?


Справку уже проштудировал ?


 
Neket   (2008-02-26 14:00) [10]

Ага.... Проштудировал.
Ещё разок спасибо.


XLApp:=CreateOleObject("Excel.Application");
XL:=XLApp.Workbooks.Add("C:\template.xls");
If XL.Sheets[2].activate=false then XL.Sheets[3].activate:=true;


Ещё раз повторюсь работает.
И почему ты думаеш что это метот а не свойство?


 
Сергей М. ©   (2008-02-26 14:06) [11]


> почему ты думаеш что это метот а не свойство?


Я ничего не думаю, сам Excel (2000) мне об этом говорит при попытке выполнить макрос:

Sub Макрос1()
"
" Макрос1 Макрос
" Макрос записан 26.02.2008 (xxxxxx)
"

"
   Sheets("Лист1").Activate = True
End Sub

Дословный текст сообщения об ошибке при выполнении этого макроса:

Нельзя установить свойство Activate объекта Worksheet


 
Neket   (2008-02-26 14:13) [12]

)))) Ну Ок... Согласен.
Но попробуй выполнить этот кусочек кода в Дельфях... И он отработается.;-)


 
Palladin ©   (2008-02-26 14:16) [13]


> Neket   (26.02.08 14:13) [12]

ошибка будет


 
Сергей М. ©   (2008-02-26 14:19) [14]


> попробуй выполнить этот кусочек кода в Дельфях


Пусть хоть заработается - даже пробовать не буду)

Activate - это глагол, а глагол - это действие, а действие - это метод.

Глупо пытаться присваивать действию значение)


 
Neket   (2008-02-26 14:22) [15]

Ладно вы спецы... Спорить бесполезно. Но это работает.  И это факт.
Все всем спасибо.


 
Palladin ©   (2008-02-26 14:24) [16]


> Neket   (26.02.08 14:22) [15]

специально ради тебя потрудился написать Project1

procedure TForm1.Button1Click(Sender: TObject);
var
xl:olevariant;
begin
xl:=createoleobject("Excel.Application");
xl.Sheets[1].Activate:=True;
xl.Quit;
xl:=Unassigned;
end;


ошибка

офис 2k, d6


 
Palladin ©   (2008-02-26 14:24) [17]

попробуй, может все таки у тебя тоже ошибка?


 
Neket   (2008-02-26 14:31) [18]

Воооотттт В том то и дело... Что если первый Шит у тебя уже активен то тогда Да, ошибочка вылетает.
А попробуй либо условием задать, либо поставить
procedure TForm1.Button1Click(Sender: TObject);
var
xl:olevariant;
begin
xl:=createoleobject("Excel.Application");
xl.Sheets[2].Activate:=True; // Главное что-бы шит был не активен
xl.Quit;
xl:=Unassigned;
end;


 
Palladin ©   (2008-02-26 14:34) [19]

а чего вот то? ошибка


 
Palladin ©   (2008-02-26 14:35) [20]

сам то уже попробовал в project1 ?


 
Сергей М. ©   (2008-02-26 14:40) [21]


> Neket


Ну ты и фрукт)

Специально для тех кто в танке цитирую tlb.pas от  Excel2000:

 _WorksheetDisp = dispinterface
   ["{000208D8-0000-0000-C000-000000000046}"]
   property Application: ExcelApplication readonly dispid 148;
   property Creator: XlCreator readonly dispid 149;
   property Parent: IDispatch readonly dispid 150;
   procedure Activate(lcid: Integer); dispid 304;
...

Выделенное жирным видишь ?)

А теперь процитируй здесь тот же самый файл, но на предмет наличия в нем строки

property Activate


 
Neket   (2008-02-26 15:33) [22]

Ладно... Спорить надоело...
Скажу одно... У меня работает. Все как надо. Но я использую ExcelXP



Страницы: 1 вся ветка

Текущий архив: 2008.03.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
15-1202596765
Германн
2008-02-10 01:39
2008.03.23
Найдите N разниц


3-1193655575
Ega23
2007-10-29 13:59
2008.03.23
Есть ли готовый потомок TDataLink в VCL


6-1183112626
Barsky
2007-06-29 14:23
2008.03.23
Как считать значение checkbox с формы документа?


2-1204060105
Res
2008-02-27 00:08
2008.03.23
Генератор


15-1202751088
Human
2008-02-11 20:31
2008.03.23
Микрофон с наушниками для Skype