Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1203529658
voe
2008-02-20 20:47
2008.03.23
работа с координатами.


15-1202657329
No_Dead
2008-02-10 18:28
2008.03.23
«Пиратское» железо%)


15-1202477787
Сатир
2008-02-08 16:36
2008.03.23
Рейтинг языков программирования


15-1202596765
Германн
2008-02-10 01:39
2008.03.23
Найдите N разниц


2-1203632100
максим
2008-02-22 01:15
2008.03.23
хук в dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский