Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/98: Рейтинг темы: голосов - 98, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 12.08.2006
Сообщений: 59
1

двусторонняя печать Doc файла из Lotusa

29.07.2009, 18:16. Просмотров 17740. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток.
Столкнулся с проблемой при использовании OLE Worda 2003.

Пытаюсь запустить из Lotusa ручную двустороннюю печать файла Worda:

[codebox]
Sub Click(Source As Button)
On Error Goto er1

Dim wordObject As Variant
Dim pvWordDocument As Variant
Dim Background As Variant
Dim Range As Variant
Dim Copies As Variant
Dim PageType As Variant
Dim PrintToFile As Variant
Dim Collate As Variant
Dim ManualDuplexPrint As Variant

Set wordObject=CreateObject("Word.Application")
If Isobject(wordObject) Then
wordObject.Visible=True
Set pvWordDocument=wordObject.Documents.Open("D:\test2.doc")
End If
Background=True
Range=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintA llDocument
Copies=1
PageType=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPri ntAllPages
PrintToFile=False
Collate=False
ManualDuplexPrint=True
Call pvWordDocument.PrintOut(Background, Range, Copies,PageType, PrintToFile, Collate, ManualDuplexPrint)
Exit Sub

er1:

Msgbox Error$ & Chr(10) & Getthreadinfo(1) & " (l." & Erl & ")"
Resume WorkDone
WorkDone:
End Sub[/codebox]



В приведенном коде получаю ошибку при запуске "Variant does not contain an object" при инициализации Range.

При попытке передачи параметров Range и PageType просто числами:
[codebox]

Background=True
Copies=1
PrintToFile=False
Collate=False
ManualDuplexPrint=True
Call pvWordDocument.PrintOut(Background, 0, Copies,0, PrintToFile, Collate, ManualDuplexPrint) [/codebox]

код падает при вызове PrintOut с ошибкой "Automation object argument type mismatch". Причем похоже, падает на параметре PageType (второй ноль).

Если же инициализировать Range и PageType по имени константы:

[codebox] Background=True
Range=wdPrintAllDocument
Copies=1
PageType=wdPrintAllPages
PrintToFile=False
Collate=False
ManualDuplexPrint=True
Call pvWordDocument.PrintOut(Background, Range, Copies,PageType, PrintToFile, Collate, ManualDuplexPrint) [/codebox]

код валится опять же на PrintOut, c той же ошибкой "Automation object argument type mismatch"


Может кто подскажет, как правильно передать параметры в функцию PrintOut?
По идее все параметры этой функции по MSDN и прочим источникам имеют тип Object, но Lotus его не знает ;)
Ошибка "Variant does not contain an object" при попытке инициализации констант через Microsoft.Office.Interop.Word вполне логична и ожидаема, но я уже не знаю как правильно достучаться до них. Почему то кажется , что проблема именно в Range и PrintOut.

Заранее спасибо за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2009, 18:16
Ответы с готовыми решениями:

печать .doc Application посредством Ls
всем добрый день! в LS формирую для печати коллекцию документов .doc по коллекции документов...

Вывод на печать doc-файла
Подскажите как вывести на печать за ранние созданный файл .doc. Если можно примером кода.

Заполнение и печать шаблона .doc файла
Здравствуйте! Есть идея не знаю как реализовать. Хочу написать консольное приложение, где...

Двусторонняя печать
Привет. Скажмите, пожалуйста, есть документ на 50 страниц, мне нужно его распечатать с двух сторон,...

4
0 / 0 / 0
Регистрация: 06.04.2008
Сообщений: 151
29.07.2009, 19:24 2
Цитата Сообщение от Dikobraz Grey
При попытке передачи параметров Range и PageType просто числами:
Была похожая трабла с вордовыми объектами. Точно сейчас уже не помню, кажись нада копать в сторону полной передачи параметров числами (я их наискивал в вордовском Object Browsere - в редакторе VBA вызывается. там внизу в статус баре выдается инфа по численным соответствиям мемберов вордовых объектов):

Код
Call pvWordDocument.PrintOut(1, 0, 1, 0, 0, 0, 1)


Цитата Сообщение от Dikobraz Grey
Ошибка "Variant does not contain an object" при попытке инициализации констант через Microsoft.Office.Interop.Word вполне логична и ожидаема, но я уже не знаю как правильно достучаться до них.
и я бы не юзал такую конструкцию, пробуй напрямую обращаться к ворду и его "детям":

Код
Set word = CreateObject("Word.Application")
Call word.ActiveDocument.PrintOut(1, 0, 1, 0, 0, 0, 1)
да и кстати еще замутка в том, чтобы передавать ворду все параметры его ф-ии - там где у него Optional (по мойму для этих целей Nothyng отлично катит) - а в этой ф-ии они все такие *брал из 2007-го - может чуток отличаться* : PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight). Те которые играют в твоем коде, пиши прям в числах, а которые не играют - подставь Nothyng
0
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 615
29.07.2009, 19:29 3
Цитата Сообщение от Dikobraz Grey
Если же инициализировать Range и PageType по имени константы:
код валится опять же на PrintOut, c той же ошибкой "Automation object argument type mismatch"
А если попробовать задекларировать
Const wdPrintAllDocument = 0
Const wdPrintAllDocument = 0

Значения констант подсмотрены тут: http://objectmix.com/framework-interface-p...ibraries-3.html
0
0 / 0 / 0
Регистрация: 06.04.2008
Сообщений: 151
29.07.2009, 23:50 4
"Урра! Заработало!" ©

Вордовая ф-ия требует четкой последовательности параметров, то есть поскольку она объявлена как
PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate,
FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight)
получается, что в первоначальном варианте в то время, как она хотела OutputFileName (строчечку то есть) мы ей отдавали Integer, вот она и матюгалась.
А ее нужно покормить соответственно, благо можно не все параметры передавать, а до определенного нужного нам места - мне хватило духу добраться до Collate, дальше устал запятые считать ;) но принцип, думаю, понятен


Код
Sub Click(Source As Button)
On Error Goto er1

Dim wordObject As Variant
Dim pvWordDocument As Variant

Set wordObject=CreateObject("Word.Application")
If Isobject(wordObject) Then
wordObject.Visible=True
Set pvWordDocument=wordObject.Documents.Open("D:\test2.doc")
End If

Call pvWordDocument.printout(, , 0, , , , 0, 1, , 0, , 1)

Exit Sub

er1:

Msgbox Error$ & Chr(10) & Getthreadinfo(1) & " (l." & Erl & ")"
Resume WorkDone
WorkDone:
End Sub
0
0 / 0 / 0
Регистрация: 12.08.2006
Сообщений: 59
30.07.2009, 20:11 5
Спасибо, amigolinx . Заработало
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2009, 20:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Двусторонняя печать 2
Извините что не стал писать в тему с таким же названием, но там совершенно другая проблема. В...

Двусторонняя печать
У меня проблемы с печатью,я хочу распечатать документ чтобы он был в виде книги,у меня же...

Двусторонняя печать отчета
Это осуществимо? С помощью VBA Добавлено через 27 минут Вопрос снят, нашла. С помощью этой...

Двусторонняя печать документа Word
Всем добрый день, Тут такой вопрос. Генерирую в vb.net документ ворд двустраничный и хочу его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.