1

Тема: VBS: Возможно ли на vbs послать на печать документ Word?

Хотелось бы узнать возможно ли непосредственно из тела vbs послать на печать документ Word? Причем с сохранением форматирования текста?

2

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Word установлен на машине?

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

3

Re: VBS: Возможно ли на vbs послать на печать документ Word?

да, а если не установлен возможно ли с блокнота?

4

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Думаю распечатать документ Word "с блокнота с сохранением форматирования" можно вряд ли. Можно поискать параметры командной строки winword.exe для печати. Или попытаться выполнить скриптом команду "Print" контекстного меню файла.

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

5

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Я не про то))Если установлен Word, то печатеть с него, а если ворда нету, то возможно ли печать с блокнота (с txt файла)
и желательно бы код скрипта

6

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Думаю, в такой ситуации можно попробовать программно выполнить "глагол" реестра, т.е. пункт контекстного меню для файла, описание и пример здесь. Команда может быть как "Print", так и "Печать".

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

7 (изменено: hiho, 2008-03-18 14:31:05)

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Спасибо про подсказку про глагол я как-то забыл (

Получившийся код(C txt работает, на вордовских пока что не проверял):

set o = CreateObject("Shell.Application")
o.ShellExecute "Путь","","", "print",0

8

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Некоторые особенности методов DoIt, InvokeVerb, InvokeVerbEx, ShellExecute объекта автоматизации Shell.Application и метода Run объекта автоматизации WScript.Shell.

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

9 (изменено: Alexbootch, 2008-03-19 01:19:59)

Re: VBS: Возможно ли на vbs послать на печать документ Word?

hiho пишет:

Получившийся код(C txt работает, на вордовских пока что не проверял):

set o = CreateObject("Shell.Application")
o.ShellExecute "Путь","","", "print",0

Для того что бы распечатать документ *.doc. нужно добавить задержку:

Dim o
set o = CreateObject("Shell.Application")
o.ShellExecute "Путь","","", "print", 0
Wscript.Sleep(1000)
Set o = Nothing

При указанном способе распечатки документа *.doc  параметр Show равный 0 будет проигнорирован

Для распечатки документа *.doc в скрытом режиме можно использовать следующий код:

Dim w
Set W = CreateObject("Word.Application")
w.Visible = false
w.Documents.Open "D:\Doc1.doc"
w.ActiveDocument.PrintOut
WScript.Sleep(1000)
w.Quit
Set w = Nothing

Через блокнот увы документ *.doc  не распечатать. Как вариант - можно распечатать через WordPad, но у него есть глюки при открытии картинки не грузятся, да и текст визуально и на печати не выравнивается по ширине.

10

Re: VBS: Возможно ли на vbs послать на печать документ Word?

…а если не установлен возможно ли с блокнота?

Нет. Однако есть такое средство, как WordView.

11

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Alexbootch
Спасибо, пример в Коллекции.
Если сможешь добавить ещё пример для Excel, будет вообще прекрасно .

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

12

Re: VBS: Возможно ли на vbs послать на печать документ Word?

К сожалению, вынужден сделать некоторые поправки ко второму скрипту.

В операторе

w.Visible = false

необходимости нет: при работе в качестве сервера автоматизации Word, по умолчанию, не отображает окно приложения.

w.ActiveDocument.PrintOut

Вместо применения .ActiveDocument — правильно:

Set objDoc = .Documents.Open("D:\Doc1.doc")
objDoc.PrintOut

Далее просто ошибка:

w.ActiveDocument.PrintOut
WScript.Sleep(1000)

По умолчанию Word производит фоновую печать документа (при этом работа скрипта продолжается). Однако, задержки в 1000 мс достаточно для печати лишь коротких и простых по структуре документов. Если фоновая печать к этому времени не будет завершена, то по w.Quit незаконченное задание на печать будет снято. Необходимо:
— либо ждать, пока не будет завершена фоновая печать документа;
— либо печатать напрямую, так сказать, на «переднем» плане.

В данном конкретном случае, когда требуется только отпечатать документ, выбор метода особо не важен (хотя… при фоновой печати, в цикле ожидания можно выводить индикатор, что печать продолжается [ну, конечно, без процентов… ]). В других случаях, если кроме печати документа требуется проделать ещё какие-либо манипуляции — выбор фоновой печати однозначен.

В качестве примера (проверено на MS Word 2003):

Option Explicit

Const wdDoNotSaveChanges    =  0
Const wdPromptToSaveChanges = -2
Const wdSaveChanges         = -1


Dim objWord
Dim objDoc

Set objWord = WScript.CreateObject("Word.Application")

With objWord
    ' .Documents.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles)
    Set objDoc = .Documents.Open("C:\Temp\01.doc", False, True, False)
    
    ' 
    '- Метод 1. Печать в фоновом режиме -----------------------------------------
    objDoc.PrintOut True                         ' .PrintOut(Background)
    
    ' Здесь, при необходимости, можно делать что-то ещё

    Do
        WScript.Sleep 500
    Loop Until .BackgroundPrintingStatus = 0     ' Ждём окончания фоновой печати
    '----------------------------------------------------------------------------
    
    '- Метод 2. Печать напрямую -------------------------------------------------
    objDoc.PrintOut False                        ' .PrintOut(Background)
    '----------------------------------------------------------------------------
    
    Set objDoc = Nothing
    
    .Quit wdDoNotSaveChanges                     ' .Quit(SaveChanges)
End With

Set objWord = Nothing

WScript.Quit 0

13

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii
Спасибо! Добавил в Коллекцию.

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

14

Re: VBS: Возможно ли на vbs послать на печать документ Word?

The gray Cardinal пишет:

добавить ещё пример для Excel

В качестве примера (проверено на MS Excel 2000):

Option Explicit

Dim objExcel
Dim objWorkbook

Set objExcel = WScript.CreateObject("Excel.Application")

With objExcel
    ' .Workbooks.Open(FileName, UpdateLinks, ReadOnly,...)
    '
    '  UpdateLinks is:
    ' 0 Doesn't update any references 
    ' 1 Updates external references but not remote references 
    ' 2 Updates remote references but not external references 
    ' 3 Updates both remote and external references 
    '
    ' or .AskToUpdateLinks = False
    
    Set objWorkbook = .Workbooks.Open("C:\Temp\01.xls", 0, True)
    
    objWorkbook.PrintOut
    objWorkbook.Saved = True
    
    Set objWorkbook = Nothing
    
    .Quit
End With

Set objExcel = Nothing

WScript.Quit 0

P.S. Во время работы обоих скриптов теоретически возможно появление и других непредусмотренных диалогов (мне сейчас сложно всё заранее предусмотреть). Возможно, в этом случае стоит поиграться со свойством Application.DisplayAlerts.

15

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii
Спасибо! Добавил в Коллекцию и этот пример, на MS Excel 2003 работает, конечно, тоже.

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

16

Re: VBS: Возможно ли на vbs послать на печать документ Word?

насколько я понял, печатаются документы на принтер, установленный по умолчанию.
А как направить печать документов на определенный сетевой принтер?

17

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Сначала нужно его подключить, а затем натравить на него свойство:

ActivePrinter Property
Returns or sets the name of the active printer. Read/write String.

Example
This example displays the name of the active printer.

MsgBox "The name of the active printer is " & ActivePrinter

This example makes a network HP LaserJet IIISi printer the active printer.

Application.ActivePrinter = "HP LaserJet IIISi on \\printers\laser"

This example makes a local HP LaserJet 4 printer on LPT1 the active printer.

Application.ActivePrinter = "HP LaserJet 4 local on LPT1:"

18

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Подскажите, пожайлуйста, как этот скрипт использовать в totalcmd для печати документов.
Если задать команду в меню Start totalсmd, то как скрипт получит путь необходимого файла?
Как видно в описанных здесь решениях путь задан жёстко.

19

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Karam, какой именно скрипт? В теме их несколько.

P.S. А что, в TC правую кнопку мышки или клавишу Menu отменили?

20

Re: VBS: Возможно ли на vbs послать на печать документ Word?

То, что есть мышка я помню, но мне хотелось бы по комбинации клавиш отправлять задания на печать (чаще файлы *.doc) в фоновом режиме.
В то же время, даже когда используешь команду print через контекстное меню, на экране появляется окно Worda, мелькает (как будто я не знаю, что дал команду на печать), и вот приходится смотреть на все эти выкрутасы.
Хотелось бы просто: нажал - дефолтный принтер заработал - а пользователь не отвлекается от других документов и не ловит мышку по столу.

21

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Ну, если уж так сильно хочется, то можете попробовать так.

1. Правите пример, приведённый в Коллекции, дабы он работал с аргументом командной строки сценария. В итоге получается скрипт, назовём его «C:\Песочница\PrintSilent\PrintSilent.vbs»:

Option Explicit

Const wdDoNotSaveChanges    =  0


Dim objFSO

Dim objWord
Dim objDoc

Dim strFileName


If WScript.Arguments.Count = 1 Then
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    
    strFileName = WScript.Arguments.Item(0)
    
    If objFSO.FileExists(strFileName) Then
        Set objWord = WScript.CreateObject("Word.Application")
        
        With objWord
            Set objDoc = .Documents.Open(strFileName, False, True, False)
            
            objDoc.PrintOut True
            
            Do
                WScript.Sleep 500
            Loop Until .BackgroundPrintingStatus = 0
            
            Set objDoc = Nothing
            
            .Quit wdDoNotSaveChanges
        End With
        
        Set objWord = Nothing
    End If
    
    Set objFSO = Nothing
End If

WScript.Quit 0

2. Читаете Писание Настройка контекстного меню Проводника с помощью реестра Windows и готовите файл реестра, назовём его «C:\Песочница\PrintSilent\PrintSilent.reg», который импортируете в реестр (предполагается, что у Вас в наличии имеется MS Office 2003, иначе выбирайте иной путь ключей «HKEY_CLASSES_ROOT\Word.Document.8\…» в реестре):

REGEDIT4

[HKEY_CLASSES_ROOT\Word.Document.8\shell\PrintSilent]
@="&Тихая печать"

[HKEY_CLASSES_ROOT\Word.Document.8\shell\PrintSilent\command]
@="wscript.exe \"C:\\Песочница\\PrintSilent\\PrintSilent.vbs\" \"%1\""

Комбинация клавиш: Apps, Down, Down, Down, Down, Down, Enter . Если бы Вы использовали Far Manager — я бы сказал: вешайте «rclk_cmd:PrintSilent "!\!.!"» на удобную Вам клавишу в UserMenu или создавайте полноценный макрос. Как можно назначать горячие клавиши своим действиям в TC — я не искал, тут Вам и карты в руки.

22

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii Спасибо за разъяснение и подготовку скрипта и файла реестра!
Пришлось повозиться с настройкой клавиш в totalcmd.
Нашёл некоторую информацию на форуме wincmd.ru, кое-что мне подсказала сама программа totalcmd.
В итоге необходимо в параметрах запуска скрипта, созданного alexii, добавить %p%n и будет счастье! , но только для одного файла.
В смысле печататься будет один файл, а вот если выделить два файла, то печататься будет тот, на котором находится курсор totalcmd.
Для полного счастья пока не знаю, что сделать. То ли это total так себя ведёт, то ли скрипт?

23

Re: VBS: Возможно ли на vbs послать на печать документ Word?

В итоге необходимо в параметрах запуска скрипта, созданного alexii, добавить %p%n и будет счастье! smile, но только для одного файла.
В смысле печататься будет один файл, а вот если выделить два файла, то печататься будет тот, на котором находится курсор totalcmd.

Что есть «%p%n»?

Как Вам удалось печатать только один файл? У меня сколько выделено, столько и печатает (по описанной мной технологии) — на каждый файл запускается свой экземпляр скрипта.

Давайте по буквам рассказывайте, как Вы настраивали у себя, будем глядеть.

24

Re: VBS: Возможно ли на vbs послать на печать документ Word?

В "Start Menu" totalcmd создал пункт "print Word",
в поле "command" - C:\Program Files\AutoHotkey\PrintSilent.vbs
в поле "parameters" - %p%n
в поле "Start patch" - C:\Program Files\AutoHotkey\

Если поле "parameters" оставить пустым, то при нажатии клавиши Ctrl+p ничего не происходит.
Если в поле "parameters" поставить %p%n, то происходит "тихая печать".
Если при этом параметре в totalcmd выделить 2 файла (*.doc), то печатается только тот, который находится под курсором totalcmd. Видимо, эти параметры означают передачу пути файла, находящегося под курсором, а не тех, что выделены.

25

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Вообще-то я писал совсем-совсем про другое. Вам, в случае использования меню TC, reg-файл не понадобится, работать нужно будет с файл-списком «%L», соответственно, скрипт понадобится переделать. Ждите ночью.

Да, и как Вы там Ctrl-P горячей клавишей назначили? Какая у Вас версия?

P.S. На будущее — лучше-таки не «%p%n», а «%P%N». Подробности — в справке.

26

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Karam, пробуйте:

Option Explicit

Const ForReading         = 1


Dim objFSO
Dim objTS

Dim objWshShell

Dim objWord
Dim objDoc

Dim objExcel
Dim objWorkbook

Dim strListFileName
Dim strFileName


If WScript.Arguments.Count = 1 Then
    Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
    Set objWshShell = WScript.CreateObject("WScript.Shell")
    
    strListFileName = WScript.Arguments.Item(0)
    
    'WScript.Echo strListFileName
    
    If objFSO.FileExists(strListFileName) Then
        Set objTS = objFSO.OpenTextFile(strListFileName, ForReading)
        
        Set objWord  = Nothing
        Set objExcel = Nothing
        
        Do Until objTS.AtEndOfStream
            strFileName = objTS.ReadLine()
            
            'WScript.Echo strFileName
            
            If objFSO.FileExists(strFileName) Then
                Select Case UCase(objFSO.GetExtensionName(strFileName))
                    Case "DOC"
                        PrintDOC strFileName
                    Case "XLS"
                        PrintXLS strFileName
                    Case "TXT"
                        PrintTXT strFileName
                    Case Else
                        ' Nothing to do
                End Select
            End If
        Loop
        
        If Not objWord Is Nothing Then
            objWord.Quit
            
            Set objWord = Nothing
        End If
        
        If Not objExcel Is Nothing Then
            objExcel.Quit
            
            Set objExcel = Nothing
        End If
    End If
    
    Set objWshShell = Nothing
    Set objFSO      = Nothing
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub PrintDOC(strFileName)
    Const wdDoNotSaveChanges = 0
    
    If objWord Is Nothing Then
        Set objWord = WScript.CreateObject("Word.Application")
    End If
    
    With objWord
        Set objDoc = .Documents.Open(strFileName, False, True, False)
        
        objDoc.PrintOut True
        
        Do
            WScript.Sleep 500
        Loop Until .BackgroundPrintingStatus = 0
        
        objDoc.Close wdDoNotSaveChanges
        
        Set objDoc = Nothing
    End With
End Sub
'=============================================================================

'=============================================================================
Sub PrintXLS(strFileName)
    If objExcel Is Nothing Then
        Set objExcel = WScript.CreateObject("Excel.Application")
    End If
    
    With objExcel
        .AskToUpdateLinks = False
        .Interactive      = False
        .DisplayAlerts    = False
        
        Set objWorkbook = .Workbooks.Open(strFileName, 0, True)
        
        objWorkbook.PrintOut
        objWorkbook.Close False
        
        Set objWorkbook = Nothing
    End With
End Sub
'=============================================================================

'=============================================================================
Sub PrintTXT(strFileName)
    objWshShell.Run """notepad.exe"" /p """ & strFileName & """", 0, False
End Sub
'=============================================================================

Поддерживает печать *.doc, *.xls и *.txt. В двух последних случаях всё равно будет отображаться окно «Печать»: «Идёт печать документа …».

В созданном пункте меню TC меняете «Command:» на:

wscript.exe "<путь>\PrintSilent.vbs"

В «Parameters:» указываете «%L».

P.S. Если Вы ранее импортировали reg-файл из #21 — удалите из реестра добавленные им параметры, для текущего метода печати они не нужны.

27

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii
Последний вариант скрипта не срабатывает, вообще (у меня WinXP sp3).
Я и через контекстное меню, через пункт "Тихая печать", пробовал - ничего не происходит.

В отношении настройки totalcmd.
Если для предпоследнего варианта скрипта (который работает) в «Parameters:» указать «%L», то на печать уходит документ, в котором указывается одна строка - путь и название печатаемого файла. А непосредственно содержание файла не распечатывается.

В отношении рег-файла, я тоже догадался, что для работы скрипта он не нужен. Но пока идёт тестирование, запись в реестре оставлю, потом удалю.

28

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Karam, я ведь сказал: забудьте про предыдущий вариант полностью и окончательно, удалите из реестра добавленные параметры и забудьте о таком пункте, как «Тихая печать» — Вы ведь сказали, что контекстное меню Вам не подходит, печатать Вы планируете из стартового меню TC (кстати, а ему можно назначить горячую клавишу? Или она есть, а я не знаю?)

Кстати, что случилось с ответами на мои вопросы:

alexii пишет:

Да, и как Вы там Ctrl-P горячей клавишей назначили? Какая у Вас версия?

Я их почему-то не вижу . Если Вы планируете получить результат, желательно отвечать на задаваемые вопросы.

Теперь по Вашему посту:

Karam пишет:

Последний вариант скрипта не срабатывает, вообще

У меня всё работает. Обычно я стараюсь проверять и после того, как выкладываю код на форум — копирую текст скрипта из браузера и проверяю ещё раз.

Karam пишет:

(у меня WinXP sp3).

У меня тоже Windows XP SP3, MS Office 2003 SP3, версия TC, применявшаяся для проверки (я им не пользуюсь), — 6.55.

Karam пишет:

Если для предпоследнего варианта скрипта (который работает) в «Parameters:» указать «%L»,…

…то он распечатает имена выделенных файлов. Первый скрипт на это и не рассчитан. Он принимает в качестве параметра имя файла для печати. В случае указания параметра «%L» ему будет передан текстовый файл, содержащий имена выделенных на панели TC файлов, которые он добросовестно и распечатает, поскольку никакой проверки, что имя переданного файла есть документ Microsoft Word, не делается (и не предполагалось делать, поскольку первый скрипт был предназначен для запуска исключительно из контекстного меню файлов типа «Word.Document»).

Вы нашли и прочли в справке TC, что есть параметр «%L» и для чего он нужен?

Если Вы готовы, мы можем пройтись по пунктам, как и что делать.

29

Re: VBS: Возможно ли на vbs послать на печать документ Word?

У меня заработало!!!:)
Причина была в том, imho, что я Вашу новую версию скрипта скопировал, а в старт-меню total не поменял ключи с %p%n на %L.
Большое спасибо за Ваш труд и внимание, что помогли разобраться.

В отношении назначения клавиш - у меня total v.7.04. Там в главном окне опций программы в разделе Misk. есть возможность выбрать необходимое сочетание клавиш.
http://www.photoshare.ru/photo3955414.html
В старт-меню все пункты, которые создаёт пользователь номеруются сверху вниз: 1,2,3...
Поэтому, если мы для выбранной комбинации клавиш хотим назначить команду, указанную восьмой по счёту в старт-меню, то мы для неё выбираем команду cm_UserMenu8.
При этом команд в старт-меню может быть и 15-20-30. Чтобы они стали видны, необходимо в файле c:\Program Files\totalcmd\TOTALCMD.INC найти секцию user и дописать, например, cm_UserMenu15=715.

В более ранних версиях total это тоже работает, даже несмотря на то, что в главном окне опций нету окна настройки.

Про параметр %L в справке прочитал - поддержка длинных имён.
Ещё раз спасибо за внимание и за скрипт!
Наверняка он пригодится ещё кому-нибудь.
У меня уже глубокая ночь, тестировать нет времени, поэтому после более проверки скрипта напишу позднее.

30

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Karam пишет:

Причина была в том, imho, что я Вашу новую версию скрипта скопировал, а в старт-меню total не поменял ключи с %p%n на %L.

Бывает.

Karam пишет:

В отношении назначения клавиш - у меня total v.7.04. Там в главном окне опций программы в разделе Misk. есть возможность выбрать необходимое сочетание клавиш.

В более ранних версиях total это тоже работает, даже несмотря на то, что в главном окне опций нету окна настройки.

В той, что я использовал для отладки (6.55), — есть. Однако, поскольку, как я и писал выше, его не пользую, то и не знал где «копать». Поиск в справке к нужному результату меня не привёл.

31

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Кстати вышла новая версия total - 7.50. Сделано ряд существенных улучшений по использованию, например навигация по пути, прописанному над файловой панелью как в проводнике у Vista; быстрый поиск по файловой панели с фильтром ...

Скрипт работает на ура!!!
Чего ещё не хватает, и является желательным, так это поддержки нового офисного расширения - *.docx, а также распространённого *.rtf.
Поэтому, если есть возможность, прошу добавить.

32

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Karam, у меня отсутствует Office 2007 как таковой, «*.docx» проверять и отлаживать не на чем. Но Вы можете попробовать просто исправить имеющийся скрипт, добавив обработку расширения «docx», может быть и заработает (*.rtf добавляется так же, но это я проверить могу).

Замените:

Case "DOC"

на:

Case "DOC", "DOCX", "RTF"

и:

Case "XLS"

на:

Case "XLS", "XLSX"

33

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii
Расчёт точен! Мастер знает, что делать
Спасибо! Всё работает - и doc, и docx, и rtf, и xlsx.
Просто и удобно. Я в основном пользуюсь doc, docx и rtf. В этой части скрипт работает идеально.
Imho, скрипт достоен размещения в коллекции. Также его можно предложить на форуме wincmd.ru. Поскольку Вы автор, Вам решать.
Ещё раз спасибо за помощь!

34

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Karam, на главной странице сайта есть:

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.

Это максимум, что требуется, если Вы захотите его где-то разместить; я-то точно не буду этим заниматься — на мой взгляд скрипт тривиален, узкоспецифичен и малоценен.

35

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii пишет:

В созданном пункте меню TC меняете «Command:» на:

wscript.exe "<путь>\PrintSilent.vbs"

В «Parameters:» указываете «%L».

P.S. Если Вы ранее импортировали reg-файл из #21 — удалите из реестра добавленные им параметры, для текущего метода печати они не нужны.

Спасибо за скрипт! Адаптировал его для печати pdf, аналогично txt файлам. Но есть вопрос: возможно ли, чтобы после печати в имя файла добавлялось произвольное слово или буква? Т.е. если был файл допустим 2011_02_14_01.pdf, то после печати он переименовывался в 2011_02_14_01printed.pdf ?
Заранее благодарю.

36

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Если речь про этот скрипт, то добавьте строку «objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)» в скрипт примерно так:

    …
    If Not objExcel Is Nothing Then
        objExcel.Quit
        
        Set objExcel = Nothing
    End If
    
    objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)
End If
…

37

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii пишет:

Если речь про этот скрипт, то добавьте строку «objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)» в скрипт примерно так:

    …
    If Not objExcel Is Nothing Then
        objExcel.Quit
        
        Set objExcel = Nothing
    End If
    
    objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)
End If
…

Спасибо за ответ. Да, речь именно об этом скрипте.
При добавлении строчки в указанное место получаем:
файлы DOC - из трех выделенных печатаются все, но переименовывается только один
файлы PDF - из трех выделенных переименовывается только один, а печатются только два непереименованных (на третьем Acrobat выдает ошибку, что не может найти указанный файл)

Скрипт у меня в таком виде:

Option Explicit

Const ForReading         = 1


Dim objFSO
Dim objTS

Dim objWshShell

Dim objWord
Dim objDoc

Dim objExcel
Dim objWorkbook

Dim strListFileName
Dim strFileName


If WScript.Arguments.Count = 1 Then
    Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
    Set objWshShell = WScript.CreateObject("WScript.Shell")
    
    strListFileName = WScript.Arguments.Item(0)
    
    'WScript.Echo strListFileName
    
    If objFSO.FileExists(strListFileName) Then
        Set objTS = objFSO.OpenTextFile(strListFileName, ForReading)
        
        Set objWord  = Nothing
        Set objExcel = Nothing
        
        Do Until objTS.AtEndOfStream
            strFileName = objTS.ReadLine()
            
            'WScript.Echo strFileName
            
            If objFSO.FileExists(strFileName) Then
                Select Case UCase(objFSO.GetExtensionName(strFileName))
                    Case "DOC"
                        PrintDOC strFileName
                    Case "XLS"
                        PrintXLS strFileName
                    Case "PDF"
                        PrintPDF strFileName
                    Case Else
                        ' Nothing to do
                End Select
            End If
        Loop
        
        If Not objWord Is Nothing Then
            objWord.Quit
            
            Set objWord = Nothing
        End If
        
        If Not objExcel Is Nothing Then
            objExcel.Quit
            
            Set objExcel = Nothing
        End If
    objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)
    End If
    
    Set objWshShell = Nothing
    Set objFSO      = Nothing
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub PrintDOC(strFileName)
    Const wdDoNotSaveChanges = 0
    
    If objWord Is Nothing Then
        Set objWord = WScript.CreateObject("Word.Application")
    End If
    
    With objWord
        Set objDoc = .Documents.Open(strFileName, False, True, False)
        
        objDoc.PrintOut True
        
        Do
            WScript.Sleep 500
        Loop Until .BackgroundPrintingStatus = 0
        
        objDoc.Close wdDoNotSaveChanges
        
        Set objDoc = Nothing
    End With
End Sub
'=============================================================================

'=============================================================================
Sub PrintXLS(strFileName)
    If objExcel Is Nothing Then
        Set objExcel = WScript.CreateObject("Excel.Application")
    End If
    
    With objExcel
        .AskToUpdateLinks = False
        .Interactive      = False
        .DisplayAlerts    = False
        
        Set objWorkbook = .Workbooks.Open(strFileName, 0, True)
        
        objWorkbook.PrintOut
        objWorkbook.Close False
        
        Set objWorkbook = Nothing
    End With
End Sub
'=============================================================================

'=============================================================================
Sub PrintPDF(strFileName)
    objWshShell.Run """C:\TotalCommanderPortable\Other\Reader\AcroRd32"" /h /p """ &  strFileName & """", 0, False
End Sub
'=============================================================================

38

Re: VBS: Возможно ли на vbs послать на печать документ Word?

segreich, я попробую посмотреть вечером на реальном примере.

39

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Попробуйте пока ещё так: перенести строку

    objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)

выше, внутрь цикла:

                End Select
                
                objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)
            End If
        Loop

А в:

Sub PrintPDF(strFileName)
    objWshShell.Run """C:\TotalCommanderPortable\Other\Reader\AcroRd32"" /h /p """ &  strFileName & """", 0, False
End Sub

поменять «False» на «True» для ожидания завершения печати.

40

Re: VBS: Возможно ли на vbs послать на печать документ Word?

С вордом все отлично как с ожиданием печати, так и без. А вот Acrobat зараза не закрывает себя после печати и пока его вручную не закроешь, то печать не продолжается (это в случае True, ожидания печати). В случае False Acrobat выдает ошибку об отсутствии файла. Файлы переименовываются все нормально.

Пока нашел альтенативный промотрщик pdf, который работает с коммандной строкой и закрывает себя после печати: Manual for Sumatra PDF reader.
Но по скорости он медленнее.

Если будет желание/возможность доработать Acrobat, то было бы здорово. Если нет, то альтернативный вариант пока вполне сгодится.
В любом случае спасибо за помощь!

41

Re: VBS: Возможно ли на vbs послать на печать документ Word?

segreich, ссылки на форуме оформляются тэгом «code». Я поправил Ваш пост.

42

Re: VBS: Возможно ли на vbs послать на печать документ Word?

segreich, к сожалению, из того, что я пробовал с Reader'ом (а также из того, о чём периодически шла речь у нас на форуме про печать pdf) — я сделал вывод, что по сю пору Adobe, мягко говоря, клал на подобные потребности пользователей, и следует, как Вы и сделали, использовать для печати стороннее средство. Кроме приведённой ссылки Sumatra PDF также упоминался и Foxit Reader. Сам я не пользовался ни тем, ни другим.

43

Re: VBS: Возможно ли на vbs послать на печать документ Word?

alexii
Я тоже в Вашем скрипте подписал код для печати PDF.

Sub PrintPDF(strFileName)
    objWshShell.Run """c:\Program Files\Foxit Software\Foxit Reader\FoxitReader.exe"" /p """ & strFileName & """", 0, False
End Sub

Давно пользуюсь Foxit Reader. Печать проходит, но, к сожалению, после этого окно программы Foxit Reader не закрывается. Можно что-нибудь придумать?

Второй вопрос связанный с работой скрипта по другим форматам.
Возник вопрос по отправке на печать графических файлов.
Использую версию totalcmd 8.51 на Windows 7.
При выделении в панели totalcmd нескольких файлов и выполнении Ctrl+F9 (штатная команда totalcmd из меню файл-печать) на печать отправляется лишь один файл (последний из выделенных).
Я использую для Ctrl+P Ваш скрипт.
Можно ли доработать скрипт так, чтобы все выделенные графические файлы отправлялись в штатную программу "Печать изображений" Windows 7?

Так, например, происходит, если отправить выделенные файлы на печать через контекстное меню проводника.

44

Re: VBS: Возможно ли на vbs послать на печать документ Word?

Давно пользуюсь Foxit Reader. Печать проходит, но, к сожалению, после этого окно программы Foxit Reader не закрывается. Можно что-нибудь придумать?

Если речь про версию 7.x, то ничего. Silent printing does not work anymore in version 7c - Foxit Corporation Forums:

+ открыть спойлер

Is it possible to make Foxit Reader close automatically after carrying out the print job? For instance via a command line switch?

Currently Foxit Reader can not be closed automatically after carrying out the print job. I've reported your comments to Foxit bug tracking system for processing. Report ID#: 61267. Thank you.

и пока я не вижу, чтобы что-то изменилось. Т.е., его поведение стало аналогичным поведению Adobe Reader'а. В соседней теме предлагали пользовать утилиту для этих целей.

У Вас какая версия?

Я использую для Ctrl+P Ваш скрипт.

Можно ли доработать скрипт так, чтобы все выделенные графические файлы отправлялись в штатную программу "Печать изображений" Windows 7?

1. Доработать — нет, нельзя, надо переделывать на обработку списков.
2. У меня нет Windows 7.

Так, например, происходит, если отправить выделенные файлы на печать через контекстное меню проводника.

Печать происходит «молча»?