roboforum.ru

Технический форум по робототехнике.

печать файла по расписанию

печать файла по расписанию

Myp » 14 янв 2013, 14:54

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

Re: печать файла по расписанию

galex1981 » 14 янв 2013, 15:10

Довольно мощный планировщик для Windows nncron но я не знаю, можно ли с помощью него печатать документы

Re: печать файла по расписанию

Angel71 » 14 янв 2013, 15:50

100500, что такое сделать можно, а как именно нужно будет поискать.

Добавлено спустя 31 минуту 25 секунд:
вариантов пока не много. запускать в планировщике задач excel`овский файл, в котором есть макрос печати нужного документа или написать простенькую программку-хелпер, которая при запуске будет экселю отправлять команнды "открой такой-то файл" и "напечатай".
здесь http://support.microsoft.com/kb/262827/ru можно скачать пример скриптика для печати (OWCHelpr.exe это самораспаковывающийся архив файлов примера)

Re: печать файла по расписанию

Myp » 14 янв 2013, 17:00

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

Re: печать файла по расписанию

Angel71 » 14 янв 2013, 17:50

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

Re: печать файла по расписанию

Myp » 14 янв 2013, 18:00

в винде скрипты .vbs
я ими когда-то делал проверку свободного места по расписанию.
но могут ли они отправлять в печать файл?

Добавлено спустя 2 минуты 19 секунд:
бинго
Код: Выделить всёРазвернуть
Dim w
Set W = CreateObject("Word.Application")
w.Visible = false
w.Documents.Open "C:\Temp\test.doc"
w.ActiveDocument.PrintOut
WScript.Sleep(1000)
w.Quit
Set w = Nothing

скрипт на пчеать и скрипт в шедулер.

Re: печать файла по расписанию

dccharacter » 14 янв 2013, 18:03

принтер с мониторингом папок
роутер+принтер -> настроить мониторинг папки

Добавлено спустя 1 минуту 23 секунды:
а что за принтер-то?

Re: печать файла по расписанию

Angel71 » 14 янв 2013, 18:11

ну да, это по сути тоже, что и в XLPrint.cls из примера OWCHelpr.exe
http://support.microsoft.com/kb/219151/ru
http://msdn.microsoft.com/en-us/library/wss56bz7(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/czhz96h7(v=vs.80).aspx
в вашем коде смущает
WScript.Sleep(1000)

:) если я не ошибаюсь, могут быть проблемы из-за того, что файл может не успеть уйти на печать. винда в этот момент запустит дефрагментатор, индексирование файлов, начнёт предварительную загрузку в память приложений, которые вы обычно в это время запускаете или ещё чего оптимизировать, "холодный старт" даже мелкого приложения или закрытие тяжеловесной софтины и т.д. и хз, захочет эксель допечатать или решит, что после w.Quit нужно забить на всё и вывалиться. можно на всякий или увеличить задержку или помучаться с поиском инфы, как определять закончило ли отправлять на печать. задержка явно проще.

Re: печать файла по расписанию

Myp » 14 янв 2013, 19:17

dccharacter писал(а):принтер с мониторингом папок
роутер+принтер -> настроить мониторинг папки

ужос :shock:

dccharacter писал(а):а что за принтер-то?

тот который по умолчанию выбран

Re: печать файла по расписанию

elmot » 14 янв 2013, 19:24

Экзелю можно по dde сказать, чтобы печатался
см. в реестре
HKEY_CLASSES_ROOT\Excel.OpenDocumentSpreadsheet.12\shell\Print

Re: печать файла по расписанию

Dmitry__ » 14 янв 2013, 21:02

"Ну вы, блин, даете!..."
А в ехеле разрешить скрипты и написать этот скрипт, не?
А в гугле найти пример скрипта печати?
За рюмку рома готов написать :roll:
Вот жеж я себе засрал мозги вендами, до сих пор все помню :)
http://yandex.ru/yandsearch?text=%D1%81 ... Excel&lr=2
http://forum.wincmd.ru/viewtopic.php?p=62125

Re: печать файла по расписанию

Angel71 » 14 янв 2013, 22:39

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

Re: печать файла по расписанию

Dmitry__ » 15 янв 2013, 02:43

Да как угодно можно сделать...
Сам файл распечатать нельзя, там черт ногу сломит. А вот в любой vb6, c++, dotnet можно создать обьект excel, ему скормить файл, отформатировать по странице и распечатать. Наверно можно и на скриптовом vb в html в броузере, но надо смотреть какие ограничения, не все можно делать в броузере...
В ссылке выше есть подробный пример. Пипец как подробный, коммент больше кода :)
Код: Выделить всёРазвернуть
'========================================================================== 
'Печать документа с помощью 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

Re: печать файла по расписанию

Angel71 » 15 янв 2013, 05:55

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

Добавлено спустя 1 час 43 минуты 30 секунд:
хех, похоже без сторонних утилит не получится.
эксель запускается как дде сервер
которому потом скармливаются три команды
[open("%1")][print()][quit()]

Re: печать файла по расписанию

Myp » 15 янв 2013, 09:40

а потом захочется из ворда печатать, а потом вобще пдф или картинку джипеговскую
не, вбскрипт самое хорошее и унивесральное)


Rambler\'s Top100 Mail.ru counter