Технический форум по робототехнике.
Myp » 14 янв 2013, 14:54
можно стандартным планировщиком виндовс, или как-то ещё, создать задание на ежедневную распечатку файла?
чтоб раз в день, утром, печатался определённый график в экселе который выгружает другая программа.
чтоб человек утром проходя мимо принтера мог взять листок с своей фамилией и пойти работать по плану.
galex1981 » 14 янв 2013, 15:10
Довольно мощный планировщик для Windows nncron но я не знаю, можно ли с помощью него печатать документы
Angel71 » 14 янв 2013, 15:50
100500, что такое сделать можно, а как именно нужно будет поискать.
Добавлено спустя 31 минуту 25 секунд:вариантов пока не много. запускать в планировщике задач excel`овский файл, в котором есть макрос печати нужного документа или написать простенькую программку-хелпер, которая при запуске будет экселю отправлять команнды "открой такой-то файл" и "напечатай".
здесь
http://support.microsoft.com/kb/262827/ru можно скачать пример скриптика для печати (OWCHelpr.exe это самораспаковывающийся архив файлов примера)
Myp » 14 янв 2013, 17:00
а через запуск vb скрипта например можно печатать?
хочется стандартными средствами винды.
Angel71 » 14 янв 2013, 17:50
в том примере именно скриптом (а не макросом экселя, которым тоже без проблем можно и который может быть в совершенно другом документе, а не только в том, что печатается) и печатают, только у них скрипт в браузере работает. без браузера тоже можно. нужно порыть как. сейчас доку порою, мож чего по быстрому накопаю.
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
скрипт на пчеать и скрипт в шедулер.
dccharacter » 14 янв 2013, 18:03
принтер с мониторингом папок
роутер+принтер -> настроить мониторинг папки
Добавлено спустя 1 минуту 23 секунды:
а что за принтер-то?
Angel71 » 14 янв 2013, 18:11
ну да, это по сути тоже, что и в XLPrint.cls из примера OWCHelpr.exe
http://support.microsoft.com/kb/219151/ruhttp://msdn.microsoft.com/en-us/library/wss56bz7(v=vs.80).aspxhttp://msdn.microsoft.com/en-us/library/czhz96h7(v=vs.80).aspxв вашем коде смущает
WScript.Sleep(1000)
если я не ошибаюсь, могут быть проблемы из-за того, что файл может не успеть уйти на печать. винда в этот момент запустит дефрагментатор, индексирование файлов, начнёт предварительную загрузку в память приложений, которые вы обычно в это время запускаете или ещё чего оптимизировать, "холодный старт" даже мелкого приложения или закрытие тяжеловесной софтины и т.д. и хз, захочет эксель допечатать или решит, что после w.Quit нужно забить на всё и вывалиться. можно на всякий или увеличить задержку или помучаться с поиском инфы, как определять закончило ли отправлять на печать. задержка явно проще.
Myp » 14 янв 2013, 19:17
dccharacter писал(а):принтер с мониторингом папок
роутер+принтер -> настроить мониторинг папки
ужос
dccharacter писал(а):а что за принтер-то?
тот который по умолчанию выбран
elmot » 14 янв 2013, 19:24
Экзелю можно по dde сказать, чтобы печатался
см. в реестре
HKEY_CLASSES_ROOT\Excel.OpenDocumentSpreadsheet.12\shell\Print
Dmitry__ » 14 янв 2013, 21:02
"Ну вы, блин, даете!..."
А в ехеле разрешить скрипты и написать этот скрипт, не?
А в гугле найти пример скрипта печати?
За рюмку рома готов написать
Вот жеж я себе засрал мозги вендами, до сих пор все помню
http://yandex.ru/yandsearch?text=%D1%81 ... Excel&lr=2http://forum.wincmd.ru/viewtopic.php?p=62125
Angel71 » 14 янв 2013, 22:39
про макросы уже было и кстати, если есть возможность юзать скрипты, то лучше их. если данные нужно обработать или импорт/експорт, то да, макросы рулят. а если нет, то лучше их вообще в офисных софтинах отключить напрочь. на большинстве контор вообще никогда не бэкапят документы и -1 к источникам возможных проблем не помешает.
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
Angel71 » 15 янв 2013, 05:55
не не не, мона и весь файл это же мелкософт. кстати вспомнил, что отослать на печать можно выбрав на файле "печать". если порыть в реестре, то можно будет понять какой либе или экзешнику какие параметры скармливать.
Добавлено спустя 1 час 43 минуты 30 секунд:хех, похоже без сторонних утилит не получится.
эксель запускается как дде сервер
которому потом скармливаются три команды
[open("%1")][print()][quit()]
Myp » 15 янв 2013, 09:40
а потом захочется из ворда печатать, а потом вобще пдф или картинку джипеговскую
не, вбскрипт самое хорошее и унивесральное)