Sokol666 0 / 0 / 0 Регистрация: 03.04.2016 Сообщений: 69 |
||||
1 |
||||
Ошибка «Вызов был отклонен» при выводе отчёта13.05.2016, 22:10. Показов 12133. Ответов 11 Метки нет (Все метки)
Делаю вывод отчёта в Excel, сам отчёт выводится только на половину и вылезает ошибка!
Ясно что проблема в цикле, но решить её не получается!
0 |
1073 / 986 / 340 Регистрация: 07.08.2012 Сообщений: 2,790 |
|
13.05.2016, 22:20 |
2 |
Ошибка сильно секретная?
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 |
А блин, точняк… Что сие значит?
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 |
Пробуем: Не поможет, тогда придется выкладывать проект с БД. Еще надо следить чтобы Ексель не болался в памяти (если в диспетчере задач обнаружен — пристрелить). Добавлено через 7 часов 49 минут
1 |
5501 / 4296 / 1379 Регистрация: 14.04.2014 Сообщений: 19,295 Записей в блоге: 19 |
|
14.05.2016, 08:03 |
7 |
временно поставьте вместо данных из датасета просто константы
1 |
3392 / 2043 / 654 Регистрация: 29.05.2013 Сообщений: 8,778 |
|
14.05.2016, 10:04 |
8 |
CoInitialize(nil);
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 |
я его сразу забыл добавить А это к чему относится? «Он» — это что? И речь шла не о добавлении, а о переносе. Даже если будет выложен проект с БД, не факт что кто-то догадается в чем причина проблемы.
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
Содержание
- Ошибка «Вызов был отклонен» при передаче текста в окно Excel.Application
- Вызов отклонен excel delphi
- Вызов отклонен 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 сильно нужны или нет ? У меня вроде и так все работает.
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Форум программистов Vingrad
Модераторы: MetalFan |
Поиск: |
|
Excel вставка объекта из файла, как? |
Опции темы |
FURANIUM |
|
||
Новичок Профиль Репутация: нет
|
День добрый.
Попутно возникли другие вопросы, которые появятся в перспективе с решением основного: |
||
|
|||
aleksh |
|
||
Опытный Профиль Репутация: нет
|
убрать ошибку о вызове можно двумя способами Добавлено через 6 минут и 51 секунду |
||
|
|||
FURANIUM |
|
||
Новичок Профиль Репутация: нет
|
aleksh, спасибо. |
||
|
|||
aleksh |
|
||
Опытный Профиль Репутация: нет
|
1 как подробней? если выполнять код с .select когда нет открытых xls файлов, то открывается ексель, в него вставляется картинка и она «выбрана» |
||
|
|||
FURANIUM |
|
||||
Новичок Профиль Репутация: нет
|
1) Первый способ не подойдет, т.к. объект всавляется в шаблон |
||||
|
|||||
aleksh |
|
||||
Опытный Профиль Репутация: нет
|
а зачем тогда
|
||||
|
|||||
FURANIUM |
|
||||||||
Новичок Профиль Репутация: нет
|
Видимо я тут немножко не в теме, не совсем пойму. Но всеравно спасибо. И выяснилось замена Link:=True на Link:=False
Избавляет от ошибки при добавлении объекта, но не избавляет от ее появления в дальнейшем Вобщем посоветовали мне использовать ранее связывание, и все получилось. Это сообщение отредактировал(а) FURANIUM — 17.9.2010, 15:09 |
||||||||
|
|||||||||
|
Правила форума «Delphi: ActiveX/СОМ/CORBA» | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |