场景:

实现效果:

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

图1

 图2

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

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

 代码如下:

#!user/bin/python3
# _*_ coding:utf-8 _*_
# author TingXiao-UI
from win32com import client
from PyPDF2 import PdfFileReader,PdfFileWriter
import os


class Dispatching:
    def __init__(self,name):
        self.xlsName = name
    def 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.xlsName
        xlBook = 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:#判断是否合并PDF
            self.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)

Logo

一站式 AI 云服务平台

更多推荐