1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python 实现导入三份EXCEL表自动生成每周的考核周报WORD文档

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

时间:2022-02-08 10:22:44

相关推荐

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

入手新部门,需要每周做一份维护组的考核报表,当初开始的时候做第一份考核报表花了近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-8from Tkinter import *from tkFileDialog import *from openpyxl import Workbookfrom openpyxl import load_workbookfrom openpyxl.styles import Border, Side, Font # 设置字体和边框需要的模块from docx import Documentfrom docx.shared import Ptfrom docx.shared import Inchesfrom docx.oxml.ns import qnfrom docx.enum.text import WD_ALIGN_PARAGRAPH # 段落居中import randomimport osimport sysimport xlrdimport datetime #获取时间import timefrom docx.enum.style import WD_STYLE_TYPE #获取所有word表格样式class App:def __init__(self, root):frame = Frame(root) # containerframe.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 + 1def filefound1(self):self.filepath1 = askopenfilename()print self.filepath1self.e.delete(0, END) # 将输入框里面的内容清空self.e.insert(0, self.filepath1)return self.filepath1def filefound2(self):self.filepath2 = askopenfilename()print self.filepath2self.e1.delete(0, END) # 将输入框里面的内容清空self.e1.insert(0, self.filepath2)return self.filepath2def filefound3(self):self.filepath3 = askopenfilename()print self.filepath3self.e2.delete(0, END) # 将输入框里面的内容清空self.e2.insert(0, self.filepath3)return self.filepath3def 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 = self.document.stylescur = datetime.datetime.now() #当前时间head_str = u'%s月份第%s周考核通报\n'%(cur.month,self.get_week_of_month()) # 文章标题# document.add_heading(head_str,0)head_paragraph = self.document.add_paragraph('') # 添加一个段落head_paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 段落居中run = head_paragraph.add_run(head_str)run.bold = True # 粗体是run.italic = False # 斜体否self.document.styles['Normal'].font.size = Pt(12) # 12对应仿宋小四号#上载excel文件wb = load_workbook(self.filepath1, data_only=True)wb_site_details = load_workbook(self.filepath2, data_only=True)daily_retire_list = xlrd.open_workbook(self.filepath3) # 每日退服清单sheets = wb.get_sheet_names()print sheetsoutofservice_sheet = wb.get_sheet_by_name(sheets[2]) # 当月清单Retirement_index_sheet = wb.get_sheet_by_name(sheets[4]) # 各县市小区退服指标Deactivation_2G_sheet = wb.get_sheet_by_name(sheets[5]) # 2G去激活清单Deactivation_4G_sheet = wb.get_sheet_by_name(sheets[6]) # 4G去激活清单sheet_site_details = wb_site_details.get_sheet_names() # 基站清单print sheet_site_detailssite_details_sheet = wb_site_details.get_sheet_by_name(sheet_site_details[0]) # 所有基站清单site_dict = {u'基站清单': u'西湖基站'}print u"基站清单"print 'len=', len(site_dict)for i in range(1, site_details_sheet.max_row): # 建立基站与维护经理的字典对应关系site_dict[site_details_sheet.cell(row=i, column=1).value] = site_details_sheet.cell(row=i, column=7).valueprint 'len=', len(site_dict)ws = wb.activerows = []for row in ws.iter_rows():rows.append(row)print u"行高:", outofservice_sheet.max_rowprint u"列宽:", outofservice_sheet.max_columnj = 1print u"退服当月清单"outofservice_dict_2G = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0, u'汤': 0.0, u'邵': 0.0, u'胡': 0.0,u'陈': 0.0}outofservice_dict_4G = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0, u'汤': 0.0, u'邵': 0.0, u'胡': 0.0,u'陈': 0.0}print 'outofservice_sheet.max_row = ', outofservice_sheet.max_rowprint 'Deactivation_2G_sheet.max_row = ', Deactivation_2G_sheet.max_rowprint 'Deactivation_4G_sheet.max_row = ', Deactivation_4G_sheet.max_rowfor i in range(1, outofservice_sheet.max_row): # rowif outofservice_sheet.cell(row=i, column=1).value == u'西湖' and outofservice_sheet.cell(row=i,column=1).value != u'':# print j, outofservice_sheet.cell(row=i, column=4).value, outofservice_sheet.cell(row=i, column=5).value, outofservice_sheet.cell(row=i, column=18).value, '\n' # 获取第一行第一列的单元格对象的值if not site_dict.has_key(outofservice_sheet.cell(row=i, column=5).value): # 基站与维护经理对应关系字典中找不到,另存在txt文件# f.write(outofservice_sheet.cell(row=i, column=5).value)print outofservice_sheet.cell(row=i, column=5).valueelse:weihu_name = site_dict[outofservice_sheet.cell(row=i, column=5).value]if type(outofservice_sheet.cell(row=i, column=18).value).__name__ == 'NoneType' :# print i, ' NoneType=',outofservice_sheet.cell(row=i, column=18).value, type(outofservice_sheet.cell(row=i, column=18).value)continuestr = outofservice_sheet.cell(row=i, column=18).value.encode('raw_unicode_escape')value = float(str)#print i,weihu_name,outofservice_sheet.cell(row=i, column=5).valueif not outofservice_dict_2G.has_key(weihu_name) and not outofservice_dict_4G.has_key(weihu_name) :#有些基站属于拱墅区,无对应维护经理continueif outofservice_sheet.cell(row=i, column=4).value == '2G':outofservice_dict_2G[weihu_name] += valueelse:outofservice_dict_4G[weihu_name] += valuej += 1print u"\n2G退服清单"print u'\n责任人,2G退服时长'for key, value in outofservice_dict_2G.items():# print u'2G %d,key = %s, value = %s' % (j, key, value)print u'%s, %s' % (key, value)print u"\n4G退服清单"print u'\n责任人,4G退服时长'for key, value in outofservice_dict_4G.items():# print u'4G %d,key = %s, value = %s' % (j, key, value)print u'%s, %s' % (key, value)Deactivation_dict_2G = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0, u'汤': 0.0, u'邵': 0.0, u'胡': 0.0,u'陈': 0.0}Deactivation_dict_4G = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0, u'汤': 0.0, u'邵': 0.0, u'胡': 0.0,u'陈': 0.0}j = 1print u"\n2G去激活清单"print u'\n责任人,2G退服时长'for i in range(1, Deactivation_2G_sheet.max_row): # rowif Deactivation_2G_sheet.cell(row=i, column=7).value == u'西湖' and Deactivation_2G_sheet.cell(row=i,column=7).value != u'':if not site_dict.has_key(Deactivation_2G_sheet.cell(row=i, column=5).value): # 基站与维护经理对应关系字典中找不到,另存在txt文件print Deactivation_2G_sheet.ell(row=i, column=5).valueelse:weihu_name = site_dict[Deactivation_2G_sheet.cell(row=i, column=5).value]if type(Deactivation_2G_sheet.cell(row=i, column=27).value).__name__ == 'NoneType':continuestr = Deactivation_2G_sheet.cell(row=i, column=27).value.encode('raw_unicode_escape')value = float(str)Deactivation_dict_2G[weihu_name] += value# print j, Deactivation_2G_sheet.cell(row=i, column=5).value, Deactivation_2G_sheet.cell(row=i, column=27).value, '\n' # 获取第一行第一列的单元格对象的值j += 1for key, value in Deactivation_dict_2G.items():# print u'2G %d,key = %s, value = %s' % (j, key, value)print u'%s, %s' % (key, value)j = 1print u"\n4G去激活清单"print u'\n责任人,4G退服时长'for i in range(1, Deactivation_4G_sheet.max_row): # rowif Deactivation_4G_sheet.cell(row=i, column=7).value == u'西湖' and Deactivation_4G_sheet.cell(row=i,column=7).value != u'':# print j, Deactivation_4G_sheet.cell(row=i, column=5).value, Deactivation_4G_sheet.cell(row=i, column=27).value, '\n' # 获取第一行第一列的单元格对象的值if not site_dict.has_key(Deactivation_4G_sheet.cell(row=i, column=5).value): # 基站与维护经理对应关系字典中找不到,另存在txt文件str_no_site = Deactivation_4G_sheet.cell(row=i, column=5).value.encode('raw_unicode_escape')# f.write(str_no_site)print Deactivation_4G_sheet.cell(row=i, column=5).valueelse:weihu_name = site_dict[Deactivation_4G_sheet.cell(row=i, column=5).value]if type(Deactivation_4G_sheet.cell(row=i, column=27).value).__name__ == 'NoneType':continue# print i,u'Deactivation_4G_sheet.cell(row=i, column=27)= ',Deactivation_4G_sheet.cell(row=i, column=27).valueif type(Deactivation_4G_sheet.cell(row=i, column=27).value).__name__ == 'long' or type(Deactivation_4G_sheet.cell(row=i, column=27).value).__name__ == 'float':Deactivation_dict_4G[weihu_name] += Deactivation_4G_sheet.cell(row=i, column=27).valuecontinuestr = Deactivation_4G_sheet.cell(row=i, column=27).value.encode('raw_unicode_escape')value = float(str)Deactivation_dict_4G[weihu_name] += valuej += 1for key, value in Deactivation_dict_4G.items():# print u'4G %d,key = %s, value = %s' % (j, key, value)print u'%s, %s' % (key, value)total_dict_2G = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0, u'汤': 0.0, u'邵': 0.0, u'胡': 0.0,u'陈': 0.0}total_dict_4G = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0, u'汤': 0.0, u'邵': 0.0, u'胡': 0.0,u'陈': 0.0}for key, value in Deactivation_dict_4G.items():total_dict_2G[key] = Deactivation_dict_2G[key] / 2.0 + outofservice_dict_2G[key]total_dict_4G[key] = Deactivation_dict_4G[key] / 2.0 + outofservice_dict_4G[key]print u'\n总退服2G和4G统计清单'print u'\n2G退服总统计'print u'\n责任人,2G退服时长'for key, value in total_dict_2G.items():# print u'4G %d,key = %s, value = %s' % (j, key, value)print u'%s, %s' % (key, value)print u'\n4G退服总统计'print u'\n责任人,4G退服时长'for key, value in total_dict_4G.items():# print u'4G %d,key = %s, value = %s' % (j, key, value)print u'%s, %s' % (key, value)Assessment_2G_dict = {u'周': [376, 101.52, 67.68, 0.0], u'郑': [596, 160.92, 107.28, 0.0], u'吴': [229, 61.83, 41.22, 0.0],u'邬': [658, 177.66, 118.44, 0.0],u'汤': [796, 214.92, 143.28, 0.0], u'邵': [295, 79.65, 53.1, 0.0], u'胡': [283, 76.41, 50.94, 0.0],u'陈': [434, 117.18, 78.12, 0.0]}Assessment_4G_dict = {u'周': [1994, 538.38, 358.92, 0.0], u'郑': [763, 206.01, 137.34, 0.0],u'吴': [692, 186.84, 124.56, 0.0],u'邬': [1076, 290.52, 193.68, 0.0],u'汤': [2585, 697.95, 465.3, 0.0], u'邵': [1776, 479.52, 319.68, 0,0],u'胡': [1846, 498.42, 332.28, 0.0],u'陈': [498, 134.46, 89.64, 0.0]}Weight_2G_dict = {u'周': [0.0, 0.0], u'郑': [0.0, 0.0], u'吴': [0.0, 0.0], u'邬': [0.0, 0.0],u'汤': [0.0, 0.0],u'邵': [0.0, 0.0], u'胡': [0.0, 0.0], u'陈': [0.0, 0.0]}Weight_4G_dict = {u'周': [0.0, 0.0], u'郑': [0.0, 0.0], u'吴': [0.0, 0.0], u'邬': [0.0, 0.0],u'汤': [0.0, 0.0],u'邵': [0.0, 0.0], u'胡': [0.0, 0.0], u'陈': [0.0, 0.0]}print u"\n\n2G考核分数"print u"\n责任人,当前2G退服时长,(基站数,基准值,挑战值),得分"one_para = u'1、街道退服时长考核统计\n'one_para += u'2G退服总时长为%s小时,4G退服总时长为%s小时\n\n' % (round(Retirement_index_sheet.cell(row=7, column=6).value,2), round(Retirement_index_sheet.cell(row=7, column=16).value,2) )one_para += u'当前退服执行情况,预计第一名为邬,所在街道2G与4G退服时长总体最小,2G达到市公司分解到街道退服时长指标的挑战值要求,4G退服时长也较小;第二名周,也达到街道退服时长指标的基准值要求。排名后续的同事得加把油力争减少退服时长,再接再励达到退服基准值。'one_para += u'\n\n2G考核分数'self.document.add_paragraph(one_para)table_1 = self.document.add_table(rows=9, cols=6,style = "Light Shading Accent 1")table_1.rows[0].cells[0].text = u"责任人"table_1.rows[0].cells[1].text = u"当前2G退服时长"table_1.rows[0].cells[2].text = u"基站数"table_1.rows[0].cells[3].text = u"基准值"table_1.rows[0].cells[4].text = u"挑战值"table_1.rows[0].cells[5].text = u"得分"for key, value in total_dict_2G.items():if value <= Assessment_2G_dict[key][2]:dagree = 100elif value > Assessment_2G_dict[key][2] and value <= Assessment_2G_dict[key][1]:dagree = 40.0 * (value - Assessment_2G_dict[key][1]) / (Assessment_2G_dict[key][2] - Assessment_2G_dict[key][1]) + 60.0else:dagree = 60.0 / (value / (Assessment_2G_dict[key][1]))Weight_2G_dict[key][0] = Assessment_2G_dict[key][0]Weight_2G_dict[key][1] = dagreeAssessment_2G_dict[key][3] = round(dagree, 2) #保存用于排序print u'%s, %s ,%s, %.2f' % (key, value, Assessment_2G_dict[key], dagree)# sorted()都接受一个参数reverse(True or False)来表示升序或降序排序。Assessment_2G_Rank = sorted(Assessment_2G_dict.items(), key=lambda item: item[1][3], reverse = True)#print Assessment_2G_dict_Rank # 返回的Assessment_2G_Rank为listi = 1for item in Assessment_2G_Rank:hdr_cells = table_1.rows[i].cellshdr_cells[0].text = u'%s' % item[0]hdr_cells[1].text = u'%s' % round(total_dict_2G[item[0]], 2)hdr_cells[2].text = u'%s' % item[1][0]hdr_cells[3].text = u'%s' % round(item[1][1], 2)hdr_cells[4].text = u'%s' % round(item[1][2], 2)hdr_cells[5].text = u'%s' % round(item[1][3], 2)i += 1print u"\n\n4G考核分数"print u"\n责任人,当前4G退服时长,(基站数,基准值,挑战值),得分"two_para = u'\n4G考核分数'self.document.add_paragraph(two_para)table_2 = self.document.add_table(rows=9, cols=6,style = "Light Shading Accent 1")table_2.rows[0].cells[0].text = u"责任人"table_2.rows[0].cells[1].text = u"当前4G退服时长"table_2.rows[0].cells[2].text = u"基站数"table_2.rows[0].cells[3].text = u"基准值"table_2.rows[0].cells[4].text = u"挑战值"table_2.rows[0].cells[5].text = u"得分"for key, value in total_dict_4G.items():if value <= Assessment_4G_dict[key][2]:dagree = 100elif value > Assessment_4G_dict[key][2] and value <= Assessment_4G_dict[key][1]:dagree = 40.0 * (value - Assessment_4G_dict[key][1]) / (Assessment_4G_dict[key][2] - Assessment_4G_dict[key][1]) + 60.0else:dagree = 60.0 / (value / (Assessment_4G_dict[key][1]))Weight_4G_dict[key][0] = Assessment_4G_dict[key][0]Weight_4G_dict[key][1] = dagreeAssessment_4G_dict[key][3] = round(dagree, 2) # 保存用于排序print u'%s, %s ,%s, %.2f' % (key, value, Assessment_4G_dict[key], dagree)# sorted()都接受一个参数reverse(True or False)来表示升序或降序排序。Assessment_4G_Rank = sorted(Assessment_4G_dict.items(), key=lambda item: item[1][3], reverse=True)# print Assessment_2G_dict_Rank # 返回的Assessment_2G_Rank为listi = 1for item in Assessment_4G_Rank:hdr_cells = table_2.rows[i].cellshdr_cells[0].text = u'%s' % item[0]hdr_cells[1].text = u'%s' % round(total_dict_4G[item[0]], 2)hdr_cells[2].text = u'%s' % item[1][0]hdr_cells[3].text = u'%s' % round(item[1][1], 2)hdr_cells[4].text = u'%s' % round(item[1][2], 2)hdr_cells[5].text = u'%s' % round(item[1][3], 2)i += 1print u"\n每日导出退服清单"daily_retire_dict = {u'周': 0.0, u'郑': 0.0, u'吴': 0.0, u'邬': 0.0,u'汤': 0.0, u'邵': 0.0, u'胡': 0.0, u'陈': 0.0}# table = data.sheets()[0] # 通过索引顺序获取# table = data.sheet_by_index(0) # 通过索引顺序获取table = daily_retire_list.sheet_by_name(u'详细') # 通过名称获取每日退服清单# 获取行数和列数 # table.nrows # table.ncolstotal_day = 0.0for i in range(table.nrows): # 显示每日退服清单# print table.cell(i, 0).value, table.cell(i, 1).value, table.cell(i, 3).value, table.cell(i, 4).valueif daily_retire_dict.has_key(table.cell(i, 3).value):daily_retire_dict[table.cell(i, 3).value] += table.cell(i, 4).valuetotal_day += table.cell(i, 4).valuethree_para = u'\n2、当前基站退服开销时间统计(扣分项,一天扣0.1分)'three_para += u"\n总计 基站退服开销时间为%d天。" % round(total_day,2)three_para += u"\n当前退服开销天数情况,汤开销天数最多,排名较前的同事得加把油力争减少退服开销天数。"self.document.add_paragraph(three_para)# 保存段落到文档中table_3 = self.document.add_table(rows=9, cols=3,style = "Light Shading Accent 1")table_3.rows[0].cells[0].text = u"责任人"table_3.rows[0].cells[1].text = u"开销天数"table_3.rows[0].cells[2].text = u"开销减分"print u"\n开销天数"# sorted()都接受一个参数reverse(True or False)来表示升序或降序排序。# 返回的Assessment_2G_Rank为listdaily_retire_Rank = sorted(daily_retire_dict.items(), key=lambda item: item[1])i = 1for item in daily_retire_Rank:hdr_cells = table_3.rows[i].cellshdr_cells[0].text = u'%s' % item[0]hdr_cells[1].text = u'%s' % round(item[1], 2)hdr_cells[2].text = u'%s' % round(item[1]*0.1, 2)i += 1print u"\n根据开销天数、2G和4G基站数加权计算最终考核分数"print u"\n责任人,所在街道分数,开销减分,总和得分,折算考核分"four_para = u'\n\n最后的得分数'four_para += u"\n根据开销天数、2G和4G基站数加权计算最终考核分数"self.document.add_paragraph(four_para)# 保存段落到文档中table_4 = self.document.add_table(rows=9, cols=5,style = "Light Shading Accent 1")table_4.rows[0].cells[0].text = u"责任人"table_4.rows[0].cells[1].text = u"所在街道分数"table_4.rows[0].cells[2].text = u"开销减分"table_4.rows[0].cells[3].text = u"总和得分"table_4.rows[0].cells[4].text = u"折算考核分"# Final_Score_dict 储存 责任人 所在街道分数 开销减分 总和得分 折算考核分 等信息Final_Score_dict = {u'周': [0.0, 0.0, 0.0, 0.0], u'郑': [0.0, 0.0, 0.0, 0.0],u'吴': [0.0, 0.0, 0.0, 0.0],u'邬': [0.0, 0.0, 0.0, 0.0],u'汤': [0.0, 0.0, 0.0, 0.0], u'邵': [0.0, 0.0, 0.0, 0.0],u'胡': [0.0, 0.0, 0.0, 0.0],u'陈': [0.0, 0.0, 0.0, 0.0]}i = 1for key, value in total_dict_4G.items():total_site = Weight_2G_dict[key][0] + Weight_4G_dict[key][0]kaixiao_score = 0.1 * daily_retire_dict[key]Final_Score_dict[key][1] = kaixiao_score #开销减分score = 1.0 * Weight_2G_dict[key][1] * Weight_2G_dict[key][0] / total_site + 1.0 * Weight_4G_dict[key][1] * Weight_4G_dict[key][0] / total_siteFinal_Score_dict[key][0] = score # 所在街道分数final_score = score - kaixiao_scoreFinal_Score_dict[key][2] = final_score # 总和得分Final_Score_dict[key][3] = 12.0 * 1.1 * final_score/100.00 # 折算考核分if Final_Score_dict[key][3] < 0:Final_Score_dict[key][3] = 0print u'%s, %.2f , %.2f, %.2f, %.2f ' % (key, score, kaixiao_score, final_score, 12.0 * 1.1 * final_score / 100)# sorted()都接受一个参数reverse(True or False)来表示升序或降序排序。 # 返回的Assessment_2G_Rank为listFinal_Score_Rank = sorted(Final_Score_dict.items(), key=lambda item: item[1][2], reverse=True)i = 1for item in Final_Score_Rank:hdr_cells = table_4.rows[i].cellshdr_cells[0].text = u'%s' % item[0]hdr_cells[1].text = u'%s' % round(item[1][0], 2)hdr_cells[2].text = u'%s' % round(item[1][1], 2)hdr_cells[3].text = u'%s' % round(item[1][2], 2)hdr_cells[4].text = u'%s' % round(item[1][3], 2)i += 1# 保存文件length = len(self.filepath1)for i in range(length - 1, -1, -1):if ( self.filepath1[i] == '/'):breaksavepath = u""for j in range(0, i + 1):savepath += self.filepath1[j]# file_extension=u".docx"savepath = savepath + u'测试.docx'print savepathself.document.save(savepath)# file1 = askopenfilename()if __name__ == '__main__':root = Tk()app = App(root)root.mainloop()

之前得花2个小时的考核分析,现在只需要40秒就可以完成。

本程序后续的改进内容为自动加载写入EMAIL,并自动发送给相关人员。

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