|
|
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Всем привет. Юзеру показываю документ в MS Excel, чтобы от поредактировал документ в temp - папке, сохранил результат и закрыл иксель. Проверяя разные свойства, жду, пока юзер не перестанет редактировать файл. Если юзер закрыл книгу (или "сохранил как") - считается, что редактирование документа завершено. После этого, если файл исходный изменен, я это файл его использую дальше в соответствии с моими надобностями. Свойство DisplayAlerts COM-объекта MSExcel не трогаю, так надо. Поэтому, при попытке закрыть несохраненный документ, иксель показывает диалоговое окно "Ты забыл сохранить!". Еще окно может быть показано, например, когда юзер жмет кнопку "сохранить как". Ну и при вызове разных настроек. В момент показа модальных окон, иксель не отвечает на обращение к нему как к COM - серверу. Вернее, отвечает одинаково - исключение с сообщением "Вызов был отклонен". Вопрос: как отловить ситуацию, что СОМ-сервер в данный момент не может работать как СОМ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 22:02 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Самая большая неприятность в том, что после такого исключения, повторное обращение к свойствам СОМ-сервера больше "не работает", всякий раз выбрасывается то же самое исключение, даже если причина устранена, т.е. модальное окно было закрыто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 22:05 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Есть замечательное свойство Application.Ready : https://docs.microsoft.com/ru-ru/office/vba/api/excel.application.ready Только и его вызывать во время диалогов нельзя... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 23:29 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Офигеть, в и-нте этот вопрос встречается массово - а решения нигде не нашел... Я вот сейчас запустил активизировал документ в своем "самодельном" СОМ - сервере из своего же клиента, потом в сервере активизировал диалог "Сохранить как" и одновременно обратился из клиента к серверу - все нормально отработало. Без всяких проверок "Ready". Т.е., это "чисто офисный баг". Ну как, как можно было так накосячить и за столько лет не исправить? Жопой они, что ли этот офис пишут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 23:46 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
ёёёёё ... Юзеру показываю документ в MS Excel, чтобы от поредактировал документ в temp - папке, сохранил результат и закрыл иксель. Проверяя разные свойства, жду, пока юзер не перестанет редактировать файл. Если юзер закрыл книгу (или "сохранил как") - считается, что редактирование документа завершено. После этого, если файл исходный изменен, я это файл его использую дальше в соответствии с моими надобностями... Раз такие заморочки с СОМ, решил сделать иначе. Тупо с помощью ShellExecuteEx открываю файл "чем бог пошлет", в соответствии с текущим зарегистрированным расширением (.xls -> MS Excel или MS Office и т.д.), и жду завершения порожденного процесса. Сравниваю время файла с сохраненным перед началом редактирования и принимаю решение, что с ним делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2019, 00:02 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
ёёёёё ёёёёё ... Юзеру показываю документ в MS Excel, чтобы от поредактировал документ в temp - папке, сохранил результат и закрыл иксель. Проверяя разные свойства, жду, пока юзер не перестанет редактировать файл. Если юзер закрыл книгу (или "сохранил как") - считается, что редактирование документа завершено. После этого, если файл исходный изменен, я это файл его использую дальше в соответствии с моими надобностями... Раз такие заморочки с СОМ, решил сделать иначе. Тупо с помощью ShellExecuteEx открываю файл "чем бог пошлет", в соответствии с текущим зарегистрированным расширением (.xls -> MS Excel или MS Office и т.д.), и жду завершения порожденного процесса. Сравниваю время файла с сохраненным перед началом редактирования и принимаю решение, что с ним делать. Вот. Дом свободный живите кто хотите. Может, кому понадобится такое счастье. Лишнее выкинул, то что осталось вроде должно работать. Код: pascal 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. Пример: Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2019, 00:42 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Можно подписаться на события OnWorkbookBeforeSave или OnWorkbookBeforeClose. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2019, 09:45 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
istrebitel Можно подписаться на события OnWorkbookBeforeSave или OnWorkbookBeforeClose. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. https://www.sql.ru/forum/actualfile.aspx?id=22015020] Приложенный файл (ExcelEvents.zip - 15Kb) Спасибо, примерно так и сделал (как положено, помудохавшись сперва , ага). Только ч/з импортированную библиотеку типов икселя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 09:05 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. Код: pascal 1. 2. 3. 4. 5. 6. 7. ёёёёё Пример: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 15:24 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
gunsmoker рекомендует ещё оборачивать вызов ShellExecuteEx() в CoInitializeEx() + CoUninitialize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 15:49 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
пардоньте, это требование msdn: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecuteexa ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:20 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий оборачивать вызов ShellExecuteEx() в CoInitializeEx() + CoUninitialize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:29 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
18.11.2019 16:29, _Vasilisk_ пишет: > основной VCL поток уже обернут сам а вдрук он консольку пишет? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:30 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий а вдрук он консольку пишет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:32 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
18.11.2019 16:32, _Vasilisk_ пишет: > Тогда получит ошибку где? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:51 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Появилось доп. условие - "откреплять" MS Excel в случае, если оператор по SaveAs выполнил сохранение в другое место. Загружает икселевский файл во временную директорию, запускает иксель, по завершению результат можно куда-то использовать (надо только дождаться "освобождения" файла). Вот получившийся монстрик: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:53 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
18.11.2019 16:53, ёёёёё пишет: > Вот получившийся монстрик: архивы никто не читает Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 16:56 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий > Тогда получит ошибку где? _Vasilisk_ Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 17:01 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
18.11.2019 17:01, _Vasilisk_ пишет: > > здесь > Win32Check(ShellExecuteEx(@fInfo)); из-за почему? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 17:08 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий из-за почему? И кстати MSDNThere are instances where ShellExecuteEx does not use one of these types of Shell extension and those instances would not require COM to be initialized at all. Nonetheless, it is good practice to always initalize COM before using this function.Т.е. это всего лишь good practice, а не обязаловка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 18:20 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
18.11.2019 18:20, _Vasilisk_ пишет: > Из-за какого нибудь CO_E_NOTINITIALIZED. дык это ж всё проверяется по результату инициализации Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 18:27 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий дык это ж всё проверяется по результату инициализации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 18:38 |
|
||
|
OLE(MS Excel), "Вызов был отклонен" во время диалога.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Код: pascal 1. 2. 3. Код: pascal 1. 2. 3. 4. 5. 6. 7. ёёёёё Пример: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Иксель запросто прекращает работу запущенного процесса, передав параметр в другой экземпляр процесса. Пример. Открываем MS Excel (2003 - у меня), запускается с пустым листом (табличка, пока без данных). Если ничего не менять в листе и не загружать внешний файл, то запуск указанным методом еще одного экземпляра приводит к тому, что запущенный экземпляр закрывается, а в ранее запущенном "пустом" экземпляре оказывается открыт файл, переданный как параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 16:25 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39890591&tid=2038836]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 434ms |

| 0 / 0 |
