Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Скрипт для печати документов Word
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Mint86



Joined: 15 Aug 2007
Posts: 43

Post (Separately) Posted: Mon Dec 15, 2008 08:19    Post subject: Скрипт для печати документов Word Reply with quote

По данной ссылке http://forum.script-coding.info/viewtopic.php?id=1384 нашел скрипт который перебирает документы в определенной папке и распечатывает Word документы. А как можно изменить данный скрипт для того чтобы он распечатывал файл под курсором в Тотале чтобы не выводились лишние диалоги?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Dec 15, 2008 11:26    Post subject: Reply with quote

Убери строки:
Code:
Set objFolder = objFS.GetFolder("c:\work\temp\") 'Папка, из которой производится печать
Code:
Next

Строку
Code:
For Each objItem In objFolder.Files
замени на
Code:
Set objItem = objFS.GetFile(WScript.Arguments(0))

В параметрах вызова скрипта из TC укажи %P%N.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Mint86



Joined: 15 Aug 2007
Posts: 43

Post (Separately) Posted: Tue Dec 16, 2008 06:24    Post subject: Reply with quote

Batya
Спасибо, получилось. Терь попробую изменить скрипт чтобы не только Word документы печатались. Еще раз спасибо!
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Dec 16, 2008 10:48    Post subject: Reply with quote

Mint86 wrote:
Терь попробую изменить скрипт чтобы не только Word документы печатались.

С использованием объекта "Word.Application" можно печатать только документы, которые можно открыть в Word-е.
Таким же образом можно печатать документы, используя объект "Excel.Application".
С другими документами сложнее. Что-то можно печатать не с помощью COM-объектов, а вызовом соответствующего приложения с параметрами печати из командной строки.
Какие документы нужно печатать?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Mint86



Joined: 15 Aug 2007
Posts: 43

Post (Separately) Posted: Tue Dec 16, 2008 12:47    Post subject: Reply with quote

Batya wrote:
Какие документы нужно печатать?


В принципе хватит doc, xls, и txt документы печатать...
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Dec 16, 2008 14:00    Post subject: Reply with quote

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
View user's profile Send private message
Mint86



Joined: 15 Aug 2007
Posts: 43

Post (Separately) Posted: Tue Dec 16, 2008 14:31    Post subject: Reply with quote

Batya wrote:
Только бывают проблемы при печати на принтер НЕ по умолчанию - Word глючит.

Значит будем пользоваться только принтером по умолчанию.
А Excel буду обычным способом печатать.
Спасибо за скрипт Smile
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Dec 16, 2008 14:43    Post subject: Reply with quote

Mint86 wrote:
Значит будем пользоваться только принтером по умолчанию.

Ну зачем же так категорично? Я же про проблемы сказал - "бывают". Может у тебя их и не будет.
Mint86 wrote:
А Excel буду обычным способом печатать.

Если нужно, я мог бы написать скрипт для печати xls-файлов. Только печать таблиц очень часто требует правильного выставления полей и/или масштаба печати. Печать из командной строки не всегда может дать ожидаемый результат.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Mint86



Joined: 15 Aug 2007
Posts: 43

Post (Separately) Posted: Wed Dec 17, 2008 11:08    Post subject: Reply with quote

Quote:
Если нужно, я мог бы написать скрипт для печати xls-файлов. Только печать таблиц очень часто требует правильного выставления полей и/или масштаба печати. Печать из командной строки не всегда может дать ожидаемый результат.

Конечно нужно, сам я не справлюсь так как в скриптинге пока практически мало что смыслю. В основном (или почти всегда) печатать с помощью скрипта буду те файлы Excel в которых поля должным образом уже настроены и надо просто распечатать допустим лист 1 или всю книгу. Был бы признателен если бы ты такой скрипт написал.
Back to top
View user's profile Send private message
Seryoga204



Joined: 06 Jan 2009
Posts: 2

Post (Separately) Posted: Tue Jan 06, 2009 22:11    Post subject: Reply with quote

Помогите пожалуйста. Данный скрипт работает только для конкретной папки с файлами конкретного расширения. А как сделать чтобы печатались файлы со всеми расширениями (файлы с текстовой структурой, но имеют числовое расширение, состоящее из трех цифр:0000,0001,0002 и т.д.). Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д. Так надо что бы тотал пускал на печать все файлы находящиеся во всех папках 000,001,002 и т.д. но за определенную дату: например за 04012009-(имя папки с файлами).
Вот структура папок /подкаталоги-номер отделения

подкаталоги дата

В папках дата файлы для печати по одному отделению

по другому отделению

и т. д по все отделениям за определенную дату.
Помогите пожалуйста, заранее благодарен.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Jan 07, 2009 23:59    Post subject: Reply with quote

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
View user's profile Send private message
Seryoga204



Joined: 06 Jan 2009
Posts: 2

Post (Separately) Posted: Thu Jan 08, 2009 11:13    Post subject: Reply with quote

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
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 102
Location: г. Абакан

Post (Separately) Posted: Sat Oct 10, 2009 12:51    Post subject: Reply with quote

Для всех.
Ещё один работающий вариант vbs-скрипта для "тихой" печати файлов doc(x), xls(x), rtf, txt из totalcmd приведён здесь: http://forum.script-coding.info/viewtopic.php?id=1272&p=2 Smile
Back to top
View user's profile Send private message
Igor_A.



Joined: 23 Mar 2006
Posts: 83

Post (Separately) Posted: Thu Apr 15, 2010 16:24    Post subject: Reply with quote

А как быть, если надо осуществлять групповую печать jpeg?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Thu Apr 15, 2010 18:03    Post subject: Reply with quote

Igor_A. wrote:
А как быть, если надо осуществлять групповую печать jpeg?

Нужно использовать сторонние утилиты.
Например, из справки IrfanView:
Quote:
i_view32.exe c:\*.jpg /print
Print all JPGs from "C:\" and close IrfanView.

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
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