Python 实现导入三份EXCEL表自动生成每周的考核周报WORD文档

本文介绍了一位程序员如何利用Python自动化生成每周维护组考核周报。通过结合openpyxl、docx等库,读取三份Excel文件(包含地区基站与维护人员对应、地区故障数据和未恢复地区数据),进行数据处理和计算,最终自动生成考核分析的Word文档。原本耗时近2小时的手动工作,现在仅需40秒即可完成。未来计划进一步完善程序,实现邮件自动发送功能。
摘要由CSDN通过智能技术生成

入手新部门,需要每周做一份维护组的考核报表,当初开始的时候做第一份考核报表花了近2个小时才做出一份考核报表。

后来想想作为一个小程序员,不能这么傻乎乎的做这些机械的工作,要做点自动化报表的小程序,经常近一个星期的晚上的修修补补终于完成。

本文采用了以下第三方包:

# coding=utf-8
from Tkinter import *
from tkFileDialog import *
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import Border, Side, Font  # 设置字体和边框需要的模块
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH  # 段落居中
import random
import os
import sys
import xlrd #读excel要用到xlrd模块
import xlwt #写excel表要用到xlwt模块
from datetime import date,datetime

要读取的是三份文件:第一份是地区基站与维护人员对应关系表(openpyxl读取xlsx文档),需要该文档的1张表;第二份是地区故障数据EXCEL文档(openpyxl读取xlsx文档),计算为基准分,需要该文档的4张表;第三份是目前未恢复的地区与维护人员对应关系表(用到xlrd模块读xls文档,用到xlwt模块写xls文档),作为减分项,需要该文档的1张表;

最后需要对6张表进行操作,然后自动生成考核分析WORD文档。

 

对地区故障数据,计算为考核分时:

当小于等于挑战值,得100;

当大于挑战值,但小于基准值,按挑战值与基准值之间的线性关系得分。(60-100之间)

当大于基准值,就不能按线性得分,因为线性一次函数与X轴有交点,交点之后为负值,但考核分起码为正数才合理。该部分的                           得分为60/(退服时长/基准值)。即为一个反函数,反函数会不断趋近于0,而不接近0.

 

程序运行打开的界面如下:

# coding=utf-8
from Tkinter import *
from tkFileDialog import *
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import Border, Side, Font  # 设置字体和边框需要的模块
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH  # 段落居中
import random
import os
import sys
import xlrd
import datetime #获取时间
import time
from docx.enum.style import WD_STYLE_TYPE #获取所有word表格样式

class App:
    def __init__(self, root):
        frame = Frame(root)  # container
        frame.pack()

        # self.quitButton = Button(frame, text='quit', command=frame.quit)
        # self.quitButton.pack()
        #
        # self.hiButton = Button(frame, text='Say Hi', command=self.sayHi)
        # self.hiButton.pack()

        self.button1 = Button(frame, text="退服周报文件", command=self.filefound1, width=20, height=1).grid(row=0, column=0)
        self.button2 = Button(frame, text="街道基站文件", command=self.filefound2, width=20, height=1).grid(row=1, column=0)
        self.button3 = Button(frame, text="站点激活文件", command=self.filefound3, width=20, height=1).grid(row=2, column=0)
        self.button4 = Button(frame, text="运行", command=self.execuate, width=20, height=1).grid(row=3, column=0)
        self.button5 = Button(frame, text="退出", command=frame.quit, width=20, height=1).grid(row=4, column=0)

        # self.button1.pack()
        #  self.button2.pack()
        # self.button3.pack()
        #  self.button4.pack()
        # self.button5.pack()

        self.e = Entry(frame)
        self.e.grid(row=0, column=2)
        self.e.delete(0, END)  # 将输入框里面的内容清空
        self.e.insert(0, '显示文件路径')

        self.e1 = Entry(frame)
        self.e1.grid(row=1, column=2)
        self.e1.delete(0, END)  # 将输入框里面的内容清空
        self.e1.insert(0, '显示文件路径')

        self.e2 = Entry(frame)
        self.e2.grid(row=2, column=2)
        self.e2.delete(0, END)  # 将输入框里面的内容清空
        self.e2.insert(0, '显示文件路径')

        self.filepath1 = StringVar()
        self.filepath2 = StringVar()
        self.filepath3 = StringVar()

        # 打开文档
        self.document = Document()

    def get_week_of_month(self):
        """
        获取指定的某天是某个月中的第几周
        周一作为一周的开始
        """
        t = time.gmtime()
        end = int(datetime.datetime(t.tm_year, t.tm_mon, t.tm_mday).strftime("%W"))
        begin = int(datetime.datetime(t.tm_year, t.tm_mon, 1).strftime("%W"))
        return end - begin + 1

    def filefound1(self):
        self.filepath1 = askopenfilename()
        print self.filepath1
        self.e.delete(0, END)  # 将输入框里面的内容清空
        self.e.insert(0, self.filepath1)
        return self.filepath1

    def filefound2(self):
        self.filepath2 = askopenfilename()
        print self.filepath2
        self.e1.delete(0, END)  # 将输入框里面的内容清空
        self.e1.insert(0, self.filepath2)
        return self.filepath2

    def filefound3(self):
        self.filepath3 = askopenfilename()
        print self.filepath3
        self.e2.delete(0, END)  # 将输入框里面的内容清空
        self.e2.insert(0, self.filepath3)
        return self.filepath3

    def execuate(self):
        # print self.filepath1, self.filepath2, self.filepath3

        # 修改正文的中文字体类型,示例代码:(全局设置)
        self.document.styles['Normal'].font.name = u'仿宋'
        self.document.styles['Normal'].font.size = Pt(16)  # 16对应仿宋三号
        self.document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋')
        styles = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值