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

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

Delphi vs Макросы Excel [D7, XP]


Страницы:   1 2

Neket ©   (2008-02-26 12:34:00) 

Подскажите возможно ли совместное использование инструментов 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)+')';
А потом в самос екселе добавить = то тогда все нормально вычисляется.
Подскажите в чем может быть дело?


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

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


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


> 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;
    procedureActivate(lcid: Integer); dispid 304;
...

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

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

propertyActivate


Palladin   (2008-02-26 14:35:00) [3]

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


Palladin   (2008-02-26 14:34:00) [4]

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


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

Воооотттт В том то и дело... Что если первый Шит у тебя уже активен то тогда Да, ошибочка вылетает.
А попробуй либо условием задать, либо поставить
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:24:00) [6]

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


Palladin   (2008-02-26 14:24:00) [7]


> 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


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

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


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


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


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

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

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


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


> Neket   (26.02.08 14:13) [12]

ошибка будет


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

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


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


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


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

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

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

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

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


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

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


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 13:54:00) [14]


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


Не может это

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

работать.


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


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


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


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

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

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


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


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


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


> Одинаково


А как насчет Formula Local?


Neket   (2008-02-26 13:02:00) [17]

У меня так:
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 12:54:00) [18]

А если так

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

?


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

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

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


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


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


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


Страницы:   1 2

Наверх

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