roboforum.ru

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

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

Все здесь

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

Сообщение Myp » 14 янв 2013, 14:54

можно стандартным планировщиком виндовс, или как-то ещё, создать задание на ежедневную распечатку файла?
чтоб раз в день, утром, печатался определённый график в экселе который выгружает другая программа.
чтоб человек утром проходя мимо принтера мог взять листок с своей фамилией и пойти работать по плану.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение galex1981 » 14 янв 2013, 15:10

Довольно мощный планировщик для Windows nncron но я не знаю, можно ли с помощью него печатать документы
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

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

Сообщение Angel71 » 14 янв 2013, 15:50

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

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

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

Сообщение Myp » 14 янв 2013, 17:00

а через запуск vb скрипта например можно печатать?
хочется стандартными средствами винды.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение Angel71 » 14 янв 2013, 17:50

в том примере именно скриптом (а не макросом экселя, которым тоже без проблем можно и который может быть в совершенно другом документе, а не только в том, что печатается) и печатают, только у них скрипт в браузере работает. без браузера тоже можно. нужно порыть как. сейчас доку порою, мож чего по быстрому накопаю.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

скрипт на пчеать и скрипт в шедулер.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение dccharacter » 14 янв 2013, 18:03

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

Добавлено спустя 1 минуту 23 секунды:
а что за принтер-то?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

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 нужно забить на всё и вывалиться. можно на всякий или увеличить задержку или помучаться с поиском инфы, как определять закончило ли отправлять на печать. задержка явно проще.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

Сообщение Myp » 14 янв 2013, 19:17

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

ужос :shock:

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

тот который по умолчанию выбран
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение elmot » 14 янв 2013, 19:24

Экзелю можно по dde сказать, чтобы печатался
см. в реестре
HKEY_CLASSES_ROOT\Excel.OpenDocumentSpreadsheet.12\shell\Print
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

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
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Angel71 » 14 янв 2013, 22:39

про макросы уже было и кстати, если есть возможность юзать скрипты, то лучше их. если данные нужно обработать или импорт/експорт, то да, макросы рулят. а если нет, то лучше их вообще в офисных софтинах отключить напрочь. на большинстве контор вообще никогда не бэкапят документы и -1 к источникам возможных проблем не помешает.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -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
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Angel71 » 15 янв 2013, 05:55

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

Добавлено спустя 1 час 43 минуты 30 секунд:
хех, похоже без сторонних утилит не получится.
эксель запускается как дде сервер
которому потом скармливаются три команды
[open("%1")][print()][quit()]
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

Сообщение Myp » 15 янв 2013, 09:40

а потом захочется из ворда печатать, а потом вобще пдф или картинку джипеговскую
не, вбскрипт самое хорошее и унивесральное)
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич


Вернуться в Свободное общение

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 1