This script is designed as a Windows 2000/NT Service and converts incoming Excel Workbooks in a directory to PDF. After installing this script with python scriptname.py install you will find a Service called “Excel2PDF” in the Service Control Manager (Services). To remove the Service do a python scriptname.py remove.
One Problem exists: The Service runs only when a user is logged in. If someone knows the problem please mail it via the contact webform.
To get the usage information start this script with the python interpreter as usually.
import win32serviceutil import win32service import win32event import win32gui import time import win32com.client import pythoncom import os class XLS2PDFService(win32serviceutil.ServiceFramework): _svc_name_ = "xls2pdf Service" _svc_display_name_ = "Excel2PDF" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) win32gui.MessageBox(0, "XLS2PDF Service has been stopped" , "XLS2PDF Status" , 0 ) def SvcDoRun(self): gscommand = 'c:\\gs\\gs8.15\\bin\\gswin32c.exe -sDEVICE=pdfwrite -r300 \ -dNOPAUSE -dBATCH -dSAFER -sPAPERSIZE=a4 \ -sOutputFile="'+path_to_watch+filename+'.pdf" "'+tmpfile+'"' path_to_watch = 'd:\\share\\' tmpdir = tempfile.mkdtemp() before = dict ([(f, None) for f in os.listdir (path_to_watch)]) win32gui.MessageBox(0, "XLS2PDF has been started" , "XLS2PDF Status" , 0 ) while 1 : time.sleep (0.1) after = dict ([(f, None) for f in os.listdir (path_to_watch)]) added = [f for f in after if not f in before] if added and added[0][-3:]=='xls': print os.tmpfile() filename = added[0] tmpfile = tmpdir + '\\'+filename+'.ps' if filename[-3:]=='xls': pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED) myExcel = win32com.client.DispatchEx('Excel.Application') Excel = myExcel.Workbooks.Open(path_to_watch + filename, 0, False, 2) Excel.PrintOut(1, 5000, 1, False, 'ServPDF', True, False, tmpfile) Excel.Saved = 1 Excel.Close() myExcel.Quit() del Excel del myExcel os.popen(gscommand) #os.remove(path_to_watch+filename) os.remove(tmpfile) pythoncom.CoUninitialize() before = after if __name__=='__main__': win32serviceutil.HandleCommandLine(XLS2PDFService)