Delphi excel вызов был отклонен

Sokol666

0 / 0 / 0

Регистрация: 03.04.2016

Сообщений: 69

1

Ошибка «Вызов был отклонен» при выводе отчёта

13.05.2016, 22:10. Показов 12133. Ответов 11

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Делаю вывод отчёта в Excel, сам отчёт выводится только на половину и вылезает ошибка!
Выкладываю всю процедуру! Мало ли…

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
procedure TRaspisanie.sBitBtn3Click(Sender: TObject);
Var
 XLApp,Sheet,Colum:Variant;
 index,i:Integer;
begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;
 XLApp.Workbooks.Add(-4167);
 XLApp.Workbooks[1].WorkSheets[1].Name:='Расписание';
 Colum:=XLApp.Workbooks[1].WorkSheets['Расписание'].Columns;
 Colum.Columns[1].ColumnWidth:=20;
 Colum.Columns[2].ColumnWidth:=20;
 Colum.Columns[3].ColumnWidth:=20;
 Colum.Columns[4].ColumnWidth:=30;
 
 
 Colum:=XLApp.Workbooks[1].WorkSheets['Расписание'].Rows;
 Colum.Rows[2].Font.Bold:=true;
 Colum.Rows[1].Font.Bold:=true;
 Colum.Rows[1].Font.Color:=clRed;
 Colum.Rows[1].Font.Size:=14;
 
 Sheet:=XLApp.Workbooks[1].WorkSheets['Расписание'];
 Sheet.Cells[1,2]:='Расписание работы врачей';
 Sheet.Cells[2,1]:='ФИО';
 Sheet.Cells[2,2]:='День недели';
 Sheet.Cells[2,3]:='Время начала приёма';
 Sheet.Cells[2,4]:='Время окончания приёма';
 
 
 index:=3;
 AT.Raspisanie.First;
 for i:=0 to AT.Raspisanie.RecordCount-1 do
  begin
   Sheet.Cells[index,1]:=AT.Raspisanie.Fields.Fields[3].AsString;
   Sheet.Cells[index,2]:=AT.Raspisanie.Fields.Fields[4].AsString;
   Sheet.Cells[index,3]:=FormatDateTime('dddddd', AT.Raspisanie.Fields.Fields[5].AsDateTime);
    Sheet.Cells[index,4]:=FormatDateTime('dddddd', AT.Raspisanie.Fields.Fields[6].AsDateTime);
   Inc(index);
   AT.Raspisanie.Next;
   end;
end;

Ясно что проблема в цикле, но решить её не получается!



0



1073 / 986 / 340

Регистрация: 07.08.2012

Сообщений: 2,790

13.05.2016, 22:20

2

Ошибка сильно секретная?
Может быть в данных null где-то затесался.



0



0 / 0 / 0

Регистрация: 03.04.2016

Сообщений: 69

13.05.2016, 23:03

 [ТС]

3

А блин, точняк…

Миниатюры

Ошибка "Вызов был отклонен" при выводе отчёта
 

Ошибка "Вызов был отклонен" при выводе отчёта
 



0



1073 / 986 / 340

Регистрация: 07.08.2012

Сообщений: 2,790

13.05.2016, 23:13

4

Цитата
Сообщение от Sokol666
Посмотреть сообщение

А блин, точняк…

Что сие значит?
Ошибка осталась?



0



0 / 0 / 0

Регистрация: 03.04.2016

Сообщений: 69

13.05.2016, 23:16

 [ТС]

5

Ошибка осталась, дело в том что он часть данных в Excel выводит а часть не выводит! И вылезает ошибка! Т каждый раз данных выводится разное количество! 1 раз может 6 строк вывести а в другой раз 10…



0



1073 / 986 / 340

Регистрация: 07.08.2012

Сообщений: 2,790

14.05.2016, 07:09

6

Пробуем:
XLApp.DisplayAlerts := False; //душить любые предупреждения

Не поможет, тогда придется выкладывать проект с БД.

Еще надо следить чтобы Ексель не болался в памяти (если в диспетчере задач обнаружен — пристрелить).

Добавлено через 7 часов 49 минут
Кстати, при таком экспорте данных визуализация Екселя (XLApp.Visible := true) обязательно должна быть после цикла.



1



5501 / 4296 / 1379

Регистрация: 14.04.2014

Сообщений: 19,295

Записей в блоге: 19

14.05.2016, 08:03

7

временно поставьте вместо данных из датасета просто константы
‘aaa’
‘bbb’ и т.д.
посмотрите что выйдет, чтобы исключить NULL и проблемы датасета



1



3392 / 2043 / 654

Регистрация: 29.05.2013

Сообщений: 8,778

14.05.2016, 10:04

8

CoInitialize(nil);
Обращение к ком-объектам
CoUnInitialize;



1



0 / 0 / 0

Регистрация: 03.04.2016

Сообщений: 69

15.05.2016, 13:49

 [ТС]

9

Ошибка гуляет в цикле от одной строчки к другой! Параметр в датасете изменил, ничего не поменялось, хотя сегодня с утра когда запустил, ошибка не возникала! А через часа 2 работы компьютера снова начала появляться…



0



1073 / 986 / 340

Регистрация: 07.08.2012

Сообщений: 2,790

15.05.2016, 15:48

10

Цитата
Сообщение от Скандербег
Посмотреть сообщение

визуализация Екселя (XLApp.Visible := true) обязательно должна быть после цикла

Сделано?



0



0 / 0 / 0

Регистрация: 03.04.2016

Сообщений: 69

15.05.2016, 15:58

 [ТС]

11

Да сделано, я его сразу забыл добавить.



0



1073 / 986 / 340

Регистрация: 07.08.2012

Сообщений: 2,790

15.05.2016, 17:36

12

Цитата
Сообщение от Sokol666
Посмотреть сообщение

я его сразу забыл добавить

А это к чему относится? «Он» — это что? И речь шла не о добавлении, а о переносе.

Даже если будет выложен проект с БД, не факт что кто-то догадается в чем причина проблемы.
Ну а без проекта шансов выяснить причину нет вообще.



0



 
Oleg_teacher
 
(2011-01-13 22:54)
[0]

Пишу приложение которое обрабатывает ексель файл:
excell_ap:=CreateOleObject(«Excel.application»);
excell_ap.Visible:=False;
excell_doc:=excell_ap.workbooks.OPEN(s);
excell_sh:=excell_doc.worksheets[1];
потом идут строки обработки ячеек листа
например там….s:=excell_sh.Cells.Item[i,j].Value;
excell_doc.Close(0);
Проблема в следующем… у меня обработка етих данных может занять несколько минут или секунд. И если я во время выполнения сам вручную запущу какую нибуть книга и начну ее редактировать то моя прога вываливает ошибку. Как можна етого избежать?

project proga.exe raised exception class EolesysError with message «Вызов был отклонен»


 
KilkennyCat ©
 
(2011-01-14 00:46)
[1]

вообще-то странно. при работе через оле, я предполагал, должно делаться офисом риад-онли запускаемому файлу второй раз.
может, для этого надо что-то специально указать…
лично я бы посоветовал нативную работу с файлом, если сие позволительно. правда, бесплатных компонент не встречал.


 
Германн ©
 
(2011-01-14 00:50)
[2]


> вообще-то странно.

Даже ещё более странно. Ибо в вопросе неявно подразумевается что прога и отдельно Ексель работают с совсем разными документами.


 
Oleg_teacher
 
(2011-01-14 00:59)
[3]

совершенно верно ето даже не та самая книга!!! Ошибка может не сразу вылезти, может бывает часто нада 10-20 сек. че то поисправлять в открытом «вручную» документе.


 
KilkennyCat ©
 
(2011-01-14 01:09)
[4]

а, я невнимательно прочитал, акцентируясь на ошибке.
с 2003 офисом такой проблемы не наблюдал. мож аппаратно-рограммное что-то… тестировалось на одной машине, или на других тож самое?


 
Oleg_teacher
 
(2011-01-14 01:16)
[5]

смотрел на 3 машинах при офисе 2003 и офисе 2007.


 
Германн ©
 
(2011-01-14 01:27)
[6]


> Oleg_teacher   (14.01.11 00:59) [3]
>
> совершенно верно ето даже не та самая книга!!! Ошибка может
> не сразу вылезти, может бывает часто нада 10-20 сек. че
> то поисправлять в открытом «вручную» документе.
>

Значит (на 99%) ошибка в программе. Но где и какая — тебе искать. Бог в помощь!


 
Oleg_teacher
 
(2011-01-14 01:34)
[7]

то есть дело не в офисе? Спс, за помощь… буду тогда смотреть.


 
Германн ©
 
(2011-01-14 01:45)
[8]


> Oleg_teacher   (14.01.11 01:34) [7]
>
> то есть дело не в офисе?

Первое правило программиста — все ошибки мои!
А дальше есть отладчик.


 
Anatoly Podgoretsky ©
 
(2011-01-14 12:23)
[9]

> KilkennyCat  (14.01.2011 01:09:04)  [4]

АгаЮ надо менять БП


 
Сергей М. ©
 
(2011-01-14 13:43)
[10]


> Oleg_teacher   (14.01.11 01:34) [7]
>
> дело не в офисе?

Именно в Офисе.
По кр.мере влоть до 2000.
Грабли опоробовал лично)


 
Cobalt ©
 
(2011-01-14 15:48)
[11]

exception class EolesysError with message «Вызов был отклонен»
попробуй создавать новый Application, а не подключатся к существующему
И на время работы его скрывать и делать недоступным пользователю
XLApplication.EnableEvents := False


 
Cobalt ©
 
(2011-01-14 15:50)
[12]

В 2007-ом такая же фигня — как только начинаешь редактировать ячейку (активируешь поле ввода, а не копируешь/вставляешь) — так сразу отрубается XLApplication


Содержание

  1. Ошибка «Вызов был отклонен» при передаче текста в окно Excel.Application
  2. Вызов отклонен excel delphi
  3. Вызов отклонен excel delphi

Ошибка «Вызов был отклонен» при передаче текста в окно Excel.Application

Доброй минуты, уважаемые знатоки всей этой «нелегкой»
с OleObject в Delphi..

Была задача сделать программу-конвертер, для т.с. поточной обработки текстовых файлов, и вывода с разбиением на колонки (если выбрано) в итоговые *.xls файлы по заранее заданным путям. С задачей, как мне казалось, я успешно справился.. Но не тут то было.. Заказчик стал жаловаться на ошибку в самом начале запущенного процесса — » Неверный индекс «.. На которую у меня (Windows10x64, Excel 2016) при разностороннем тестировании и намека не было.

Ок, вроде бы нашел решение, почитал на форуме, что такое часто случается, если именно в инструкции

В аргументе считанное значение. То есть у меня все отлично работало и без этих бесконечных правок. Проверял и на батиной машине с древнючим Office и win10x32, — тоже все тип-топ. Подозрения, что заказким мутит отпали, т.к. он выкладывал мне скрины с перечисленными ошибками.

Ниже выложил экзешник, если у Вас стоит какой-либо Excel на машине, и найдется 2-3 минуты свободного времени (нужно будет нажать одну кнопку, (средняя в верхнем ряду), — пожалуйста проверьте какой у Вас «полет». Все настройки уже заданы, и нужно только, чтобы в папке на раб.столе (источник) был хоть один *.TXT файл.
Робко надеюсь на Ваше внимание!

Ниже код инициализации обьекта Excel.Application, который в моей пр-ме выполняется один лишь раз при 1ом запуске задачи:

После нажатия кнопки «Запуск Enter», в цикле по всем найденным файлам в источнике , выполняется вот эта функция (откомментировал все, что только смог:

Несколько дней уже парюсь, никак не выходит долбаный аленький цветочек (((, помогите, ребят..

Источник

Вызов отклонен excel delphi

У меня форма запускает через Ole Excel

а сама всплывает поверх его (из нее я перетаскиваю в ячейки всякую шнягу)
она держит application екселя до своего закрытия,
а при закрытии этой формы я все сохраняю и закрываю ексель

Так вот если в екселе не редактируется ячейка все проходит на ура
а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.
Вопрос: Как бы его вывести из состояния редактирования ячейки?
YuriyR

От: Softwarer http://softwarer.ru
Дата: 06.07.04 11:16
Оценка: +1

Здравствуйте, yuriyr, Вы писали:

Y> xlap.Quit;
Y>Так вот если в екселе не редактируется ячейка все проходит на ура
Y>а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.

Ответы на такие вопросы легче искать, сделав xlap.visible := true. В данном случае, если мне не изменяет память, Excel задает тебе вопрос о том, надо ли сохранять сделанные изменения, и, соответственно, не выходит, пока не ткнешь в Yes или No в невидимом окне Соответственно, надо явно сохранить файл.

От: yuriyr
Дата: 06.07.04 11:23
Оценка:

Здравствуйте, Softwarer, Вы писали:

S>Здравствуйте, yuriyr, Вы писали:

Y>> xlap.Quit;
Y>>Так вот если в екселе не редактируется ячейка все проходит на ура
Y>>а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.

S>Ответы на такие вопросы легче искать, сделав xlap.visible := true. В данном случае, если мне не изменяет память, Excel задает тебе вопрос о том, надо ли сохранять сделанные изменения, и, соответственно, не выходит, пока не ткнешь в Yes или No в невидимом окне Соответственно, надо явно сохранить файл.

Нет первая команда xlap.DisplayAlerts := False;
Она отменяет все вопросы Excel на счет подтверждения сохранения
Но и она — самая первая — не выполняется exeption выдает каманда игнорирована

От: Softwarer http://softwarer.ru
Дата: 06.07.04 11:28
Оценка:

Здравствуйте, yuriyr, Вы писали:

Y>Нет первая команда xlap.DisplayAlerts := False;

Виноват, действительно прореагировал «на рефлексах». Прошу прощения.

От: akasoft
Дата: 06.07.04 13:36
Оценка:

Здравствуйте, yuriyr, Вы писали:

Y>Нет первая команда xlap.DisplayAlerts := False;
Y>Она отменяет все вопросы Excel на счет подтверждения сохранения

Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это.

От: yuriyr
Дата: 06.07.04 16:25
Оценка:

Здравствуйте, akasoft, Вы писали:

A>Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это.

Попробовал и так. Изменений нет
OLE error ‘Вызов был отклонен’
Использую ExcelXP
Help! Please

От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 06.07.04 19:01
Оценка:

Да не команду на закрытие он игнорирует, а любые OLE-вызовы

От: Григоричев Денис
Дата: 08.07.04 05:15
Оценка: 6 (1)
От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 08.07.04 09:04
Оценка:

Логично
Интересно, а нормальное решение есть? Без имитации клавиатурного ввода?
Ведь такая имитация плоха уже тем, что при этом отменяются внесенные юзверем в ячейку изменения. Сравните это с поведением самого Excel: если мы пытаемся его закрыть в момент редактирования, внесенные в ячейку изменения считаются подтвержденными.
Кстати, напомню, что в ряде случаев такая блокировка со стороны Excel очень логична (если, например, юзверь сидит в диалоговом окне).

Во многих случаях может подойти открытие данных как внедренного OLE-объекта. При этом как только пользователь переключится на другой элемент нашего окна, automation закроет эксель (в т.ч. если эксель был в режиме редактирования — но не в диалоговом окне). Правда, есть и досадный глюк (по кр. мере, в D6): если в design-time открыть (open, а не edit) объект в OLEContainer, а потом закрыть только книгу (но не эксель), будет закрыта и эксель тоже. А вот если то же проделать в рантайме — эксель останется открыта. Подробно не смотрел — может, как-то это регулируется. Ну сопровождение этого глюка — если один раз объект открыли в режиме open и закрыли, потом с ним можно делать что угодно — но в режиме просмотра в контейнере он при этом будет заштрихован серым (как если в данный момент редактируется в режиме open).

На выбор еще три варианта, не полностью, но решающих проблему: 1) ждем, пока Excel не согласна будет выполнить нашу команду (юзер покинет диалог или выйдет из режима редактирования), 2) блокируем пользовательский интерфейс Excel, 3) открываем данные в режиме «только для чтения» (проблема с диалогами остается).

Кстати, а зачем понадобилось показывать юзеру эксель и разрешать редактирование? И почему убивать Excel мы пытаемся из нашего приложения? Раз уж юзеру дали возможность полазить по таблице, так может, он сам определится, когда ему выходить?

От: Григоричев Денис
Дата: 09.07.04 05:27
Оценка:
От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 09.07.04 09:52
Оценка:

ГД>Ксати, есть способ убить процесс Excel, если прогу «срубили», например из TaskMan?
Это вряд ли хорошо — в экселе могут быть открыты чьи-то еще документы, кроме подсунутых Вами

От: yuriyr
Дата: 09.07.04 11:21
Оценка:

Сделал так
Не могу использовать OleContainer так как суть работы заключается в OLE перетаскивании данных из одного обьекта
в ексель, а сним при потере фокуса в контейнере нифига не сделаешь.

Источник

Вызов отклонен excel delphi

Пишу приложение которое обрабатывает ексель файл:
excell_ap:=CreateOleObject(«Excel.application»);
excell_ap.Visible:=False;
excell_doc:=excell_ap.workbooks.OPEN(s);
excell_sh:=excell_doc.worksheets[1];
потом идут строки обработки ячеек листа
например там. s:=excell_sh.Cells.Item[i,j].Value;
excell_doc.Close(0);
Проблема в следующем. у меня обработка етих данных может занять несколько минут или секунд. И если я во время выполнения сам вручную запущу какую нибуть книга и начну ее редактировать то моя прога вываливает ошибку. Как можна етого избежать?

project proga.exe raised exception class EolesysError with message «Вызов был отклонен»


KilkennyCat © ( 2011-01-14 00:46 ) [1]

вообще-то странно. при работе через оле, я предполагал, должно делаться офисом риад-онли запускаемому файлу второй раз.
может, для этого надо что-то специально указать.
лично я бы посоветовал нативную работу с файлом, если сие позволительно. правда, бесплатных компонент не встречал.


Германн © ( 2011-01-14 00:50 ) [2]


> вообще-то странно.

Даже ещё более странно. Ибо в вопросе неявно подразумевается что прога и отдельно Ексель работают с совсем разными документами.


Oleg_teacher ( 2011-01-14 00:59 ) [3]

совершенно верно ето даже не та самая книга. Ошибка может не сразу вылезти, может бывает часто нада 10-20 сек. че то поисправлять в открытом «вручную» документе.


KilkennyCat © ( 2011-01-14 01:09 ) [4]

а, я невнимательно прочитал, акцентируясь на ошибке.
с 2003 офисом такой проблемы не наблюдал. мож аппаратно-рограммное что-то. тестировалось на одной машине, или на других тож самое?

смотрел на 3 машинах при офисе 2003 и офисе 2007.


Германн © ( 2011-01-14 01:27 ) [6]


> Oleg_teacher (14.01.11 00:59) [3]
>
> совершенно верно ето даже не та самая книга. Ошибка может
> не сразу вылезти, может бывает часто нада 10-20 сек. че
> то поисправлять в открытом «вручную» документе.
>

Значит (на 99%) ошибка в программе. Но где и какая — тебе искать. Бог в помощь!


Oleg_teacher ( 2011-01-14 01:34 ) [7]

то есть дело не в офисе? Спс, за помощь. буду тогда смотреть.


Германн © ( 2011-01-14 01:45 ) [8]


> Oleg_teacher (14.01.11 01:34) [7]
>
> то есть дело не в офисе?

Первое правило программиста — все ошибки мои!
А дальше есть отладчик.


Anatoly Podgoretsky © ( 2011-01-14 12:23 ) [9]

> KilkennyCat (14.01.2011 01:09:04) [4]

АгаЮ надо менять БП


> Oleg_teacher (14.01.11 01:34) [7]
>
> дело не в офисе?

Именно в Офисе.
По кр.мере влоть до 2000.
Грабли опоробовал лично)


Cobalt © ( 2011-01-14 15:48 ) [11]

exception class EolesysError with message «Вызов был отклонен»
попробуй создавать новый Application, а не подключатся к существующему
И на время работы его скрывать и делать недоступным пользователю
XLApplication.EnableEvents := False


Cobalt © ( 2011-01-14 15:50 ) [12]

В 2007-ом такая же фигня — как только начинаешь редактировать ячейку (активируешь поле ввода, а не копируешь/вставляешь) — так сразу отрубается XLApplication

Источник


Не могу закрыть Excel из Delphi

От:

yuriyr

 
Дата:  06.07.04 11:06
Оценка:

У меня форма запускает через Ole Excel

    SaveName:=Name;
    XLap := CreateOLEObject('Excel.Application');
    Workbook := XLap.WorkBooks.Open(Name);
    xlap.Visible := true;
    xlap.DefaultFilePath:=ExtractFileDir(Name);

а сама всплывает поверх его (из нее я перетаскиваю в ячейки всякую шнягу)
она держит application екселя до своего закрытия,
а при закрытии этой формы я все сохраняю и закрываю ексель

    xlap.DisplayAlerts := False;
    Workbook.SaveAs(SaveNAme);
    xlap.Quit;
    Application.ProcessMessages;

Так вот если в екселе не редактируется ячейка все проходит на ура
а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.
Вопрос: Как бы его вывести из состояния редактирования ячейки?
YuriyR


Re: Не могу закрыть Excel из Delphi

От:

Softwarer

http://softwarer.ru
Дата:  06.07.04 11:16
Оценка:

+1

Здравствуйте, yuriyr, Вы писали:

Y> xlap.Quit;

Y>Так вот если в екселе не редактируется ячейка все проходит на ура
Y>а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.

Ответы на такие вопросы легче искать, сделав xlap.visible := true. В данном случае, если мне не изменяет память, Excel задает тебе вопрос о том, надо ли сохранять сделанные изменения, и, соответственно, не выходит, пока не ткнешь в Yes или No в невидимом окне Соответственно, надо явно сохранить файл.


Re[2]: Не могу закрыть Excel из Delphi

От:

yuriyr

 
Дата:  06.07.04 11:23
Оценка:

Здравствуйте, Softwarer, Вы писали:

S>Здравствуйте, yuriyr, Вы писали:


Y>> xlap.Quit;

Y>>Так вот если в екселе не редактируется ячейка все проходит на ура
Y>>а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.

S>Ответы на такие вопросы легче искать, сделав xlap.visible := true. В данном случае, если мне не изменяет память, Excel задает тебе вопрос о том, надо ли сохранять сделанные изменения, и, соответственно, не выходит, пока не ткнешь в Yes или No в невидимом окне Соответственно, надо явно сохранить файл.

Нет первая команда xlap.DisplayAlerts := False;
Она отменяет все вопросы Excel на счет подтверждения сохранения
Но и она — самая первая — не выполняется exeption выдает каманда игнорирована


Re[3]: Не могу закрыть Excel из Delphi

От:

Softwarer

http://softwarer.ru
Дата:  06.07.04 11:28
Оценка:

Здравствуйте, yuriyr, Вы писали:

Y>Нет первая команда xlap.DisplayAlerts := False;

Виноват, действительно прореагировал «на рефлексах». Прошу прощения.


Re[3]: Не могу закрыть Excel из Delphi

От:

akasoft

Россия

 
Дата:  06.07.04 13:36
Оценка:

Здравствуйте, yuriyr, Вы писали:

Y>Нет первая команда xlap.DisplayAlerts := False;

Y>Она отменяет все вопросы Excel на счет подтверждения сохранения

Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это…

… << RSDN@Home 1.1.4 beta 2 >>


Re[4]: Не могу закрыть Excel из Delphi

От:

yuriyr

 
Дата:  06.07.04 16:25
Оценка:

Здравствуйте, akasoft, Вы писали:

A>Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это…

Попробовал и так. Изменений нет
OLE error ‘Вызов был отклонен’
Использую ExcelXP
Help! Please


Re: Не могу закрыть Excel из Delphi

От:

Slicer [Mirkwood]

Россия

https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата:  06.07.04 19:01
Оценка:

Да не команду на закрытие он игнорирует, а любые OLE-вызовы

Slicer

Специалист — это варвар, невежество которого не всесторонне :)


Re[5]: Не могу закрыть Excel из Delphi

От:

Григоричев Денис

 
Дата:  08.07.04 05:15
Оценка:

6 (1)

Здравствуйте, yuriyr, Вы писали:
Y>Здравствуйте, akasoft, Вы писали:

A>>Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это…


Y>Попробовал и так. Изменений нет

Y>OLE error ‘Вызов был отклонен’
Y>Использую ExcelXP
Y>Help! Please
Таки да, есть такая бодяга. Проходили.Вылечилось так:
EA.SendKeys(‘{ESC}’,0,LOCALE_USER_DEFAULT);
Где EA — ExcelApplication.
Этим мы вырубаем режим редактирования ячейки. Дальше он принимает все OLE вызовы.

… << RSDN@Home 1.1.3 stable >>


Re[6]: Не могу закрыть Excel из Delphi

От:

Slicer [Mirkwood]

Россия

https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата:  08.07.04 09:04
Оценка:

Логично
Интересно, а нормальное решение есть? Без имитации клавиатурного ввода?
Ведь такая имитация плоха уже тем, что при этом отменяются внесенные юзверем в ячейку изменения. Сравните это с поведением самого Excel: если мы пытаемся его закрыть в момент редактирования, внесенные в ячейку изменения считаются подтвержденными.
Кстати, напомню, что в ряде случаев такая блокировка со стороны Excel очень логична (если, например, юзверь сидит в диалоговом окне).

Во многих случаях может подойти открытие данных как внедренного OLE-объекта. При этом как только пользователь переключится на другой элемент нашего окна, automation закроет эксель (в т.ч. если эксель был в режиме редактирования — но не в диалоговом окне). Правда, есть и досадный глюк (по кр. мере, в D6): если в design-time открыть (open, а не edit) объект в OLEContainer, а потом закрыть только книгу (но не эксель), будет закрыта и эксель тоже. А вот если то же проделать в рантайме — эксель останется открыта. Подробно не смотрел — может, как-то это регулируется. Ну сопровождение этого глюка — если один раз объект открыли в режиме open и закрыли, потом с ним можно делать что угодно — но в режиме просмотра в контейнере он при этом будет заштрихован серым (как если в данный момент редактируется в режиме open).

На выбор еще три варианта, не полностью, но решающих проблему: 1) ждем, пока Excel не согласна будет выполнить нашу команду (юзер покинет диалог или выйдет из режима редактирования), 2) блокируем пользовательский интерфейс Excel, 3) открываем данные в режиме «только для чтения» (проблема с диалогами остается).

Кстати, а зачем понадобилось показывать юзеру эксель и разрешать редактирование? И почему убивать Excel мы пытаемся из нашего приложения? Раз уж юзеру дали возможность полазить по таблице, так может, он сам определится, когда ему выходить?

Slicer

Специалист — это варвар, невежество которого не всесторонне :)


Re[7]: Не могу закрыть Excel из Delphi

От:

Григоричев Денис

 
Дата:  09.07.04 05:27
Оценка:

Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Логично

SM>Интересно, а нормальное решение есть? Без имитации клавиатурного ввода?
IMHO, нет. Я не нашел, спрашивал об этом на Королевстве Дельфи — мне так и сказали. Так же мне сказали, что сплошная безнадега пытаться узнать позицию курсора при редактировании ячейки.
SM>Ведь такая имитация плоха уже тем, что при этом отменяются внесенные юзверем в ячейку изменения.
Мне это подходило, ибо я все равно затираю содержимое ячейки. В ЭТОМ случае. В другом — ставлю в позицию редактирования. Нашел способ.
SM> Сравните это с поведением самого Excel: если мы пытаемся его закрыть в момент редактирования, внесенные в ячейку изменения считаются подтвержденными.
О, Excel это такая загадочная вещь!
SM>Во многих случаях может подойти открытие данных как внедренного OLE-объекта. При этом как только
Я его так и использую. Мне нужно было достроить меню своими фишками, и, чтобы не мучиться с Add-in-ами, сделал в OleContainer.

SM>Кстати, а зачем понадобилось показывать юзеру эксель и разрешать редактирование? И почему убивать Excel мы пытаемся из нашего приложения? Раз уж юзеру дали возможность полазить по таблице, так может, он сам определится, когда ему выходить?

Не всегда это подходит. У меня это делается в диалоговом окне. Т.е., юзер, сам решает, когда ему прекратить редактирование. Но убиваем Excel из нашего приложения. Ксати, есть способ убить процесс Excel, если прогу «срубили», например из TaskMan?
Денис

… << RSDN@Home 1.1.3 stable >>


Re[8]: Не могу закрыть Excel из Delphi

От:

Slicer [Mirkwood]

Россия

https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата:  09.07.04 09:52
Оценка:

ГД>Ксати, есть способ убить процесс Excel, если прогу «срубили», например из TaskMan?
Это вряд ли хорошо — в экселе могут быть открыты чьи-то еще документы, кроме подсунутых Вами

Slicer

Специалист — это варвар, невежество которого не всесторонне :)


Re[9]: Не могу закрыть Excel из Delphi

От:

yuriyr

 
Дата:  09.07.04 11:21
Оценка:

Сделал так
Не могу использовать OleContainer так как суть работы заключается в OLE перетаскивании данных из одного обьекта
в ексель, а сним при потере фокуса в контейнере нифига не сделаешь.

procedure TDSBOXF.OpenTemplate(Name: string);
begin
try
SaveName := Name;
XLap := CreateOLEObject(‘Excel.Application’);
Workbook := XLap.WorkBooks.Open(Name);
xlap.Visible := true;
xlap.DefaultFilePath := ExtractFileDir(Name);
except
end;
Show;
end;

procedure TDSBOXF.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: integer;
findapp: string;
begin

////////////////////////////////////////////////////////////////////////////////
// Save Workbook
////////////////////////////////////////////////////////////////////////////////

try
xlap.DisplayAlerts := False;
Workbook.SaveAs(SaveNAme);
Workbook.Close(False);
Application.ProcessMessages;
except
on E: Exception do
begin
// if (E.ClassName = ‘EOleSysError’) AND (EOleSysError(E).ErrorCode = -2147417848) then Exit; // Отключен клиент
if (E.ClassName = ‘EOleSysError’) and (EOleSysError(E).ErrorCode = -2147418111) then // Заблокирован Excel
begin
findapp := ‘Microsoft Excel — ‘ + ChangeFileExt(ExtractFileNAme(SaveNAme), »);
if not AppActivate(Pchar(findapp)) then
begin
findapp := ‘Microsoft Excel*’;
if not AppActivate(Pchar(findapp)) then Exit;
end;
begin
try
SendKeys(‘{TAB}’, True);
Application.ProcessMessages;
xlap.DisplayAlerts := False;
Workbook.SaveAs(SaveNAme);
Workbook.Close(False);
Application.ProcessMessages;
except
end;
end;
end;
end;
end;

Покритикуйте!
Посылаю TAB через Sendkey32 немного модифицированный.
Там еще пишут XLap := CreateOLEObject(‘Excel.Application 7.8.9… ‘);
Вот эти 7-8-9 сильно нужны или нет ? У меня вроде и так все работает.

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.


Форум программистов Vingrad

Модераторы: MetalFan

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Excel вставка объекта из файла, как? 

:(

   

Опции темы

FURANIUM
Дата 16.9.2010, 14:23 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2010

Репутация: нет
Всего: нет

День добрый.
Суть вопроса в следующем, начал готовить на Дельфи отчеты в Эксель. Все замечательно — импорт и экспорт данных с Экселем, форматирование текста, все на уровне, пока не решил включить в отчет объект из файла. Объект как правило схема, схема нарисована либо в Visio, либо в AutoCAD.
При решении вопроса поступил следющим образом: записал макрос вставки из файла в Экселе, посмотрел как устроен, решил адаптировать его под Дельфи и сразу возникла проблема, после осуществленной вставки объекта в Эксель в приложении Дельфи постоянно появляется ошибка «Вызов был отклонен», незнаю как решить.
Полагаю вопрос решается очень просто, но поверхностное познание материала не позволяет разрешить ситуацию.

Код

try //проверяем есть-ли объект 'Excel.Application'
   VExcel := GetActiveOleObject('Excel.Application'); 
  except
    on EOLESysError do
      VExcel := CreateOleObject('Excel.Application'); //нет, создаем
  end;

   VExcel.WorkBooks.Add(opendialog1.FileName); //открываем шаблон
   VExcel.WorkSheets[1].Activate; //активируем первый лист

   VExcel.ActiveSheet.Range['B12'].Select; //выделем ячейку, для того чтобы вставить объект с ячейки
   VExcel.ActiveSheet.OLEObjects.Add(Filename:='H:FileName.vsd', Link:=True, DisplayAsIcon:=False).Select; //вставлем объект из файла
//далее сообщение об ошибке

Попутно возникли другие вопросы, которые появятся в перспективе с решением основного: 
1) Объект вставляется с уже имеющимися некими размерами, как узнать размеры этого объекта длинну и ширину?
2) Как установить произвольный размер по ширине/высоте, с пропорциональным произвольным размером по высоте/ширине?(схему небходимо разместить в ограниченных рамках, по высоте или ширине)

PM MAIL   Вверх
aleksh
Дата 16.9.2010, 17:39 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13

убрать ошибку о вызове можно двумя способами
1: запускать программу при закрытом екселе
2: в строчке добавления картинки убрать «.Select», почему так — не знаю, может некий конфликт контролов или нечто в этом роде

Добавлено через 6 минут и 51 секунду
и вот еще, там, наверняка, ответы на все связные вопросы

PM MAIL   Вверх
FURANIUM
Дата 17.9.2010, 12:32 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2010

Репутация: нет
Всего: нет

Цитата(aleksh @ 16.9.2010,  17:39)
убрать ошибку о вызове можно двумя способами
1: запускать программу при закрытом екселе
2: в строчке добавления картинки убрать «.Select», почему так — не знаю, может некий конфликт контролов или нечто в этом роде

Добавлено @ 17:46
и вот еще, там, наверняка, ответы на все связные вопросы

aleksh, спасибо.
1) Можно подробнее об этом способе?
2) Убирание «.Select» действительно устраняет ошибку «Вызов был отклонен», но дальнейшая попытка обрадится к объекту снова приводит к ее появлению.
Ссылку посмотрел, много интересного, но как применить в данном случае информацию не додумал.
Может есть еще идеи у кого нибудь?

PM MAIL   Вверх
aleksh
Дата 17.9.2010, 13:07 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13

Цитата(FURANIUM @  17.9.2010,  12:32 Найти цитируемый пост)
1) Можно подробнее об этом способе?

1 как подробней? если выполнять код с .select когда нет открытых xls файлов, то открывается ексель, в него вставляется картинка и она «выбрана»
2 а как обращаешься? к объекту можно обращаться после вставки и изменять его размеры

PM MAIL   Вверх
FURANIUM
Дата 17.9.2010, 13:38 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2010

Репутация: нет
Всего: нет

Цитата(aleksh @ 17.9.2010,  13:07)
Цитата(FURANIUM @  17.9.2010,  12:32 Найти цитируемый пост)
1) Можно подробнее об этом способе?

1 как подробней? если выполнять код с .select когда нет открытых xls файлов, то открывается ексель, в него вставляется картинка и она «выбрана»
2 а как обращаешься? к объекту можно обращаться после вставки и изменять его размеры

1) Первый способ не подойдет, т.к. объект всавляется в шаблон
2) После просмотра макроса в Excel, пробовал обращаться как VExcel.ActiveSheet.Shape(‘Object 1’).Select;

PM MAIL   Вверх
aleksh
Дата 17.9.2010, 14:45 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13

Цитата(FURANIUM @  17.9.2010,  13:38 Найти цитируемый пост)
1) Первый способ не подойдет, т.к. объект всавляется в шаблон

а зачем тогда

Цитата(FURANIUM @  16.9.2010,  14:23 Найти цитируемый пост)
      VExcel := CreateOleObject(‘Excel.Application’); //нет, создаем
PM MAIL   Вверх
FURANIUM
Дата 17.9.2010, 15:06 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2010

Репутация: нет
Всего: нет

Цитата(aleksh @ 17.9.2010,  14:45)
Цитата(FURANIUM @  17.9.2010,  13:38 Найти цитируемый пост)
1) Первый способ не подойдет, т.к. объект всавляется в шаблон

а зачем тогда

Цитата(FURANIUM @  16.9.2010,  14:23 Найти цитируемый пост)
      VExcel := CreateOleObject(‘Excel.Application’); //нет, создаем

Видимо я тут немножко не в теме, не совсем пойму. Но всеравно спасибо.

И выяснилось замена Link:=True на Link:=False

Код

VExcel.ActiveSheet.OLEObjects.Add(Filename:='H:FileName.vsd', Link:=False, DisplayAsIcon:=False).Select; 

Избавляет от ошибки при добавлении объекта, но не избавляет от ее появления в дальнейшем

Вобщем посоветовали мне использовать ранее связывание, и все получилось.
Проблема, как понял, была в различных подходах к решению задачи, и мной был выбран не совсем верный способ.

Это сообщение отредактировал(а) FURANIUM — 17.9.2010, 15:09

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: ActiveX/СОМ/CORBA»

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »

Понравилась статья? Поделить с друзьями:
  • Delphi excel выделить одну ячейку
  • Delphi excel выделить лист
  • Delphi excel выделить все ячейки
  • Delphi excel выделение ячейки
  • Delphi excel вставка формул