Тема: VBS: Возможно ли на vbs послать на печать документ Word?
Хотелось бы узнать возможно ли непосредственно из тела vbs послать на печать документ Word? Причем с сохранением форматирования текста?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → Windows Script Host, HTA (VBScript, JScript) → VBS: Возможно ли на vbs послать на печать документ Word?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Хотелось бы узнать возможно ли непосредственно из тела vbs послать на печать документ Word? Причем с сохранением форматирования текста?
Word установлен на машине?
да, а если не установлен возможно ли с блокнота?
Думаю распечатать документ Word "с блокнота с сохранением форматирования" можно вряд ли. Можно поискать параметры командной строки winword.exe для печати. Или попытаться выполнить скриптом команду "Print" контекстного меню файла.
Я не про то))Если установлен Word, то печатеть с него, а если ворда нету, то возможно ли печать с блокнота (с txt файла)
и желательно бы код скрипта
Думаю, в такой ситуации можно попробовать программно выполнить "глагол" реестра, т.е. пункт контекстного меню для файла, описание и пример здесь. Команда может быть как "Print", так и "Печать".
Спасибо про подсказку
про глагол я как-то забыл (
Получившийся код(C txt работает, на вордовских пока что не проверял):
set o = CreateObject("Shell.Application")
o.ShellExecute "Путь","","", "print",0
Получившийся код(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, но у него есть глюки при открытии картинки не грузятся, да и текст визуально и на печати не выравнивается по ширине.
…а если не установлен возможно ли с блокнота?
Нет. Однако есть такое средство, как WordView.
Alexbootch
Спасибо, пример в Коллекции.
Если сможешь добавить ещё пример для Excel, будет вообще прекрасно
.
К сожалению, вынужден сделать некоторые поправки ко второму скрипту.
В операторе
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 0alexii
Спасибо! Добавил в Коллекцию.
добавить ещё пример для 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 0P.S. Во время работы обоих скриптов теоретически возможно появление и других непредусмотренных диалогов (мне сейчас сложно всё заранее предусмотреть). Возможно, в этом случае стоит поиграться со свойством Application.DisplayAlerts.
alexii
Спасибо! Добавил в Коллекцию и этот пример, на MS Excel 2003 работает, конечно, тоже.
насколько я понял, печатаются документы на принтер, установленный по умолчанию.
А как направить печать документов на определенный сетевой принтер?
Сначала нужно его подключить, а затем натравить на него свойство:
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 " & ActivePrinterThis 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:"
Подскажите, пожайлуйста, как этот скрипт использовать в totalcmd для печати документов.
Если задать команду в меню Start totalсmd, то как скрипт получит путь необходимого файла?
Как видно в описанных здесь решениях путь задан жёстко.
Karam, какой именно скрипт? В теме их несколько.
P.S. А что, в TC правую кнопку мышки или клавишу Menu отменили?
То, что есть мышка я помню, но мне хотелось бы по комбинации клавиш отправлять задания на печать (чаще файлы *.doc) в фоновом режиме.
В то же время, даже когда используешь команду print через контекстное меню, на экране появляется окно Worda, мелькает (как будто я не знаю, что дал команду на печать), и вот приходится смотреть на все эти выкрутасы.
Хотелось бы просто: нажал - дефолтный принтер заработал - а пользователь не отвлекается от других документов и не ловит мышку по столу.
Ну, если уж так сильно хочется, то можете попробовать так.
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 02. Читаете Писание Настройка контекстного меню Проводника с помощью реестра 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 — я не искал, тут Вам и карты в руки.
alexii Спасибо за разъяснение и подготовку скрипта и файла реестра!
Пришлось повозиться с настройкой клавиш в totalcmd.
Нашёл некоторую информацию на форуме wincmd.ru, кое-что мне подсказала сама программа totalcmd.
В итоге необходимо в параметрах запуска скрипта, созданного alexii, добавить %p%n и будет счастье!
, но только для одного файла.
В смысле печататься будет один файл, а вот если выделить два файла, то печататься будет тот, на котором находится курсор totalcmd.
Для полного счастья пока не знаю, что сделать. То ли это total так себя ведёт, то ли скрипт? ![]()
В итоге необходимо в параметрах запуска скрипта, созданного alexii, добавить %p%n и будет счастье! smile, но только для одного файла.
В смысле печататься будет один файл, а вот если выделить два файла, то печататься будет тот, на котором находится курсор totalcmd.
Что есть «%p%n»?
Как Вам удалось печатать только один файл? У меня сколько выделено, столько и печатает (по описанной мной технологии) — на каждый файл запускается свой экземпляр скрипта.
Давайте по буквам рассказывайте, как Вы настраивали у себя, будем глядеть.
В "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. Видимо, эти параметры означают передачу пути файла, находящегося под курсором, а не тех, что выделены.
Вообще-то я писал совсем-совсем про другое. Вам, в случае использования меню TC, reg-файл не понадобится, работать нужно будет с файл-списком «%L», соответственно, скрипт понадобится переделать. Ждите ночью.
Да, и как Вы там Ctrl-P горячей клавишей назначили? Какая у Вас версия?
P.S. На будущее — лучше-таки не «%p%n», а «%P%N». Подробности — в справке.
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 — удалите из реестра добавленные им параметры, для текущего метода печати они не нужны.
alexii
Последний вариант скрипта не срабатывает, вообще (у меня WinXP sp3).
Я и через контекстное меню, через пункт "Тихая печать", пробовал - ничего не происходит.
В отношении настройки totalcmd.
Если для предпоследнего варианта скрипта (который работает) в «Parameters:» указать «%L», то на печать уходит документ, в котором указывается одна строка - путь и название печатаемого файла. А непосредственно содержание файла не распечатывается.
В отношении рег-файла, я тоже догадался, что для работы скрипта он не нужен. Но пока идёт тестирование, запись в реестре оставлю, потом удалю.
Karam, я ведь сказал: забудьте про предыдущий вариант полностью и окончательно, удалите из реестра добавленные параметры и забудьте о таком пункте, как «Тихая печать» — Вы ведь сказали, что контекстное меню Вам не подходит, печатать Вы планируете из стартового меню TC (кстати, а ему можно назначить горячую клавишу? Или она есть, а я не знаю?)
Кстати, что случилось с ответами на мои вопросы:
Да, и как Вы там Ctrl-P горячей клавишей назначили? Какая у Вас версия?
Я их почему-то не вижу
. Если Вы планируете получить результат, желательно отвечать на задаваемые вопросы.
Теперь по Вашему посту:
Последний вариант скрипта не срабатывает, вообще
У меня всё работает. Обычно я стараюсь проверять и после того, как выкладываю код на форум — копирую текст скрипта из браузера и проверяю ещё раз.
(у меня WinXP sp3).
У меня тоже Windows XP SP3, MS Office 2003 SP3, версия TC, применявшаяся для проверки (я им не пользуюсь), — 6.55.
Если для предпоследнего варианта скрипта (который работает) в «Parameters:» указать «%L»,…
…то он распечатает имена выделенных файлов. Первый скрипт на это и не рассчитан. Он принимает в качестве параметра имя файла для печати. В случае указания параметра «%L» ему будет передан текстовый файл, содержащий имена выделенных на панели TC файлов, которые он добросовестно и распечатает, поскольку никакой проверки, что имя переданного файла есть документ Microsoft Word, не делается (и не предполагалось делать, поскольку первый скрипт был предназначен для запуска исключительно из контекстного меню файлов типа «Word.Document»).
Вы нашли и прочли в справке TC, что есть параметр «%L» и для чего он нужен?
Если Вы готовы, мы можем пройтись по пунктам, как и что делать.
У меня заработало!!!:)
Причина была в том, imho, что я Вашу новую версию скрипта скопировал, а в старт-меню total не поменял ключи с %p%n на %L.
Большое спасибо за Ваш труд и внимание, что помогли разобраться.
В отношении назначения клавиш - у меня total v.7.04. Там в главном окне опций программы в разделе Misk. есть возможность выбрать необходимое сочетание клавиш.
В старт-меню все пункты, которые создаёт пользователь номеруются сверху вниз: 1,2,3...
Поэтому, если мы для выбранной комбинации клавиш хотим назначить команду, указанную восьмой по счёту в старт-меню, то мы для неё выбираем команду cm_UserMenu8.
При этом команд в старт-меню может быть и 15-20-30. Чтобы они стали видны, необходимо в файле c:\Program Files\totalcmd\TOTALCMD.INC найти секцию user и дописать, например, cm_UserMenu15=715.
В более ранних версиях total это тоже работает, даже несмотря на то, что в главном окне опций нету окна настройки.
Про параметр %L в справке прочитал - поддержка длинных имён.
Ещё раз спасибо за внимание и за скрипт!
Наверняка он пригодится ещё кому-нибудь.
У меня уже глубокая ночь, тестировать нет времени, поэтому после более проверки скрипта напишу позднее.
Причина была в том, imho, что я Вашу новую версию скрипта скопировал, а в старт-меню total не поменял ключи с %p%n на %L.
Бывает.
В отношении назначения клавиш - у меня total v.7.04. Там в главном окне опций программы в разделе Misk. есть возможность выбрать необходимое сочетание клавиш.
…
В более ранних версиях total это тоже работает, даже несмотря на то, что в главном окне опций нету окна настройки.
В той, что я использовал для отладки (6.55), — есть. Однако, поскольку, как я и писал выше, его не пользую, то и не знал где «копать». Поиск в справке к нужному результату меня не привёл.
Кстати вышла новая версия total - 7.50. Сделано ряд существенных улучшений по использованию, например навигация по пути, прописанному над файловой панелью как в проводнике у Vista; быстрый поиск по файловой панели с фильтром ...
Скрипт работает на ура!!!
Чего ещё не хватает, и является желательным, так это поддержки нового офисного расширения - *.docx, а также распространённого *.rtf.
Поэтому, если есть возможность, прошу добавить.
Karam, у меня отсутствует Office 2007 как таковой, «*.docx» проверять и отлаживать не на чем. Но Вы можете попробовать просто исправить имеющийся скрипт, добавив обработку расширения «docx», может быть и заработает (*.rtf добавляется так же, но это я проверить могу).
Замените:
Case "DOC"на:
Case "DOC", "DOCX", "RTF"и:
Case "XLS"на:
Case "XLS", "XLSX"alexii
Расчёт точен!
Мастер знает, что делать ![]()
Спасибо! Всё работает - и doc, и docx, и rtf, и xlsx.
Просто и удобно. Я в основном пользуюсь doc, docx и rtf. В этой части скрипт работает идеально.
Imho, скрипт достоен размещения в коллекции. Также его можно предложить на форуме wincmd.ru. Поскольку Вы автор, Вам решать.
Ещё раз спасибо за помощь!
Karam, на главной странице сайта есть:
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.
Это максимум, что требуется, если Вы захотите его где-то разместить; я-то точно не буду этим заниматься — на мой взгляд скрипт тривиален, узкоспецифичен и малоценен.
В созданном пункте меню TC меняете «Command:» на:
wscript.exe "<путь>\PrintSilent.vbs"В «Parameters:» указываете «%L».
P.S. Если Вы ранее импортировали reg-файл из #21 — удалите из реестра добавленные им параметры, для текущего метода печати они не нужны.
Спасибо за скрипт! Адаптировал его для печати pdf, аналогично txt файлам. Но есть вопрос: возможно ли, чтобы после печати в имя файла добавлялось произвольное слово или буква? Т.е. если был файл допустим 2011_02_14_01.pdf, то после печати он переименовывался в 2011_02_14_01printed.pdf ?
Заранее благодарю.
Если речь про этот скрипт, то добавьте строку «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
…Если речь про этот скрипт, то добавьте строку «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
'=============================================================================segreich, я попробую посмотреть вечером на реальном примере.
Попробуйте пока ещё так: перенести строку
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» для ожидания завершения печати.
С вордом все отлично как с ожиданием печати, так и без. А вот Acrobat зараза не закрывает себя после печати и пока его вручную не закроешь, то печать не продолжается (это в случае True, ожидания печати). В случае False Acrobat выдает ошибку об отсутствии файла. Файлы переименовываются все нормально.
Пока нашел альтенативный промотрщик pdf, который работает с коммандной строкой и закрывает себя после печати: Manual for Sumatra PDF reader.
Но по скорости он медленнее.
Если будет желание/возможность доработать Acrobat, то было бы здорово. Если нет, то альтернативный вариант пока вполне сгодится.
В любом случае спасибо за помощь!
segreich, ссылки на форуме оформляются тэгом «code». Я поправил Ваш пост.
segreich, к сожалению, из того, что я пробовал с Reader'ом (а также из того, о чём периодически шла речь у нас на форуме про печать pdf) — я сделал вывод, что по сю пору Adobe, мягко говоря, клал на подобные потребности пользователей, и следует, как Вы и сделали, использовать для печати стороннее средство. Кроме приведённой ссылки Sumatra PDF также упоминался и Foxit Reader. Сам я не пользовался ни тем, ни другим.
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?
Так, например, происходит, если отправить выделенные файлы на печать через контекстное меню проводника.
Давно пользуюсь 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.
Так, например, происходит, если отправить выделенные файлы на печать через контекстное меню проводника.
Печать происходит «молча»?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться