SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Выполнение макроса в WinWord



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Gleb
Участник
Участник



Joined: 18 Jan 2008
Posts: 32

PostPosted: Wed Feb 20, 2008 10:47 am    Post subject: Выполнение макроса в WinWord Reply with quote

Коллеги, знаю как выполнить макрос в Excel.
Потребовалось выполнить макрос в WinWord через OLE2
Как?
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Wed Feb 20, 2008 1:39 pm    Post subject: Reply with quote

Командой Run
Создаете макрос в WinWord файле:

Code:
Sub Exec_from_sap()
    MsgBox "Hello SAP!"
End Sub


Code:
REPORT z_winword_macro MESSAGE-ID sy.

*Working directory such as SapWorkDir
PARAMETERS: p_file LIKE rlgrap-filename
  DEFAULT 'c:\Temp\word1.doc'.

INCLUDE ole2incl.
INCLUDE docsincl.

DATA: h_word  TYPE ole2_object,
      h_docs  TYPE ole2_object,
      h_doc   TYPE ole2_object.

START-OF-SELECTION.

* Create Word Application object
  IF h_word-header = space OR h_word-handle EQ -1.
    CREATE OBJECT h_word  'WORD.APPLICATION'.
    IF sy-subrc NE 0.
      MESSAGE i002 WITH sy-msgli.
    ELSE.
      SET PROPERTY OF  h_word  'VISIBLE' = 1.
    ENDIF.
  ENDIF.

* Get Documents collection as property of Application object
  GET PROPERTY OF h_word 'DOCUMENTS'  = h_docs.

* Open a word file
  CALL METHOD OF h_docs 'OPEN' = h_doc
                        EXPORTING  #1 = p_file.

* Execute Macros
  CALL METHOD OF h_word 'Run'
    EXPORTING #1 = 'Exec_from_sap'. "Macros name

  CALL FUNCTION 'FLUSH'.

* Terminate Word
  CALL METHOD OF h_word 'QUIT' EXPORTING #1 = 0.

** Free objects
  FREE OBJECT :
                h_doc,
                h_docs,
                h_word.
               
Back to top
View user's profile Send private message Blog Visit poster's website
wolfzp
Участник
Участник


Age: 39
Joined: 28 Jul 2009
Posts: 4
Location: Украина

PostPosted: Tue Jul 28, 2009 6:18 pm    Post subject: Reply with quote

Доброго времени суток!

Столкнулся с проблемой, когда есть необходимость выполнять разные макросы, допустим, по разным кнопкам интерфейса в R3, в одном и том же документе Word. При использовании функции execute_winword, а также при использовании create object app 'word.aplication' документ открывается в новом окне, т.е. если не закрывать документ, то откроется еще одно окно Word с этим же документом и т.д.(Microsoft Word 2003). Необходимо добится результата, когда при нажатии кнопок интерфейса документ был в одном и том же окне MS Word и выполнялись макросы.

Заранее спасибо
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Wed Jul 29, 2009 10:13 am    Post subject: Reply with quote

А если один раз создать create object app 'word.aplication'
и повторно его использовать в программе?
Back to top
View user's profile Send private message Blog Visit poster's website
wolfzp
Участник
Участник


Age: 39
Joined: 28 Jul 2009
Posts: 4
Location: Украина

PostPosted: Wed Aug 12, 2009 1:46 pm    Post subject: Reply with quote

vga wrote:
А если один раз создать create object app 'word.aplication'
и повторно его использовать в программе?

Возникает такая ситуация, что если пользователь все-таки закроет приложение Word, то весь алгоритм рухнет
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Wed Aug 12, 2009 2:41 pm    Post subject: Reply with quote

Анализировать код возврата промежуточных операций. Если ошибочный - открыть приложение заново. Как такой алгоритм?
Back to top
View user's profile Send private message Blog Visit poster's website
wolfzp
Участник
Участник


Age: 39
Joined: 28 Jul 2009
Posts: 4
Location: Украина

PostPosted: Fri Aug 14, 2009 12:19 pm    Post subject: Reply with quote

vga wrote:
Анализировать код возврата промежуточных операций. Если ошибочный - открыть приложение заново. Как такой алгоритм?

Алгоритм подходит, только вот реализовать пока не удается!Smile Подскажите пожалуйста, как можно проверить запущен ли Word, и какой документ в нем открыт, и если открыто несколько - то активировать нужный!
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Aug 14, 2009 1:34 pm    Post subject: Reply with quote

wolfzp wrote:
Алгоритм подходит, только вот реализовать пока не удается!Smile Подскажите пожалуйста, как можно проверить запущен ли Word, и какой документ в нем открыт, и если открыто несколько - то активировать нужный!


Можно проверить наличие WINWORD в процессах на клиенте, выполнив консольную команду tasklist.exe с выводом результата в файл и последующим чтением и анализом файла.

Для, проверки какой файл открыт, думаю нужно писать какую-то клиентскую приблуду.
А активация (видимо вы хотите из абапа подключиться к запущенной сессии и управлять открытым файлом) точно невозможна.
Back to top
View user's profile Send private message Blog Visit poster's website
wolfzp
Участник
Участник


Age: 39
Joined: 28 Jul 2009
Posts: 4
Location: Украина

PostPosted: Tue Aug 18, 2009 4:06 pm    Post subject: Reply with quote

vga wrote:
wolfzp wrote:
Алгоритм подходит, только вот реализовать пока не удается!Smile Подскажите пожалуйста, как можно проверить запущен ли Word, и какой документ в нем открыт, и если открыто несколько - то активировать нужный!


Можно проверить наличие WINWORD в процессах на клиенте, выполнив консольную команду tasklist.exe с выводом результата в файл и последующим чтением и анализом файла.

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


Спасибо огромное за помощь!Smile Очень признателен, буду писать, если что-то удачное получится - выложу
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.