Требуется подключиться к какому-нибудь офисному приложению через ole (скажем, к word), что делаем в таком случае? Всё просто, помещаем в переменную типа Variant
выражение CreateOleObject('Word.Application')
и дальше по накатанной. Но так оно только кажется. Процедуру CreateOleObject
он не опознаёт, благополучно выдаёт ошибку — компиляция прерывается. Теперь лезем в Delphi 7 открываем созданный в Delphi XE проект… после непродолжительной ругани (непродолжительной, т.к. проект – пустая форма) программа благополучно компилится, CreateOleObject
срабатывает нормально. Но на этом мы не останавливаемся – снова лезем в Delphi XE, открываем перекомпиленный проект – и снова всё замечательно. Никакие новые модули не подключаются, что происходит – непонятно.
То есть в итоге всё работает, но наверняка этого можно было добиться и другими методами. Хотелось бы узнать, что я делаю не так и что надо делать.
ОС – Windows 7 Ultimate x64 (если это имеет значение).
2 / 2 / 0 Регистрация: 25.10.2010 Сообщений: 56 |
|
1 |
|
07.04.2011, 18:23. Показов 16160. Ответов 5
Здравствуйте! помогите разобраться! я набрал код для экспорта данных из БД а Excel, но выдается такая вот ошибка.. [Error]unit4.pas[144]:Undeclared identifier’CreateOleObject’
0 |
iama 1337 / 988 / 119 Регистрация: 30.07.2010 Сообщений: 5,297 |
||||
07.04.2011, 18:24 |
2 |
|||
почему вы код не выложили? Добавлено через 49 секунд
4 |
2 / 2 / 0 Регистрация: 25.10.2010 Сообщений: 56 |
|
07.04.2011, 18:28 [ТС] |
3 |
спасибо за подсказку, да программа длинная очень!! помогло!!!
1 |
3 / 3 / 0 Регистрация: 23.03.2015 Сообщений: 15 |
|
24.07.2015, 13:52 |
4 |
Действительно, ответ короткий, но действенный
0 |
0 / 0 / 0 Регистрация: 20.12.2018 Сообщений: 1 |
|
10.12.2019, 13:08 |
5 |
Spasibo
0 |
aminodovborisov 0 / 0 / 0 Регистрация: 03.12.2019 Сообщений: 7 |
||||||||
10.01.2020, 12:11 |
6 |
|||||||
У меня ещё интереснее.
Это присутствует, ошибка сохраняется.
Добавлено через 8 минут
0 |
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Соблюдайте общие правила форума
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
… (продолжение следует) …
Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки — бан.
Мат в разделе — бан на три месяца…
Полезные ссылки:
MSDN Library FAQ раздела Поиск по разделу Как правильно задавать вопросы
Выразить свое отношение к модераторам раздела можно здесь: Rouse_, Krid
Ошибка при вызове CreateOleObject()
, как устранить ошибку?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
У меня следующий код:
procedure TForm1.Button1Click(Sender: TObject); var vExcel:Variant; begin try vExcel:=GetActiveOleObject(‘Excel.Application’); except try vExcel:=CreateOleObject(‘Excel.Application’); except ShowMessage(‘Excel open error’); end; end; end; Обе OLE фунции выдают ошику ‘Microsoft Office Excel — обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства’. Как выяснилось ошибку генерирует DW32.exe. |
Krid |
|
Moderator Рейтинг (т): 237 |
Цитата y307 @ 28.05.06, 08:53 Как выяснилось ошибку генерирует DW32.exe А что есть DW32.exe ? |
y307 |
|
Находится в Program FilesCommon FilesMicrosoft SharedDWDW20.EXE и назывыется |
Krid |
|
Moderator Рейтинг (т): 237 |
Понятно. А офис переустановить не пробовал? |
Mr.Delphist |
|
DW32 — это Доктор Ватсон, системная тулза, которая рапортует об ошибках. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Система, Windows API
- Следующая тема
[ Script execution time: 0,0255 ] [ 16 queries used ] [ Generated: 3.06.23, 23:37 GMT ]
← →
denary
(2003-03-14 01:30)
[0]
Undeclared identifier: «CreateOleObject» Уважаемые мастера, помогите утопающему! Не могу выкинуть DataSet в Excel.
Что ему сделать, чтоб оно заработало? Вот текст процедуры:
uses ….. Variants, Excel2000, ADODB;
…..
procedure TForm2.ToExcelClick(Sender: TObject);
var
BeginCol, BeginRow, j :integer;
RowCount, ColCount :integer;
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData :Variant;
Begin
BeginCol:=1;
BeginRow:=9;
RowCount:=Form2.Query1.RecordCount;
ColCount:=Form2.Query1.FieldDefs.Count;
ExcelApp := CreateOleObject(«Excel.Application»); — не работает, выдает ошибку
{ExcelOLEObject1.Create(Query1);
ExcelApp := ExcelOLEObject1.Copy;}
ExcelApp.Application.EnableEvents:=false;
Workbook:=ExcelApp.WorkBooks.Add(«D:usersGeo1.xls»);
ArrayData:=VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
Form2.Query1.DisableControls;
Form2.Query1.First;
While Not Form2.Query1.Eof do
begin
for J:=1 to Form2.Query1.FieldDefs.Count do
begin
ArrayData[Form2.Query1.RecNo, J]:=Form2.Query1.Fields[j-1].Value;
End;
Form2.Query1.Next;
End;
Form2.Query1.EnableControls;
Cell1 :=WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
Cell2 :=WorkBook.WorkSheets[1].Cells[BeginRow + RowCount -1, BeginCol + ColCount -1];
Range:= WorkBook.WorkSheets[1].Range[Cell1, Cell2];
Range.Value:=ArrayData;
ExcelApp.Visible:=true;
end;
← →
theodor_iv
(2003-03-14 03:51)
[1]
В uses дописать модуль ComObj
← →
denary
(2003-03-18 00:55)
[2]
В uses дописал все, что можно было. Не работает!
Может кто-нибудь объяснить?
← →
theodor_iv
(2003-03-18 03:38)
[3]
> ExcelApp := CreateOleObject(«Excel.Application»); — не работает,
> выдает ошибку
Может, хотя бы скажешь, какая ошибка?
← →
denary
(2003-03-21 01:17)
[4]
Ошибку написал в самом начале:
Undeclared identifier: «CreateOleObject»
← →
Palladin
(2003-03-21 01:37)
[5]
> denary (21.03.03 01:17)
тебе в самом начале ответили
uses comobj;
← →
denary
(2003-03-22 01:00)
[6]
Спасибо за помощь, работает.
Была грамматическая ошибка.
Господа мастера, извините за тупость
In a Delphi XE7 64-bit VCL program, the unit Vcl.OleAuto
cannot be found:
[dcc64 Fatal Error] Unit1.pas(33): F1026 File not found: 'Vcl.OleAuto.dcu'
While it works without problems in a 32-bit program:
uses
Vcl.OleAuto;
...
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
So how can I use CreateOleObject
in a 64-bit program?
asked Feb 20, 2015 at 13:50
user1580348user1580348
5,6914 gold badges41 silver badges102 bronze badges
0
Although the source code for Vcl.OleAuto
is still supplied, the 64 bit lib
directory does not include Vcl.OleAuto.dcu
. Instead you are expected to use System.Win.ComObj
and/or System.Win.ComServ
. Note that the source for Vcl.OleAuto
marks that unit as being deprecated, and tells you what to use instead.
If we look through the source for Vcl.OleAuto
we can find some 32 bit asm code that has not been ported. Presumably Embarcadero decided not to port this to 64 bit because the unit is deprecated.
answered Feb 20, 2015 at 14:08
David HeffernanDavid Heffernan
599k42 gold badges1064 silver badges1481 bronze badges
0