Форум: "Начинающим";
Текущий архив: 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]
специально ради тебя потрудился написать Project1procedure 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