2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python办公自动化实例(二):批量生成派工单

python办公自动化实例(二):批量生成派工单

时间:2019-02-02 19:36:28

相关推荐

python办公自动化实例(二):批量生成派工单

场景:

实现效果:

如下图1所示,有如下多条工单,需要向施工单位派发,每条工单都有一个相同模板,如图2所示

图1

图2

通过使用python程序,批量生成这些工单,并转为pdf文件,方便打印,效果如下图所示

PDF有两种生成模式,通过设置参数,程序可以实现每条工单一个pdf,也可以合并所有工单为一个pdf,如下图所示

代码如下:

#!user/bin/python3# _*_ coding:utf-8 _*_# author TingXiao-UIfrom win32com import clientfrom PyPDF2 import PdfFileReader,PdfFileWriterimport osclass Dispatching:def __init__(self,name):self.xlsName = namedef run(self,model=False):rootPath = os.getcwd()# 创建派工单汇总文件夹folderPath = rootPath + '\\派工单'if os.path.exists(folderPath) is False:os.mkdir(folderPath)#启动Excle应用程序xlApp = client.Dispatch("Excel.Application")xlApp.Visible = False # False:软件不可见,后台运行,不显示; True为可见xlApp.DisplayAlerts = 0 ##是否关闭保存弹出框#读取excel数据xlsPath = rootPath + '\\' + self.xlsNamexlBook = xlApp.Workbooks.Open(xlsPath)## xlSheet_1 = xlBook_1.Worksheets(1) # 打开第1个表info = xlBook.Worksheets["信息填写"] # 打开名为“信息填写”的sheet作为数据源template = xlBook.Worksheets["模板"]# 打开名为“模板”的sheet作为数据源#批量生成nrows = info.UsedRange.Rows.Count#行数for i in range(2,nrows,1):if info.cells(i,1).value =='是':template.UsedRange.cells(2,2).value = info.UsedRange.cells(i,2).value#工程名称template.UsedRange.cells(3,2).value=info.UsedRange.cells(i,3).value#委派部门template.UsedRange.cells(4,2).value=info.UsedRange.cells(i,4).value#施工单位template.UsedRange.cells(5,2).value=info.UsedRange.cells(i,5).value#委派人template.UsedRange.cells(5,4).value=info.UsedRange.cells(i,6).value#委派时间template.UsedRange.cells(6,2).value=info.UsedRange.cells(i,7).value#工作地点template.UsedRange.cells(6,4).value=info.UsedRange.cells(i,8).value#预计完成时间template.UsedRange.cells(7,2).value=info.UsedRange.cells(i,9).value#委派内容#保存name = info.UsedRange.cells(i,4).value+'-'+info.UsedRange.cells(i,9).value+'.pdf'# template.Activate()# template.Select()template.SaveAs(folderPath + '\\' + name,FileFormat=57)xlBook.Close()#关闭excle文档xlApp.Quit()#关闭excel应用程序if model:#判断是否合并PDFself.mergePdf(folderPath)#获取PDF文件页码def getPdfPagesNum(self,p):reader = PdfFileReader(p)if reader.isEncrypted:reader.decrypt('')PdfPagesNum = reader.getNumPages()# print(PdfPagesNum)return(PdfPagesNum)#遍历PDF文件,批量合并def mergePdf(self,rp):print('开始合并PDF文件!')# 实例化写入对象outPdf = PdfFileWriter()outPdfPages = 0#遍历PDF文件for root,dirs,files in os.walk(rp):for file in files:curPdf = os.path.join(file)curPdfPath = os.path.join(root,file)if curPdfPath.find('.pdf')>=0 and curPdfPath.find('合并')<0:# 读取PDF文件inPdf = PdfFileReader(open(curPdfPath, "rb"))# 获取源PDF文件页数pageNum = inPdf.getNumPages()outPdfPages += pageNum# 逐个合并PDF# print('合并:'+curPdf)for iPage in range(pageNum):# direction = inPdf.getPage(iPage).get('/Rotate')# print(direction)outPdf.addPage(inPdf.getPage(iPage))# 创建合并文件夹mergeFlodPath = rp + '\\合并PDF'a = os.path.exists(mergeFlodPath)if a!=True:os.mkdir(mergeFlodPath)#写入到目标PDF文件pdfPath = './派工单/合并PDF/'+str(outPdfPages)+'条'+'派工单.pdf'#os.path.join(mergeFlodPath+'\\'+str(outPdfPages)+'条'+'派工单.pdf')with open(pdfPath,'wb') as outputfile:outPdf.write(outputfile)print(str(outPdfPages)+'页PDF并完毕!')if __name__=='__main__':xlsName = '派工单.xlsx'xx = Dispatching(xlsName)model = True#True:合并PDF,False:不合并xx.run(model)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。