Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как открыть Excel из АвтоКАДа на нужной вкладке и...

Как открыть Excel из АвтоКАДа на нужной вкладке и...

Ответ
Поиск в этой теме
Непрочитано 20.07.2018, 15:13 #1
Как открыть Excel из АвтоКАДа на нужной вкладке и...
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 451

Всем привет!

... и оставить его на переднем плане?

Т.е. задача обратная процессу обмена данными между Автокадом и Екселем
без лишнего мелькания окон.

Дано: есть файл.xls с листами Лист1, Лист2, Лист3.

Нужно, чтобы из программы на Лиспе (для пользователя, конечно, процесс
выглядит, как "нажал кнопочку") появилось на переднем плане окно
Екселя, но не просто с открытым файлом, а с файлом, открытым на определённом
листе, скажем - на Лист2.

У меня получается, но как-то не оптимально...

Что-то типа:

(setq exlobj (vlax-get-or-create-object "Excel.Application"))
(vlax-invoke-method (vlax-get-property exlobj 'WorkBooks) 'Open "файл.xls")

== активация нужного листа - Лист2 ===

(vlax-invoke-method (vlax-get-property exlobj "ActiveWorkbook") "Save")
(vlax-invoke-method (vlax-get-property exlobj "ActiveWorkbook") 'Close :vlax-False)
(startapp "excel.exe" "файл.xls")

Всё работает, но три последние строчки хочется заменить на какой-нибудь
метод, который просто бы выводил открытое окно Екселя на передний план,
без дополнительного (startapp).
__________________
Счастливо, Алексей!
Просмотров: 2529
 
Автор темы   Непрочитано 23.07.2018, 08:20
#2
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Дополнение.

И, кстати,

(vla-put-visible exlobj :vlax-true)

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

А если Ексель был запущен, да ещё и открыто в нём
несколько окон, то на панели задач просто появляется
ещё одна "кнопочка"...

Не - это несколько не то, что нужно.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.07.2018, 09:32
#3
Alex.gomel


 
Регистрация: 09.11.2017
Сообщений: 28


http://www.cadtutor.net/forum/archiv.../t-91011.html?
Alex.gomel вне форума  
 
Автор темы   Непрочитано 23.07.2018, 11:09
#4
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Гм... У меня как бы нет проблем с выбором нужной вкладки.

(vlax-invoke-method Worksheet "Activate")

Ясное дело, куда же без него? Проблема в том, чтобы "выдвинуть"
окно Екселя на передний план среди множества других открытых
окон (всяких разных программ) в Виндовсе.

И это самое "выдвижение" должно работать всегда, вне зависимости
от того, был Ексесль запущен по любому другому поводу до вызова
этой функции, или нет.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.07.2018, 11:33
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


В том же VBA есть AppActivate для подобных задач. В лиспе вроде нет подобного готового, хотя глубоко не копал)

----- добавлено через ~6 мин. -----
Найдено на просторах инета
Код:
[Выделить все]
 ;; App Activate  -  Lee Mac
;; A wrapper for the appactivate method of the WSH
;; str - [str] Application title or Process ID
(defun LM:appactivate ( str / rtn wsh )
   (if (setq wsh (vlax-create-object "wscript.shell"))
      (progn
          (setq rtn (vl-catch-all-apply 'vlax-invoke-method (list wsh 'appactivate str)))
            (vlax-release-object wsh)
              (if (vl-catch-all-error-p rtn)
                (prompt (vl-catch-all-error-message rtn))
                rtn
            )
       )
    )
)
Сергей812 вне форума  
 
Автор темы   Непрочитано 23.07.2018, 12:16
#6
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Спасибо!

Вместе со связкой

(vla-put-visible exlobj :vlax-true)

функция AppActivate

похоже, даёт то, что нужно.

Попробовал в разных вариантах - вроде бы работает.
Был, правда, один (!) раз, когда окно "не выдвинулось",
но повторно воспроизвести эту ситуацию не получилось.

Будем, считать, что задача решена.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.07.2018, 12:22
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
(vla-put-visible exlobj :vlax-true)
а зачем это вообще нужно то? Excel запущен вне пространства акада, просто надо перебрасывать "фокус ввода" с приложения на приложение.
Сергей812 вне форума  
 
Автор темы   Непрочитано 23.07.2018, 14:44
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Сложно сказать...

Попробовал для начала без него - получилось нестабильно.

Т.е. для вариантов "первый вызов екселя из автокада" и
"вызов очередного окна екселя из автокада" фокус на
окно екселя устанавливался не всегда.

Добавил visible - вроде бы стало получше.

Шаманство...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как открыть Excel из АвтоКАДа на нужной вкладке и...

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен Макрос для экспорта из EXCEL в AUTOCAD dmb2 Поиск исполнителей 0 11.11.2017 16:43
Связь таблицы автокада с Excel alex_r07 AutoCAD 8 18.07.2016 21:03
Не откпывается файл .xls (Excel) rocker Прочее. Программное обеспечение 5 16.06.2011 13:10
как скопировать ячейки excel в чертеж AutuCAD vestes AutoCAD 5 14.06.2011 00:37
Проблема вставки диаграмм в ACAD 2009 из Excel 2007 ST2 AutoCAD 1 26.05.2009 01:30