Автор Тема: COM специфика работы с Word  (Прочитано 20395 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Mr. Anderson [?]

  • Новичок
  • *
  • Сообщений: 122
  • Репутация: 4
  • Пол: Мужской
    • Видео уроки по AutoIt
    • Награды
COM специфика работы с Word
« Создано: Август 10, 2010, 14:12:50 »
Где бы почитать документацию или примеры по связи AutoIT с Word используя COM объекты?
По примерам в справке разобраться практически нереально...
http://www.autoit-vt.ru/ - видео уроки по AutoIt
14.03.2011 обновление http://www.autoit-vt.ru/video-uroki-po-autoit/

Русское сообщество AutoIt

COM специфика работы с Word
« Отправлен: Август 10, 2010, 14:12:50 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #1, Отправлен: Август 10, 2010, 14:14:45 »
Наверное, только MSDN - Word Object Model Reference
Конференция посвященная AutoIt на jabber.ru - [email protected]
Как попасть на конференцию читаем тут


Оффлайн Mr. Anderson [?]

  • Новичок
  • *
  • Сообщений: 122

  • Автор темы
  • Репутация: 4
  • Пол: Мужской
    • Видео уроки по AutoIt
    • Награды
Re: COM специфика работы с Word
« Ответ #2, Отправлен: Август 11, 2010, 14:07:59 »
Еще не понял что с этим можно делать, но в WinXP нашел интересную штуку:
Пуск - Выполнить - dcomcnfg
или
Win+R - dcomcnfg

Вроде бы и по делу, вроде и первоисточник (СОМ приложения системы), а что с этим делать не понятно...  :whistle:
« Последнее редактирование: Август 11, 2010, 14:46:05 от Mr. Anderson »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 961
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #3, Отправлен: Август 11, 2010, 22:15:13 »
Mr. Anderson  [?]
Цитировать
Вроде бы и по делу, вроде и первоисточник (СОМ приложения системы), а что с этим делать не понятно...
Вы можете использовать ActiveX/COM/OLE объекты в своих приложениях.
На странице MSDN (ссылку на которую вам дал Kaster), присутствуют все методы и свойства объектов Word.
Ну, к примеру, метод Open объекта Documents.
Вот пример:
Код: AutoIt [Выделить]
$Word = ObjCreate("Word.Application")
$Word.Visible = True
$Word.Documents.Open("C:\MyDocument.doc")
 


Скорблю и помню.




Русское сообщество AutoIt

Re: COM специфика работы с Word
« Ответ #3 Отправлен: Август 11, 2010, 22:15:13 »

Оффлайн RUVATA [?]

  • Осваивающий
  • **
  • Сообщений: 132
  • Репутация: 36
  • Пол: Мужской
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: COM специфика работы с Word
« Ответ #4, Отправлен: Декабрь 13, 2010, 16:20:13 »
Mr. Anderson
Прежде всего определитесь как именно Вы хотите взаимодействовать с MS Office Word
через COM-сервер или OLE-сервер.
И определитесь с тем, хотите ли Вы решить конкретную задачу или получить общее представление...
В любом случае обращайтесь... "я на этом собаку съел" :) подскажу с практически 100% вероятностью, можно в ЛС, можно и в теме (так даже будет полезней)
По большому счету  из UDF-ов Excel.au3 и Word.au3 Вам будет необходимы только несколько функций которые позволяют получить ссылку на COM-объект конкретного документа, все остальные действия осуществляются по правилам VBA (Visual Basic For Applications).
В самом Word нажмите сочетание клавишь Alt+F11 и вы попадедете во встроенну в Office IDE,
там соответсвенно в справку - а в ней есть все, описание методов и свойств, общее представление об объектной модели, константы и т.д.
PS: Костанты VBA как таковые OLE-сервер Office не понимает, используйте их числовые эквиваленты.
Когда будете эксперементировать можете попасть в ситуацию когда скрипт завершил работу с ошибкой, а Word как бы завис, на самом деле это скорее всего будет не так (если Вы конечно его не отправили в бесконечный цикл - тогда Ctrl+Pause Break) в остальных случаях
дело в значении объектWord.Application.ScreenUpdate = 0, выполнение  объектWord.Application.ScreenUpdate = 1 решит проблемму.
« Последнее редактирование: Декабрь 13, 2010, 16:30:25 от RUVATA »
Полезный совет? - жми "Полезное сообщение" :) не стесняйся...
И автору приятно, и для соискателей толк.

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #5, Отправлен: Декабрь 14, 2010, 02:19:21 »
RUVATA  [?]
Цитировать
через COM-сервер или OLE-сервер
а можно поинтересоваться, в чем разница?

Оффлайн RUVATA [?]

  • Осваивающий
  • **
  • Сообщений: 132
  • Репутация: 36
  • Пол: Мужской
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: COM специфика работы с Word
« Ответ #6, Отправлен: Декабрь 14, 2010, 09:14:47 »
Kaster  [?]
Цитировать
а можно поинтересоваться, в чем разница?
и даже нужно :) ...
Приступим:
С программами Microsoft Office Word, Excel и другими можно работать как с объектами автоматизации OLE. Этот подход существенно отличается от работы с этими программами как с серверами СОМ или от использования компонентов страницы Servers. Работа с объектами автоматизации может быть организована двумя способами: через библиотеки типов и через механизм автоматизации OLE.
Использование библиотеки типов имеет то преимущество, что обеспечивает проверку типов, но для работы с библиотекой типов надо сформировать соответствующий файл и разобраться в нем.
Использование автоматизации OLE применительно к Word и Excel проще, поскольку в эти программы встроена справка по VBA, содержащая описание всех объектов, свойств и методов.


Основные отличия при использовании автоматизации OLE от работы с серверами СОМ заключаются в следующем:

1)Для работы с серверами COM не обязательно чтобы приложение было запущено, но для этого необходимы определенные приготовления, которые требуют специфических знаний а так-же углубленного представления о работе технологии COM, как впрочем и в дальнейшем в процессе разработки.
Работа с серверами OLE требует от разработчика лишь возможность получить ссылку на COM-объект, запущенного приложения(OLE-сервер выдающий эту ссылку позиционирует себя как "Excel.Application")

2) В серверах автоматизации OLE при вызове методов не требуется задание значений необязательных параметров, что существенно упрощает многие операторы.
Параметры методов можно задавать в форматах "имя := значение", причем последовательность задания параметров безразлична. (по правилам VBA)
Это дополнительное удобство, так как не требуется помнить последовательность параметров в объявлении метода.

3) Еще одним преимуществом серверов автоматизации OLE является то, что вызываемые методы очень близки к их описанию в справке по VB соответствующей программы Microsoft Office. В серверах СОМ в некоторых случаях наблюдаются отличия.

4) Что касается OLE, то ряд условностей в реализации IDE, как и выбранного языка программисрования влияют так или иначе на наличие подсказок, возможность/невозможность использования констант с чем COM сервер чаще не имеет проблем. OLE-сервер как-бы сам отвечает за  соответсвующющее приведения типов, когда при работе с COM-сервером предварительно приведение типов (обязательно).

Теперь следут сказать о том, что несмотря на простоту использования OLE-сервера, и множество тонкостей работы с COM-сервером, их вообще не следует сравнивать так, как используют их для разного рода задачь.
OLE-сервера всецело выполняют роль автоматизации конкретного запущенного приложения,
в то время как COM сервера реализуют саму идеологию COM и предоставляют возможность работать непосредственно с комполнентами, и не неуждаются в комбинорованном приложении, возможности COM более широки, а для большей  ясности:
например широко применялась практика использования модулей MS Word "проверка орфографии" для проверки содержимого текстовых полей программ написанных на том-же C# или vb.NET, даже видел реализацию на Java (хотя там на этот счет есть более лаконичные решения). основана на взаимодействии с COM сервером, и для этого требуется только чтобы Word был установлен в системе - не запущен

Как-то так...



И все-таки в целом, как мне представляется, использовать серверы автоматизации OLE в большинстве случаев проще, чем работать с серверами СОМ.
« Последнее редактирование: Декабрь 14, 2010, 09:20:25 от RUVATA »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #7, Отправлен: Декабрь 14, 2010, 13:00:05 »
RUVATA
это конечно хорошо, но как-то уж общё. можно пример, как, к примеру, вызвать методы объекта того же Excel, в случае с COM и с OLE, просто я до этого времени искренне полагал что это одно и тоже, да и в вики как-то читал что COM - всего лишь концепция программирования, а OLE - конкретная ее реализация. но я не спец, и посему могу ошибаться. но вот пример все же интересно было бы глянуть.
и еще вспомнилось, про запущенные приложения и не запущенные.
Код: AutoIt [Выделить]
ObjCreate('Excel.Application')

создаст новый процесс

Код: AutoIt [Выделить]
ObjGet('Excel.Application'); или
ObjGet('filename')

перехватит существующий объект или если такового еще нет, создаст.

про это ли речь?

Русское сообщество AutoIt

Re: COM специфика работы с Word
« Ответ #7 Отправлен: Декабрь 14, 2010, 13:00:05 »

Оффлайн RUVATA [?]

  • Осваивающий
  • **
  • Сообщений: 132
  • Репутация: 36
  • Пол: Мужской
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: COM специфика работы с Word
« Ответ #8, Отправлен: Декабрь 15, 2010, 09:15:04 »
Kaster, какие ты еще знаешь ЯП?
т.к. на AutoIt мне практически подключение к COM-серверу еще не доводилось делать
(э-т эксперимент еще предстоит поставить)... а вот на vb.NET или Java
наглядно мог бы показать, с C++ и С# у меня особые счеты.
...

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #9, Отправлен: Декабрь 15, 2010, 10:26:14 »
RUVATA
С++, С#, Python

Оффлайн RUVATA [?]

  • Осваивающий
  • **
  • Сообщений: 132
  • Репутация: 36
  • Пол: Мужской
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: COM специфика работы с Word
« Ответ #10, Отправлен: Май 18, 2011, 09:52:21 »
теперь окончательно стало ясно, что с COM-серверами, без обертки в OLE, AutoIt работать не может...
по причине отсутсвия в языке строгово привидения типов, в то время как интепритатор языка С-шный, и чисто теоретически мог-бы предоставить такой функционал...
Надеемся и ждем...

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 961
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #11, Отправлен: Май 18, 2011, 13:28:31 »
RUVATA  [?]
Цитировать
стало ясно, что с COM-серверами, без обертки в OLE, AutoIt работать не может
RUVATA с чего вы это взяли?

COM ( Component Object Model - объектная модель компонентов )
OLE  ( Object Linking and Embedding - технология связывания и внедрения объектов в другие документы и объекты )

На основе COM были реализованы технологии: Microsoft OLE Automation, ActiveX, DCOM, COM+, DirectX, а также XPCOM

Оффлайн RUVATA [?]

  • Осваивающий
  • **
  • Сообщений: 132
  • Репутация: 36
  • Пол: Мужской
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: COM специфика работы с Word
« Ответ #12, Отправлен: Май 18, 2011, 14:18:35 »
http://autoit-script.ru/index.php?topic=2447.msg24499#msg24499
Я не буду настаивать... и разъяснять мне трудно так как я понимаю разницу на практике, но в терии сам плаваю...
Но я думаю, что найти информацию на руссском возможно, лично я разбирался по книге COM programming by example на "вражеском"... причем желательно бы иметь опыт программирования на языках более низкого уровня, в идеале на C++ или хотя-бы C# (хотя в последнем, опять-же фреймворк .NET скрывает от программиста внутренности COM-взаимодействия)

PS:
Garrett  [?]
Цитировать
На основе COM были реализованы технологии: Microsoft OLE Automation, ActiveX, DCOM, COM+, DirectX, а также XPCOM
Википедия классная штука :) Но подключить AutoIt на "лысый" COM-сервер не помогает  - "засада" начинается там где не просто необходимо использовать какой-то метод COM-сервера, а там где надо передавать аргументы функциям... тогда как вызывая DLL - строго определяем тип данных
н/п
Код: AutoIt [Выделить]
$DLLshell = DllCall("MyLibrary.dll", "int", "ParseData", "ptr", DllStructGetPtr($Struct))
 

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

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 961
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: COM специфика работы с Word
« Ответ #13, Отправлен: Май 18, 2011, 14:41:06 »
RUVATA  [?]
Цитировать
Википедия классная штука
А я и не скрываю! Википедия, по-моему, самый читаемый ресурс.  :)

Цитировать
"засада" начинается там где не просто необходимо использовать какой-то метод COM-сервера, а там где надо передавать аргументы функциям
Пример, где это не получается, можете привести? Мене интересно стало! Не исключаю, что я и сам могу заблуждаться. Заинтриговали!  :)

Оффлайн GDK [?]

  • Новичок
  • *
  • Сообщений: 8
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: COM специфика работы с Word
« Ответ #14, Отправлен: Октябрь 31, 2013, 15:30:55 »
Цитировать
дело в значении объектWord.Application.ScreenUpdate = 0, выполнение  объектWord.Application.ScreenUpdate = 1 решит проблемму.
.Application.ScreenUpdating = 1 (Word 2007).
Примеры для работы с таблицами (отрывки):
Код: AutoIt [Выделить]
#include <Word.au3>

Func _OpenRepLossWd()
    $WordAppRep = _WordCreate(@ScriptDir & '\ReportLossForUserGN.doc')
    $WordRep = _worddocopen( $WordAppRep, @ScriptDir & '\ReportLossForUserGN.doc')
   
    $WordAppRep.Application.Visible = True
   
EndFunc

    ;Очистка таблицы №1 вордовского файла со строки №2 до конца таблицы
    $WordRep.Application.ScreenUpdating = 0
    $k = $WordRep.tables(1).Rows.Count
    $Start = $WordRep.tables(1).cell(2,1).range.start
    $End = $WordRep.tables(1).cell($k,7).range.End
    $WordRep.range($Start, $End).delete
    $WordRep.Application.ScreenUpdating = 1

    ; Внести в ячейку (строка 2, столбец 1) текст "Fire"
    $WordRep.tables(1).cell(2,1).range.text = "Fire"
   
 


Русское сообщество AutoIt

Re: COM специфика работы с Word
« Ответ #14 Отправлен: Октябрь 31, 2013, 15:30:55 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
8 Ответов
5249 Просмотров
Последний ответ Сентябрь 27, 2011, 11:07:01
от Suppir
2 Ответов
3266 Просмотров
Последний ответ Март 27, 2012, 13:58:17
от YOgen
0 Ответов
4151 Просмотров
Последний ответ Ноябрь 17, 2011, 14:31:38
от Vlasssov
6 Ответов
5399 Просмотров
Последний ответ Ноябрь 24, 2011, 16:40:47
от tehnik
3 Ответов
4299 Просмотров
Последний ответ Январь 21, 2012, 10:09:29
от Kaster
3 Ответов
2565 Просмотров
Последний ответ Октябрь 05, 2013, 17:30:09
от WSWR
1 Ответов
1157 Просмотров
Последний ответ Февраль 14, 2015, 19:10:04
от plazzzm
2 Ответов
1176 Просмотров
Последний ответ Июнь 17, 2015, 10:56:39
от alex33
0 Ответов
5980 Просмотров
Последний ответ Октябрь 15, 2015, 07:07:39
от madmasles
8 Ответов
1504 Просмотров
Последний ответ Август 20, 2017, 15:39:02
от Grell