|
qwrty40 0 / 0 / 0 Регистрация: 22.11.2013 Сообщений: 3 |
||||
|
1 |
||||
|
22.11.2013, 02:54. Показов 10989. Ответов 5 Метки нет (Все метки)
Доброго времени суток, коллеги!
По нажатию кнопки ничего не происходит (Excel не запускается, по ошибке не вываливается и т.д.). Если же Excel предварительно запущен руками, все (работа с книгой, листами, ячейками) отрабатывает корректно. Подскажите, плз, что я делаю не так?
0 |
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
22.11.2013, 02:54 |
|
Ответы с готовыми решениями: Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом Сижу, ругаюсь матом в голос потому, что регулярка срабатывает на одном текстовом…
Undeclared identifier ‘CreateOleObject’ я набрал код для экспорта данных из БД а Excel, но… CreateOleObject Монопольный режим 5 |
|
mss |
|
22.11.2013, 09:12
|
|
Не по теме:
ничего не происходит (Excel не запускается «Видишь суслика ? И я не вижу. А он есть..» (с) ДМБ
0 |
|
Mawrat 13097 / 5878 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||
|
22.11.2013, 13:17 |
3 |
|||
|
По нажатию кнопки ничего не происходит (Excel не запускается, по ошибке не вываливается и т.д.). А как определено, что Excel не запускается? Т. е., был открыт диспетчер задач Windows и оказалось, что в списке отсутствует процесс excel.exe? Или окно MS Excel не показалось и это было воспринято, как «Excel не запускается»?
0 |
|
0 / 0 / 0 Регистрация: 22.11.2013 Сообщений: 3 |
|
|
22.11.2013, 21:17 [ТС] |
4 |
|
Именно через диспетчер задач.
0 |
|
qwrty40 0 / 0 / 0 Регистрация: 22.11.2013 Сообщений: 3 |
||||
|
24.11.2013, 00:38 [ТС] |
5 |
|||
|
Ответ с другого форума: Если вы протрассируете метод, то после прохождения строчки
увидите, что excel.exe присутствует в списке процессов, но при выходе из метода вариантная переменная автоматически очищается и Excel закрывается. Соответственно, нужно изменить область видимости переменной MyExcel. Помогло.
0 |
|
Mawrat 13097 / 5878 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||||||
|
24.11.2013, 03:48 |
6 |
|||||||
|
Сейчас проверил — да, точно, при обнулении ссылки Excel выгружается. Здесь, оказывается, есть особенность. Если создать (или загрузить с диска) рабочую книгу, то при обнулении ссылок MS Excel не выгрузится:
При выходе из этого метода Excel продолжит работу.
Если предполагается, что работа с рабочей книгой будет выполняться в том же методе, где есть вызов CreateOleObject(‘Excel.Application’), то надёжнее будет оставить объявление интерфейсных переменных на локальном уровне.
0 |
Working with excel in delphi by this way is a bit hard because you can not clearly see the suggestions.
I’ll paste some of the codes I have with Variant and Excel so you can use it.
uses
System.Win.ComObj, Excel2010
...
procedure GerarExcel(ADBGrid: TDBGrid; AQuery: TFDQuery);
var
Excel: Variant;
linha, coluna, I, X: Integer;
begin
{Here you create the Excel Application Object}
Excel := CreateOleObject('Excel.Application');
{If you want to open the excel you can set this line to True.
In case you want to save directly without user intervention you can set to False.}
Excel.Visible :=True;
Excel.Workbooks.Add;
{In this case
Titles begin on the (4) line and different columns (1-7)}
Excel.WorkBooks[1].Sheets[1].Cells[4,1].Interior.ColorIndex := 55;
Excel.WorkBooks[1].Sheets[1].Cells[4,1].Font.ColorIndex := 2;
Excel.WorkBooks[1].Sheets[1].Cells[4,1].Font.Bold := True;
Excel.WorkBooks[1].Sheets[1].Cells[4,1].font.size := 10;
Excel.WorkBooks[1].Sheets[1].Cells[4,1] := 'Your Title 2';
Excel.WorkBooks[1].Sheets[1].Cells[4,1].ColumnWidth := 15;
...
Excel.WorkBooks[1].Sheets[1].Cells[4,7].Interior.ColorIndex := 55;
Excel.WorkBooks[1].Sheets[1].Cells[4,7].Font.ColorIndex := 2;
Excel.WorkBooks[1].Sheets[1].Cells[4,7].Font.Bold := True;
Excel.WorkBooks[1].Sheets[1].Cells[4,7].font.size := 10;
Excel.WorkBooks[1].Sheets[1].Cells[4,7] := 'Your Title 7';
Excel.WorkBooks[1].Sheets[1].Cells[4,7].ColumnWidth := 17;
Excel.WorkBooks[1].Sheets[1].Cells[4,7].HorizontalAlignment := 4;
Excel.WorkBooks[1].Sheets[1].Cells[4,7].verticalAlignment := 1;
I := 1;
{In case you want to loop through a TClientDateSet to fill in the cells}
with AQuery do
begin
First;
while not Eof do
begin
{To change to a specific format}
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 1].NumberFormat := 'dd/mm/aaaa';
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 1] := FieldByName(C_DATA).AsDateTime;
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 2] := FieldByName(C_CONTA_CREDITO).AsString;
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 3] := FieldByName(C_CONTA_DEBITO).AsString;
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 4].NumberFormat := 'R$#.##0,00';
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 4] := FieldByName(C_VALOR).AsString;
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 5] := FieldByName(C_DESCRICAO).AsString;
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 6] := FieldByName(C_NOME).AsString;
Excel.WorkBooks[1].Sheets[1].Cells[I + 4, 7] := FieldByName(C_NOME_MOVIMENTO).AsString;
Inc(I);
Next;
end;
end;
{All these variables configure the for landscape printing.}
Excel.ActiveSheet.PageSetup.RightFooter := 'Página &P de &N';
Excel.ActiveSheet.PageSetup.LeftFooter := '&D';
Excel.ActiveSheet.PageSetup.Orientation := 2;
Excel.ActiveSheet.PageSetup.PaperSize := xlPaperA4;
Excel.ActiveSheet.PageSetup.FitToPagesTall := False;
Excel.ActiveSheet.PageSetup.Zoom := False;
Excel.ActiveSheet.PageSetup.FitToPagesWide := 1;
{If you want the user to see the excel being opened and save it wherever the user wants
You are done here.}
{Save the file automatically
If you want the user to NOT see the excel being opened and save the file in a specific folder automatically
In the beginning you need to set Visible := False and then these lines}
FilePath := 'C:\...\my_excel_file.xlsx';
if FileExists(FilePath) then
DeleteFile(FilePath);
Excel.WorkBooks[1].Sheets[1].SaveAs(FilePath);
Excel.Quit;
end;
In the VBA API Microsoft documentation you can find more.
|
|
|
|

Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Соблюдайте общие правила форума
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
… (продолжение следует) …
Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки — бан.
Мат в разделе — бан на три месяца…
Полезные ссылки: 



Выразить свое отношение к модераторам раздела можно здесь: 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 @ Как выяснилось ошибку генерирует DW32.exe А что есть DW32.exe ? |
|
y307 |
|
|
Находится в Program Files\Common Files\Microsoft Shared\DW\DW20.EXE и назывыется |
Krid |
|
|
Moderator Рейтинг (т): 237 |
Понятно. А офис переустановить не пробовал? |
|
Mr.Delphist |
|
|
DW32 — это Доктор Ватсон, системная тулза, которая рапортует об ошибках. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Система, Windows API
- Следующая тема
[ Script execution time: 0,0583 ] [ 16 queries used ] [ Generated: 22.09.23, 11:20 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:\users\Geo1.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]
Спасибо за помощь, работает.
Была грамматическая ошибка.
Господа мастера, извините за тупость 
You are not logged in. Please login or register.

Active topics Unanswered topics
Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Pages 1
You must login or register to post a reply
1 2019-07-22 17:28:37
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Topic: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Данная ошибка возникает при попытке импорта или экспорта таблицы в Excel.
Переустановка Office ничего не дала.
Трехнедельные танцы с бубнами по найденным в инете идеям в виде внесения изменений в реестр, изменения прав доступа к объектам и тому подобное, успехов не принесли.
Более того, оказывается сама microsoft открещивается от своего офиса в вопросах автоматизации: https://support.microsoft.com/ru-ru/hel … -of-office
Т.е. она говорит, что при использовании механизма OLE обращение к Office может сработать, а может и нет.
Прямо как у меня — на некоторых ПК все работает нормально, а на одном — возникает ошибка.
Кстати, к Ворду тоже обращение не проходит.
Для эксперимента повторил модуль экспорта на Delphi (создание файла Excel).
Запустил два раза — создание файлов прошло нормально, а третий раз — ошибка приложения-сервера.
И теперь всегда только ошибка возникает.
Вообще — фантастика! Как будто где-то пробка
…
Как рекомендует Microsoft, надо работать с Excel без OLE.
На эту тему нашел готовый модуль для Delphi: http://www.delphisources.ru/pages/faq/b … t_ole.html
Поскольку сам я не силен в Delphi, просьба проверить работу этого кода и если работает включить его в MVD.
2 Reply by mikhail_a 2019-07-23 08:31:02
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Ну да, может неверно названо.
У меня проблема в том, что независимо от того, установлен Excel на ПК или нет, детектирование наличия Excel средствами MVD или Delphi всегда дает положительный результат.
Т.е. Result := (CLSIDFromProgID(‘Excel.Application’, CLSID) = S_OK); всегда возвращает ОК.
А вот дальше механизм OLE не срабатывает.
Спотыкается на CreateOleObject(‘Excel.Application’);
Причем, это самое OLE не работает и для Ворда.
…
Но, проблема оказалась еще шире.
У меня есть кнопка, которая открывает файл, указанный в соотв. поле файла.
Т.е. есть такая команда: OpenFile(Form1.DBFile_1.Text);
Эта команда открывает файл документа программой, который ассоциирован с данным расширением файла.
Так вот оказывается, если у меня установлена ассоциация расширения .doc с, например, LibreOffice, то файл открывается нормально.
Но, если .doc ассоциирован с Вордом, то открытия файла не происходит.
Но и никакой ошибки не появляется.
При этом, сам Ворд и Excel работают нормально и как положено открывают файлы из проводника.
Вообще ничего не понимаю.
Может у кого есть идеи?
3 Reply by mikhail_a 2019-07-23 09:24:45
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Да, наверно, проблему можно решить чисткой реестра от офиса.
Но, я о другом — существующие в MVD (Delphi) средства работы с офисом через OLE не рекомендуются самим Microsoft.
И как доказательство обоснованности их опасений — проблемы на моем ПК.
Я сам разрабатываю программу для работы нескольких пользователей и имею возможность попытаться пофиксить на своем ПК проблемы реестра windows.
Но, если такие же проблемы будут у тех, кто будет пользоваться моей программой, то это станет неразрешимой проблемой.
Хотелось бы иметь в MVD такое решение экспорта-импорта в Excel, которое было бы независимо от OLE, если его Microsoft не рекомендует.
Сейчас же я не могу добиться того, чтобы MVD(Delphi) проверяло бы реальную работоспособность OLE механизма на конкретном ПК и если есть какие-то проблемы с этим, то хотя бы сообщало об этом, а не зависала бы на длительный срок с последующим выпаданием в исключение.
4 Reply by mikhail_a 2019-07-23 11:47:27
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Try не спасает.
На коде CreateOleObject Delphi зависает на две минуты (засекал), а потом выдает свое исключение.
Поймать его своей обработкой ошибки заключив этот код в Try не получается.
Да и ждать появления обработки в течение двух минут не лучший вариант.
5 Reply by DriveSoft 2019-07-24 10:04:07
- DriveSoft
- Administrator
- Offline
- Registered: 2014-02-14
- Posts: 10,294
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Почему просто не использовать отчеты для експорта данных в Excel или OpenOffice?
Dmitry.
6 Reply by mikhail_a 2019-07-24 11:09:10
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Отчеты не получается использовать для экспорта напрямую в Excel по той же причине — они общаются с Excel через OLE.
Попытка экспорта из отчета в Excel дает ту же ошибку.
…
Однако, если делать экспорт отчета в Open Document Spreadsheet (т.е. в файл .ods) и, при этом, ассоциировать расширение ods с Excel, то после диалога сохранения файла успешно открывается Excel и в нем корректно отражены все данные.
Т.е. проблема экспорта в Excel действительно может быть решена с помощью отчетов.
…
Подскажите, пожалуйста, как передать данные с формы из таблицы в отчет без его отображения (чтобы был выбран экспорт в Open Document Spreadsheet) и сразу открылся диалог сохранения ods файла, а потом открылся Excel?
…
И есть ли еще какой-то альтернативный способ импорта данных из xls и xlsx файлов, который бы не использовал Excel?
7 Reply by DriveSoft 2019-07-25 10:44:46
- DriveSoft
- Administrator
- Offline
- Registered: 2014-02-14
- Posts: 10,294
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
mikhail_a wrote:
Подскажите, пожалуйста, как передать данные с формы из таблицы в отчет без его отображения (чтобы был выбран экспорт в Open Document Spreadsheet) и сразу открылся диалог сохранения ods файла, а потом открылся Excel?
В настройках кнопки выберитк OpenOffice (ods)
procedure Form1_bReport_OnAfterClick (Sender: string);
begin
OpenFile(Form1.frxODSExport1.FileName); // в данном свойстве будет имя ods файла
end;
begin
Form1.frxODSExport1.OpenAfterExport := False;
end.
Dmitry.
8 Reply by mikhail_a 2019-07-26 15:31:29 (edited by mikhail_a 2019-07-26 15:33:51)
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Удалось решить проблему с экспортом в Excel.
Оказывается причиной проблем был китайский WPS Office.
Это самый сильный конкурент Microsoft Office.
Видимо при инсталляции он себя где-то прописывает и в результате подменяет собой Excel.
На втором ПК у нас стоит WPS2019 и при экспорте в Excel открывается именно WPS2019.
Т.е. у WPS2019 полностью совпадает с Excel способ общения по OLE.
А у меня стоял WPS2016, который я установил после деинсталляции WPS2019 (он мне не очень понравился и я откатился на версию 2016).
Стоило мне деинсталлировать WPS2016, как сразу стал нормально работать экспорт в Excel.
Безобразие китайское…
Но, осталось наследие в отношении Ворда — не открываются файлы doc командой OpenFile, если ассоциация таких файлов связана с Word.
Никаких ошибок не выпадает. Просто ничего не происходит когда кликаешь по кнопке, которая должна открыть файл doc.
Если же ассоциировать файлы doc с LibreOffice — то они нормально открываются Либроофисом.
Есть ли у кого-нибудь идеи как заставить OpenFile открывать файлы именно Вордом?
9 Reply by mikhail_a 2019-07-29 17:16:02
- mikhail_a
- Member
- Offline
- Registered: 2017-05-30
- Posts: 254
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Оба предложенных варианта открытия файлов с помощью ворда работают.
Однако, файл договора может быть не только в ворде, но и в pdf или, вообще, в картинке.
Т.е. надо определять расширение файла перед открытием и либо открывать файл универсальной командой OpenFile (Filename) либо (если doc или docx) открывать командой OpenFile(Filename, ‘winword’).
Существует ли функция для определения расширения файла?
Или надо разбирать текстовое название файла, чтобы понять его расширение?
10 Reply by DriveSoft 2019-07-29 17:26:16
- DriveSoft
- Administrator
- Offline
- Registered: 2014-02-14
- Posts: 10,294
Re: Ошибка при выполнении приложения-сервера, ProgID: «Excel.Application»
Posts: 10
Pages 1
You must login or register to post a reply

Результат запроса отрабатывает в консоли, но не отрабатывает в модуле






