View previous topic :: View next topic |
Author |
Message |
Mint86
Joined: 15 Aug 2007 Posts: 43
|
(Separately) Posted: Mon Dec 15, 2008 08:19 Post subject: Скрипт для печати документов Word |
|
|
По данной ссылке http://forum.script-coding.info/viewtopic.php?id=1384 нашел скрипт который перебирает документы в определенной папке и распечатывает Word документы. А как можно изменить данный скрипт для того чтобы он распечатывал файл под курсором в Тотале чтобы не выводились лишние диалоги? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Dec 15, 2008 11:26 Post subject: |
|
|
Убери строки: Code: | Set objFolder = objFS.GetFolder("c:\work\temp\") 'Папка, из которой производится печать |
Строку Code: | For Each objItem In objFolder.Files | замени на Code: | Set objItem = objFS.GetFile(WScript.Arguments(0)) |
В параметрах вызова скрипта из TC укажи %P%N. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Mint86
Joined: 15 Aug 2007 Posts: 43
|
(Separately) Posted: Tue Dec 16, 2008 06:24 Post subject: |
|
|
Batya
Спасибо, получилось. Терь попробую изменить скрипт чтобы не только Word документы печатались. Еще раз спасибо! |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 10:48 Post subject: |
|
|
Mint86 wrote: | Терь попробую изменить скрипт чтобы не только Word документы печатались. |
С использованием объекта "Word.Application" можно печатать только документы, которые можно открыть в Word-е.
Таким же образом можно печатать документы, используя объект "Excel.Application".
С другими документами сложнее. Что-то можно печатать не с помощью COM-объектов, а вызовом соответствующего приложения с параметрами печати из командной строки.
Какие документы нужно печатать? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Mint86
Joined: 15 Aug 2007 Posts: 43
|
(Separately) Posted: Tue Dec 16, 2008 12:47 Post subject: |
|
|
Batya wrote: | Какие документы нужно печатать? |
В принципе хватит doc, xls, и txt документы печатать... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 14:00 Post subject: |
|
|
xls как-то не вставало задачи печатать из командной строки, а doc и txt печатаю собственным скриптом:
Code: | '==========================================================================
'Печать документа с помощью MS Word
'Параметры:
'{Файл} [{Принтер}|"" [{Кодовая страница}|"" [{Количество копий}]]]
'Пример параметров:
'C:\Temp\Test.txt \\Host\HostPrinter 1251
'Для использования значений по умолчанию принтера или кодовой страницы
' можно указать двойные кавычки ("")
'Пример параметров:
'C:\Temp\Text_default.txt
'C:\Temp\Text_dos.txt "" 866
'C:\Temp\Text_3_copies.txt "" "" 3
'==========================================================================
Option Explicit
'================= Изменяемые параметры ===================================
Const TimeLimit = 30 'Время ожидания окончания печати в сек.
Const Margin = 1.5 'Поля в см
Const Admin = "admin" 'Имя компьютера сис. админ-а
Const ShowMess = False 'Показывать ли текст ошибки на текущем компе
'==========================================================================
Dim objW, Mess, MarginPt, File, Ext, StartTime, CodeStr, Copies
'Дюймы, выраженные в см., для вычисления полей
Const Inch = 2.538
'Задаем массив сообщений
DefineMess
'Включаем режим ручной обработки ошибок
On Error Resume Next
'Создаем объект Word
Set objW = WScript.CreateObject("Word.Application")
CheckErr(0)
'Первый параметр - открываемый файл
File = WScript.Arguments(0)
CheckErr(1)
'Открываем файл в кодировке, заданной третим параметром
If WScript.Arguments.Count > 2 Then
CodeStr = WScript.Arguments(2)
If Len(CodeStr) <> 0 Then
objW.Documents.Open File,,1,,,,,,,,CodeStr
Else
objW.Documents.Open File,,1
End If
Else
objW.Documents.Open File,,1
End If
CheckErr(1)
'Вычисляем поля (задаются в пунктах - 1/72 дюйма)
MarginPt = Margin/Inch * 72
'Задаем поля для всех файлов, кроме *.doc и *.rtf
Ext = LCase(CreateObject("Scripting.FileSystemObject").GetExtensionName(File))
If Not ((Ext = "doc") Or (Ext = "rtf")) Then
With objW.ActiveDocument.PageSetup
.LeftMargin = MarginPt
.RightMargin = MarginPt
.TopMargin = MarginPt
.BottomMargin = MarginPt
End With
CheckErr(2)
End If
'Если задан второй параметр, то это принтер
If WScript.Arguments.Count > 1 Then
'Устанавливаем принтер, если параметр не пустой
If Len(WScript.Arguments(1)) > 0 Then
'Устанавливаем текущий принтер - второй параметр
objW.ActivePrinter = WScript.Arguments(1)
'Небольшая пауза
WScript.Sleep 100
CheckErr(3)
End If
End If
'Количество копий
If WScript.Arguments.Count > 3 Then
Copies = WScript.Arguments(3)
Else
Copies = 1
End If
'Печатаем в фоне
objW.PrintOut 1,,,,,,,Copies
CheckErr(4)
'Включаем таймер ожидания окончания печати
StartTime = Timer
'Ждем, пока закончится печать
Do Until objW.BackgroundPrintingStatus = 0
'Если ожидаем уже больше заданного лимита
If (Timer - StartTime) > TimeLimit Then
'Генерим ошибку
Err.Raise vbObjectError + 1, Mess("Title"), Mess("Err1")
CheckErr(5)
End If
'Пауза 0.1 сек.
WScript.Sleep 100
Loop
'Закрываем Word
objW.Quit 0
CheckErr(6)
'Отключаем режим ручной обработки ошибок
On Error Goto 0
'Выход
Quit
'Процедура задания массива сообщений
Sub DefineMess
Set Mess = CreateObject("Scripting.Dictionary")
With Mess
.Add "Title", "Печать документа"
.Add "Err1" , "Время ожидания окончания печати превысило заданный лимит. Печать прервана!"
.Add 0 , "При создании объекта Word возникла ошибка:"
.Add 1 , "Ошибка открытия файла:"
.Add 2 , "Ошибка задания полей:"
.Add 3 , "При установке активного принтера возникла ошибка:"
.Add 4 , "При выполнении печати документа возникла ошибка:"
.Add 5 , "Ошибка выполнения печати."
.Add 6 , "Ошибка закрытия документа. Закройте документ вручную."
End With
End Sub
'Процедура проверки ошибок
Sub CheckErr(Step)
'Если произошла ошибка
If Err.Number <> 0 Then
'Посылаем сообщение на компьютер Admin
CreateObject("WScript.Shell").Run "net send " & Admin & " " &_
Mess(Step) & vbNewLine & vbNewLine & Err.Description, 7, False
'Выводим сообщение на текущем компьютере
If ShowMess Then
MsgBox Mess(Step) & vbNewLine & vbNewLine & Err.Description, _
vbOKOnly + vbCritical, Mess("Title")
End If
'Закрываем Word, если открыт
If (Step > 0) And IsObject(objW) Then
objW.Quit 0
End If
Quit
End If
End Sub
Sub Quit
Set Mess = Nothing
Set objW = Nothing
WScript.Quit
End Sub |
Только бывают проблемы при печати на принтер НЕ по умолчанию - Word глючит. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Mint86
Joined: 15 Aug 2007 Posts: 43
|
(Separately) Posted: Tue Dec 16, 2008 14:31 Post subject: |
|
|
Batya wrote: | Только бывают проблемы при печати на принтер НЕ по умолчанию - Word глючит. |
Значит будем пользоваться только принтером по умолчанию.
А Excel буду обычным способом печатать.
Спасибо за скрипт |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 14:43 Post subject: |
|
|
Mint86 wrote: | Значит будем пользоваться только принтером по умолчанию. |
Ну зачем же так категорично? Я же про проблемы сказал - "бывают". Может у тебя их и не будет.
Mint86 wrote: | А Excel буду обычным способом печатать. |
Если нужно, я мог бы написать скрипт для печати xls-файлов. Только печать таблиц очень часто требует правильного выставления полей и/или масштаба печати. Печать из командной строки не всегда может дать ожидаемый результат. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Mint86
Joined: 15 Aug 2007 Posts: 43
|
(Separately) Posted: Wed Dec 17, 2008 11:08 Post subject: |
|
|
Quote: | Если нужно, я мог бы написать скрипт для печати xls-файлов. Только печать таблиц очень часто требует правильного выставления полей и/или масштаба печати. Печать из командной строки не всегда может дать ожидаемый результат. |
Конечно нужно, сам я не справлюсь так как в скриптинге пока практически мало что смыслю. В основном (или почти всегда) печатать с помощью скрипта буду те файлы Excel в которых поля должным образом уже настроены и надо просто распечатать допустим лист 1 или всю книгу. Был бы признателен если бы ты такой скрипт написал. |
|
Back to top |
|
|
Seryoga204
Joined: 06 Jan 2009 Posts: 2
|
(Separately) Posted: Tue Jan 06, 2009 22:11 Post subject: |
|
|
Помогите пожалуйста. Данный скрипт работает только для конкретной папки с файлами конкретного расширения. А как сделать чтобы печатались файлы со всеми расширениями (файлы с текстовой структурой, но имеют числовое расширение, состоящее из трех цифр:0000,0001,0002 и т.д.). Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д. Так надо что бы тотал пускал на печать все файлы находящиеся во всех папках 000,001,002 и т.д. но за определенную дату: например за 04012009-(имя папки с файлами).
Вот структура папок /подкаталоги-номер отделения
подкаталоги дата
В папках дата файлы для печати по одному отделению
по другому отделению
и т. д по все отделениям за определенную дату.
Помогите пожалуйста, заранее благодарен. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jan 07, 2009 23:59 Post subject: |
|
|
Seryoga204
Вначале совет - папки по датам лучше именовать в виде YYYYMMDD, а не DDMMYYYY, как у тебя. Т.е. не "04012009", а "20090104". Так не будут перемешиваться папки для разных месяцев.
Теперь по твоему вопросу.
Задача решается в два этапа.
Сначала необходимо поиском найти необходимые для печати файлы. Для поиска используем плагин FileX. При поиске на первой закладке "Общие параметры" указываешь маску имен файлов для печати, например, "*.0000". На третей закладке "Плагины" ставишь галочку "Поиск с плагинами", выбираешь плагин "filex", свойство "В папке" ("ParentDir"), операция "=", значение "04012009" (или за другую дату). Нажимаешь "Начать поиск". После окончания поиска нажимаешь "Файлы на панель".
Второй этап - выделить файлы и нажать кнопку:
Code: | TOTALCMD#BAR#DATA
%Commander_Path%\Utils\WHS\MultiRun.vbs 0 %Commander_Path%\Utils\WHS\Print.vbs
<<%L>>
%Commander_Path%\WCMICONS.DLL,38
Печать выделенных документов
-1
|
Здесь исправь под собственные пути и имена для MultiRun.vbs и Print.vbs. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Seryoga204
Joined: 06 Jan 2009 Posts: 2
|
(Separately) Posted: Thu Jan 08, 2009 11:13 Post subject: |
|
|
Batya
Спасибо за ответ. Но можно сделать єто все в однов скрипте, а то пользоваться им будет человек, "мягко" сказать не продвинутій пользователь ПК, ему так бы чтобы одну кнопку нажать и все.
Вот еще раз более подробнее о моей проблеме:
В папке OTDEL находится 43 папки с номером отделения, т.е. (0001,0002,0003 и. д 43т. В каждой из этих папок находятся папки с названием даты отчета (например в папке 0001 есть папки - 01012009,02012009,03012009, ит.д , т.е название папки это дата создание отчета) и уже в этих папках находятся файлы с расширением номера отеления ( например ****,0001,0002 и .тд) В определенный момент требуется распечатать все отчеты по всем отелениям за определеное число, а имено например за 02,01,2009 - это все файлы по адресам:
D:\OTDEL\0001\02012009\*****.0001
D:\OTDEL\0002\02012009\*****.0002
D:\OTDEL\0003\02012009\*****.0003
D:\OTDEL\0004\02012009\*****.0004
....
D:\OTDEL\0016\02012009\*****.0039
D:\OTDEL\0017\02012009\*****.0040
D:\OTDEL\0018\02012009\*****.0041
D:\OTDEL\0019\02012009\*****.0042
D:\OTDEL\0020\02012009\*****.0043
Если как в скрипте отдельно указать путь к отдной из папок D:\OTDEL\0001\02012009\*****.0001
и срасширение 0001, файлы с этой папки печатаются нормально.Но как сделать чтобы печатались сразу все файлы с папок 02012009, т.е. отчеты за оределенную дату. |
|
Back to top |
|
|
KarS
Joined: 21 Apr 2006 Posts: 102 Location: г. Абакан
|
|
Back to top |
|
|
Igor_A.
Joined: 23 Mar 2006 Posts: 83
|
(Separately) Posted: Thu Apr 15, 2010 16:24 Post subject: |
|
|
А как быть, если надо осуществлять групповую печать jpeg? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Thu Apr 15, 2010 18:03 Post subject: |
|
|
Igor_A. wrote: | А как быть, если надо осуществлять групповую печать jpeg? |
Нужно использовать сторонние утилиты.
Например, из справки IrfanView:
Quote: | i_view32.exe c:\*.jpg /print
Print all JPGs from "C:\" and close IrfanView. |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|