On-line: Andrey, гостей 3. Всего: 4 [подробнее..]
АвторСообщение



Пост N: 2
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 22.04.15 20:48. Заголовок: шаблон Microsoft Word


Кто подскажет (и покажет) - требуется использовать шаблон Word (взаимодействие - подготовка, открытие, передача параметров и т.д.), то есть требуется подготовить определенный шаблон Word, передать параметры с программы, сохранить в формате docx в определенном месте или направить на печать.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 103 , стр: 1 2 3 4 5 6 All [только новые]


постоянный участник




Пост N: 5203
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 00:44. Заголовок: Петр пишет: oWord:D..


Петр пишет:

 цитата:
oWord:Documents:Add()
oActive := oWord:ActiveDocument()

cTitle := oActive:Name
hWnd := FindWindowEx(,,, cTitle )



Не пашет !

Додумался до следующего:
   cTitle := oActive:Name  
hWnd := FindWindowEx(,,, cTitle )
? cTitle, hWnd
cTitle += " - MICROSOFT WORD"
hWnd := FindWindowEx(,,, cTitle )
? cTitle, hWnd

Результат такой:
Документ1	0	 
Документ1 - MICROSOFT WORD 396408


Как быть с таким окном Ворда (у юзеров периодически попадают) ?
cTitle := "Документ2 [Режим ограниченной функциональности] - MICROSOFT WORD"


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1357
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 01:05. Заголовок: Andrey пишет: Додум..


Andrey пишет:

 цитата:
Додумался до следующего:



Нет универсальности, лучше сначала использовать коллекцию Documents, а потом Windows

 cTitle := oActive:Name  
hWnd := FindWindowEx(,,, cTitle )

IF hWnd == 0
cTitle := oWord:Windows(1):Caption
hWnd := FindWindowEx(,,, cTitle )
ENDIF


если нет уверенности, сколько окон открыто в Ворде, а нужно последнее

 цитата:
nCount := oWord:Windows:Count
cTitle := oWord:Windows(nCount ):Caption



или перебор можно сделать

 
cTitle := oActive:Name
FOR nI := 1 TO nCount
IF cTitle $ oWord:Windows(nI):Caption
..


В отличие от коллекции Documents, в коллекцию Windows попадут и служебные окна (диалоги) Word, имейте ввиду.

В общем выход есть - пробуйте, и не ждите готового ответа.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5204
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 02:34. Заголовок: Петр пишет: В отлич..


Петр пишет:

 цитата:
В отличие от коллекции Documents, в коллекцию Windows попадут и служебные окна (диалоги) Word, имейте ввиду.



Что-то не работает:
nCount := oWord:Windows:Count
? nCount
? oWord:Windows(1):Caption


Выдает 1 и вылет с ошибкой на следующем операторе:
Error Word.Application/0 S_OK: WINDOWS
Called from TOLEAUTO:WINDOWS(0)
Called from MYWORD1OLE(83)


Хотя по Менеджеру памяти 5 скрытых процесса Ворд висят....


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1285
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 04.12.16 12:07. Заголовок: Andrey Может ЭТО по..


Andrey
Может ЭТО поможет?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5205
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 13:41. Заголовок: PSP пишет: Может ЭТ..


PSP пишет:

 цитата:
Может ЭТО поможет?


Не, не понимаю... Уже совсем заработался... Достали эти окна...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1358
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 14:45. Заголовок: Andrey пишет: Выдае..


Andrey пишет:

 цитата:
Выдает 1 и вылет с ошибкой на следующем операторе:
Error Word.Application/0 S_OK: WINDOWS
Called from TOLEAUTO:WINDOWS(0)
Called from MYWORD1OLE(83)



Замените библиотеку hbole на hbwin.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5207
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 16:06. Заголовок: Петр пишет: Заменит..


Петр пишет:

 цитата:
Замените библиотеку hbole на hbwin.


Поменял местами библиотеки, совсем избавиться не могу, т.е. проверка на наличие ВОРДА - требуется hbole.
Сразу не работает код:
   oWord := TOleAuto():NEW( "Word.Application" ) 
IF Ole2TxtError() != 'S_OK'
MsgStop( "На этом компьютере MS Word не установлен !" , "Ошибка!" )
RETURN .F.
ENDIF

Если убрать выход, то ошибка пропадает, код этот работает:
   nCount := oWord:Windows:Count 
? nCount
? "Caption=",oWord:Windows(1):Caption

Но результат всё равно не верен:
1
Caption= Документ5

Хотя 7 штук скрытых WORD сидят в памяти.
Опять перебора не получается...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1359
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 16:46. Заголовок: Andrey пишет: прове..


Andrey пишет:

 цитата:
проверка на наличие ВОРДА - требуется hbole


Да вы что,
 
IF ( oWord := win_oleCreateObject( "Word.Application" ) ) != NIL
oWord:Documents:Add()
..
ELSE
? "Error. MS Word not available.", win_oleErrorText()
ENDIF

Я вас не понимаю, что значит поменял библиотеки местами - просто используйте hbwin вместо hbole! ВСЕ!

Что значит убрать выход?
При чем здесь скрытые Word в памяти - что вы от них хотите?
Что значит верно - не верно? Это согласно документации или вашим ожиданиям?

Если вы хотите бороться с Word - боритесь.
Если хотите, что бы кто-то помог - приведите полноценный фрагмент кода, в котором вы сомневаетесь, укажите, что и как используете и т.д.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6170
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.12.16 17:17. Заголовок: Петр пишет: IF ( o..


Петр пишет:

 цитата:
IF ( oWord := win_oleCreateObject( "Word.Application" ) ) != NIL


А не лучше ли так ?
IF ( oWord := win_oleCreateObject( "Word.Application" ) ) == "O"

PS
Я про Valtype забыл , нужно его туда прицепить

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5208
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 17:21. Заголовок: Петр пишет: Я вас н..


Петр пишет:

 цитата:
Я вас не понимаю, что значит поменял библиотеки местами - просто используйте hbwin вместо hbole! ВСЕ!


Убрал воообще hbole.
На экране 3 открытых вордовых документов. Ещё один WORD скрытый процесс.
Вот полноценный фрагмент кода:
  oWord := TOleAuto():NEW( "Word.Application" ) 
oWord:Documents:Add()
oActive := oWord:ActiveDocument()
oText := oWord:Selection()
oWord:ActiveDocument:PageSetup:Orientation := wdOrientLandscape
oWord:ActiveDocument:PageSetup:LeftMargin := 72.0 //~2.5 см
....// построение таблицы и т.д.
nCount := oWord:Windows:Count
? nCount

Выдает 1. Почему ?




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6171
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.12.16 17:22. Заголовок: Andrey пишет: Вот п..


Andrey пишет:

 цитата:
Вот полноценный фрагмент кода:
nCount := oWord:Windows:Count
? nCount


Начни с самого начала , где создается объект

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1360
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 17:38. Заголовок: Andrey пишет: Вот п..


Andrey пишет:

 цитата:
Вот полноценный фрагмент кода:
nCount := oWord:Windows:Count
? nCount



Полноценный - так полноценный..

Вы каким-то образом создали экземпляр OLE обьекта

Дальше, наверное, вы создали новый документ добавив его в коллекцию Documents
oWord:Documents:Add()
При этом, поскольку документы Word живут в Window, добавился также обьект в коллекцию Windows (заметим, что 1 обьект!)

Поэтому oWord:Windows:Count вернет 1

Если вызвать
oWord:Documents:Add()
oWord:Documents:Add()
получим 2 и т.д.

Все ваши действия относятся к конкретному OLE экземпляру, а не к процессам в памяти или чему вы там решили.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1361
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 17:41. Заголовок: Dima пишет: А не лу..


Dima пишет:

 цитата:
А не лучше ли так ?
IF ( oWord := win_oleCreateObject( "Word.Application" ) ) == "O"



win_oleCreateObject в случае неуспеха вернет NIL, когда-то это активно обсуждалось разработчиками.

На том и порешили

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1362
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 17:49. Заголовок: Andrey пишет: Убрал..


Andrey пишет:

 цитата:
Убрал воообще hbole.
На экране 3 открытых вордовых документов. Ещё один WORD скрытый процесс.
Вот полноценный фрагмент кода:
oWord := TOleAuto():NEW( "Word.Application" )



Класс TOleAuto определен в библиотеке hbole.
Что вы там делаете не знаю, но часть ваших слов вызывает определенные сомнения.





Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5209
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 18:02. Заголовок: Петр пишет: Все ваш..


Петр пишет:

 цитата:
Все ваши действия относятся к конкретному OLE экземпляру, а не к процессам в памяти или чему вы там решили.


А я решил что это относиться к процессам в памяти.

Вопрос был изначален - как узнать хендл окна Worda с открытым документом, чтобы его на экран впереди всех задач вынести.
В противном случае он остается после МиниГуи задачи.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6172
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.12.16 18:41. Заголовок: Andrey А ты пробова..


Andrey
А ты пробовал вообще , то что Петр советовал ?
Использовать для создания объекта Word , win_oleCREATEOBJECT , ну а далее то что он предлагал.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1364
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 18:41. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос был изначален - как узнать хендл окна Worda с открытым документом, чтобы его на экран впереди всех задач вынести.



Вы сами дали на него ответ - FindWindowEx

В чем затык?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5211
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 19:10. Заголовок: Петр пишет: Вы сами..


Dima пишет:

 цитата:
А ты пробовал вообще , то что Петр советовал ?
Использовать для создания объекта Word , win_oleCREATEOBJECT , ну а далее то что он предлагал.


Пробовал. Разница в одном операторе, который мне не нужен. Мне нужен хендл открытого документа, который я сам создал.

Петр пишет:

 цитата:
Вы сами дали на него ответ - FindWindowEx

В чем затык?



Это моё временное решение. Нужно добавлять к названию документа такую штуку:
cTitle := "Документ2 - MICROSOFT WORD"
cTitle2 := "Документ2 [Режим ограниченной функциональности] - MICROSOFT WORD"
А для английской версии Ворда что нужно добавлять ?

Вот и озадачился я сделать как в Excel'е - он же сразу правильно выдаёт хендл созданного окна.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1365
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.16 19:17. Заголовок: Andrey пишет: Это м..


Andrey пишет:

 цитата:
Это моё временное решение.


И опять позвольте усомниться в ваших словах

Andrey пишет:

 цитата:
Нужно добавлять к названию документа такую штуку:
cTitle := "Документ2 - MICROSOFT WORD"
cTitle2 := "Документ2 [Режим ограниченной функциональности] - MICROSOFT WORD"
А для английской версии Ворда что нужно добавлять ?



Нужно добавлять ТАКУЮ штуку
cTitle := oWord:ActiveDocument():Name + "-" + oWord:Caption
или
nIndex := 1
cTitle := oWord:Windows(nIndex):Caption + "-" + oWord:Caption

И еще раз: hbole старая версия OLE из hbwin, в ней больше ошибок, в частности не исправлена работа с коллекциями по индексу.
А значит вы не можете использовать циклы по коллекциям.

Но, по моему, это вас и не интересует.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5212
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.16 19:42. Заголовок: Петр пишет: Но, по ..


Петр пишет:

 цитата:
Но, по моему, это вас и не интересует.


Интересует. Понял что hbwin лучше !
А хендл окна сразу можно получить, без FindWindowEx() ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 103 , стр: 1 2 3 4 5 6 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 520
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет