1

Тема: VBScript: Печать всех *.doc из указанной папки

Добрый день.

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

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

Но вот как сделать, чтобы распечатывался не конкретный документ, а все из определенного каталога-у меня пока не получается, VBS только осваивать начал

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

2

Re: VBScript: Печать всех *.doc из указанной папки

Пример перебора всех файлов с заданным расширением в заданном каталоге:

Dim objFS, objFolder, objItem
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\temp")
For Each objItem In objFolder.Files
    If StrComp(objFS.GetExtensionName(objItem.Name), "doc", vbTextCompare) = 0 Then
        WScript.Echo objItem.Name
    End If
Next

3

Re: VBScript: Печать всех *.doc из указанной папки

Странно, что я делаю не так? Вроде список документов строится, но word ругается, что файл с указанным именем не найден, причем в скобках после этого выдает имя реального файла doc в папке!

Option Explicit

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


Dim objWord, objDoc, objFS, objFolder, objItem

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\work\temp\")
Set objWord = WScript.CreateObject("Word.Application")

For Each objItem In objFolder.Files
        If StrComp(objFS.GetExtensionName(objItem.Name), "doc", vbTextCompare) = 0 Then
            With objWord
        Set objDoc = .Documents.Open(objItem.Name, False, True, False)
             objDoc.PrintOut False                        ' .PrintOut(Background)
             Set objDoc = Nothing
                   End With

     Set objWord = Nothing

     

    End If

Next

WScript.Quit 0

4

Re: VBScript: Печать всех *.doc из указанной папки

.Documents.Open(objItem.Path

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

5

Re: VBScript: Печать всех *.doc из указанной папки

Выдает ошибку "требуется объект", при этом идет печать первого найденного документа.

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

6

Re: VBScript: Печать всех *.doc из указанной папки

При таких ошибках интерпретатор обычно выдаёт и номер строки скрипта. Найди эту строку и приведи её здесь.

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

7

Re: VBScript: Печать всех *.doc из указанной папки

Исправляюсь:

Set objDoc = .Documents.Open(objItem.Path, False, True, False)

8

Re: VBScript: Печать всех *.doc из указанной папки

"Set objWord = Nothing" попробуй вынести из тела цикла в конец скрипта.

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

9 (изменено: us-us, 2008-04-22 18:40:46)

Re: VBScript: Печать всех *.doc из указанной папки

Вот спасибо, заработало:)
Осталось только com-сервер word-а научиться прибивать, а то он при каждом запуске в процессах новый рисует и старый оставляет.
Но это уже мелочи:)

На всякий случай код, вдруг найдутся еще такие же страдальцы:

Option Explicit

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


Dim objWord, objDoc, objFS, objFolder, objItem

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\work\temp\") 'Папка, из которой производится печать
Set objWord = WScript.CreateObject("Word.Application")

    For Each objItem In objFolder.Files
        If StrComp(objFS.GetExtensionName(objItem.Name), "doc", vbTextCompare) = 0 Then
            With objWord
                Set objDoc = .Documents.Open(objItem.Path, False, True, False)
                objDoc.PrintOut False
                Set objDoc = Nothing
            End With
            
        End If
    Next
objWord.Quit
Set objWord = Nothing
WScript.Quit 0

10

Re: VBScript: Печать всех *.doc из указанной папки

us-us пишет:

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

Ну попробуй перед "Set objWord = Nothing" сделать ещё "objWord.Quit".

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

11

Re: VBScript: Печать всех *.doc из указанной папки

Добрый день.

По долгу службы приходится распечатывать множество документов и данный скрипт очень помог, спасибо.
Однако, возник вопрос: а нельзя ли добавить возможность распечатывать документы и из всех вложенных папок?

12

Re: VBScript: Печать всех *.doc из указанной папки

Доброго времени суток.

К сожалению до программирования не дорос пока, но столкнулся с одной не большой проблемой. Мне необходимо автоматически распечатывать doc и pdf файлы из указанной папки. То есть как только файл попадает в папку он должен распечататься а затем удалиться из нее. Так называемая "Очередь печати")).  Облазил сеть ничего не нашел(. Если есть возможность помогите.

P. S. В VBScript'ах не разбираюсь.  Подскажите как установить написанный выше скрипт?

Заранее благодарен, форумчанин-нуб)

13

Re: VBScript: Печать всех *.doc из указанной папки

Лучше создайте новую тему, мало кто пойдет в эту, чтобы прочитать новое сообщение.

14 (изменено: Lucky, 2010-04-22 14:32:07)

Re: VBScript: Печать всех *.doc из указанной папки

mola пишет:

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

Добрый вечер. Можно.

Option Explicit

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

Dim objWord, objDoc, objFS, objPath, objFolder, objSubFolder, objItem

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objWord = WScript.CreateObject("Word.Application")
Set objPath = objFS.GetFolder("c:\work\temp\") 'Папка, из которой производится печать

printInSubFolders objPath
Sub printInSubFolders(objFolder)
    For Each objItem In objFolder.Files
        If StrComp(objFS.GetExtensionName(objItem.Name), "doc", vbTextCompare) = 0 Then
            With objWord
                Set objDoc = .Documents.Open(objItem.Path, False, True, False)
                objDoc.PrintOut False
                Set objDoc = Nothing
            End With
        End If
    Next
    For Each objSubFolder In objFolder.SubFolders
        printInSubFolders(objSubFolder)
    Next
End Sub

objWord.Quit
Set objWord = Nothing
WScript.Quit 0
Стремление - залог успеха

15 (изменено: yuriy2000, 2010-04-14 21:11:30)

Re: VBScript: Печать всех *.doc из указанной папки

lemuriec пишет:

Доброго времени суток.

К сожалению до программирования не дорос пока, но столкнулся с одной не большой проблемой. Мне необходимо автоматически распечатывать doc и pdf файлы из указанной папки. То есть как только файл попадает в папку он должен распечататься а затем удалиться из нее. Так называемая "Очередь печати")).  Облазил сеть ничего не нашел(. Если есть возможность помогите.

P. S. В VBScript'ах не разбираюсь.  Подскажите как установить написанный выше скрипт?

Заранее благодарен, форумчанин-нуб)

Вот простой способ распечатать все файлы из каталога C:\Logs

Option Explicit
Const PrintFolder = "C:\Logs\" 


DIM objShell : Set objShell = CreateObject("Shell.Application")
DIM objFolder : Set objFolder = objShell.Namespace(PrintFolder) 
Dim objItem
For Each objItem in objFolder.Items
    'WScript.Echo "Printing..." & objItem.Path
    objItem.InvokeVerbEx("Print")
Next

С удалением сложней из-за того что нужно дождаться пока файл будет напечатан внешним приложением.

почитайте здесь:
http://forum.script-coding.com/viewtopic.php?id=3059

16

Re: VBScript: Печать всех *.doc из указанной папки

yuriy2000 пишет:

Вот простой способ распечатать все файлы из каталога C:\Logs
...(код)

Ага действительно простой, а еще странноватый: Открывет приложения всех зарегистрированных типов файлов, находящихся в указанной папке, а на печать идут только документы Word... Может глюки на моем компе?

Стремление - залог успеха

17

Re: VBScript: Печать всех *.doc из указанной папки

Lucky пишет:

Ага действительно простой, а еще странноватый: Открывет приложения всех зарегистрированных типов файлов, находящихся в указанной папке, а на печать идут только документы Word... Может глюки на моем компе?


Скажем так: если файл не распечатывается через меню  "печать"  всплывающего меню проводника в "ручном" режиме, то скрипт не поможет.
В ссылке которую я приводил уже писали в частности, что для печати PDF нужно использывать алтернативные решения.

18 (изменено: mola, 2010-04-22 13:17:46)

Re: VBScript: Печать всех *.doc из указанной папки

Lucky

Попробовал Ваш скрипт.
Доходит до момента распечатки документов из вложенных папок и выскакивает сообщение об ошибке:
строка 25
символ 9
не определена переменная "printInFolder".
код 800A01F4

Как с этим бороться?

19 (изменено: Lucky, 2010-04-22 14:35:14)

Re: VBScript: Печать всех *.doc из указанной папки

Прошу прощения, mola, я просто сделал ошибку в команде: там на 25й строке вместо printInFolders(objSubFolder) нужно писать printInSubFolders(objSubFolder). Теперь всё, исправил.

Стремление - залог успеха

20

Re: VBScript: Печать всех *.doc из указанной папки

Lucky пишет:

Прошу прощения, mola, я просто сделал ошибку в команде: там на 25й строке вместо printInFolders(objSubFolder) нужно писать printInSubFolders(objSubFolder). Теперь всё, исправил.

Спасибо Вам огромное! Замечательно печатает.
А возможно ли добавить исключение для временных файлов, что бы они не выводились на печать?

21 (изменено: Lucky, 2010-04-22 19:17:57)

Re: VBScript: Печать всех *.doc из указанной папки

mola пишет:

А возможно ли добавить исключение для временных файлов, что бы они не выводились на печать?

Вы имеете ввиду временные файлы, появляющиеся при редактировании документа WINWORDa типа ~$DocName.doc (скрытые файлы)?

Стремление - залог успеха

22

Re: VBScript: Печать всех *.doc из указанной папки

Lucky пишет:

Вы имеете ввиду временные файлы, появляющиеся при редактировании документа WINWORDa типа ~$DocName.doc (скрытые файлы)?

Да, именно их.

23

Re: VBScript: Печать всех *.doc из указанной папки

достаточно закрывать файлы

Я конечно далек от мысли... (с)

24

Re: VBScript: Печать всех *.doc из указанной папки

smaharbA пишет:

достаточно закрывать файлы

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

25

Re: VBScript: Печать всех *.doc из указанной папки

mola пишет:

…отчего-то некоторые остаются даже после закрытия.

При некорректном завершении приложения. Либо при разрыве соединения.

Ну, вставьте проверку, что соответствующий файл «*.doc» не является скрытым и не начинается с символов «~$».

26

Re: VBScript: Печать всех *.doc из указанной папки

Подскажите, пожалуйста, как доработать скрипт из поста #14, что бы он печатал из каждого документа лишь какие то определенные номера страниц например "1,2,2,5,7"?

27

Re: VBScript: Печать всех *.doc из указанной папки

Vilka, а как определить, какие именно страницы надо?

28

Re: VBScript: Печать всех *.doc из указанной папки

В общем же и целом надо указать в методе «.PrintOut» требуемый диапазон:

…
Const wdPrintRangeOfPages    = 4
…
objDoc.PrintOut False, , wdPrintRangeOfPages, , , , , , "1,3-5,7"
…