Python 员工工时汇总

PS: 也是从网上各个帖子中学习的Python,因此代码的格式以及内容有粘贴网上其他大神的代码,如有侵权请告知删除

每个人的工时表:

需要汇总的工时表(手动绘制):

需要汇总的工时表(程序生成):

程序界面:

代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-from tkinter import *
import tkinter.filedialog
import os
import xlrd3 as xlrd
import xlwtroot = Tk()
root.title('工时计算')
root.geometry('650x300')
FolderName1 = ""
FolderName2 = ""
FileName = ""
startRow = 1 #第一列是空的def Button1Anwser():global FolderName1Path = Label(root, text='')FolderName1 = tkinter.filedialog.askdirectory()Path.config(text= FolderName1)Path.grid(row=4, column=0, sticky=W)def Button2Anwser():global FolderName2Path = Label(root, text='')FolderName2 = tkinter.filedialog.askdirectory()Path.config(text= FolderName2)Path.grid(row=6, column=0, sticky=W)def Button3Anwser():global FileNameText = Label(root, text='')Text.config(text='正在汇总')Text.grid(row=7, column=1)ECEL_Path = FolderName2 + '\\' + 'Result.xls'Write_File = xlwt.Workbook()Table = Write_File.add_sheet('Caculate', cell_overwrite_ok=True)NameList = [] #用来存储姓名OtherList = [] #用来存储其他SupportList = []  # 用来存储售后Project = [] #用来存储项目号和工时(按人算)Project2 = []  # 用来存储项目号Create = []  # 用来存储研发号和工时(按人算)Create2 = []  # 用来存储研发号for FolderName, SubFolders, FileNames in os.walk(FolderName1):for FileName in FileNames:print(FileName.split('.')[0])NameList.append(FileName.split('.')[0])#存放姓名NameFile = xlrd.open_workbook(FolderName + '\\' + FileName)SheetNum = NameFile.nsheetsfor i in range(SheetNum):ReadSheet = NameFile.sheet_by_index(i)for row in range(1, ReadSheet.nrows):Information = ""product_value = ReadSheet.cell(row, startRow).valueif product_value == '其他':#如果“其他”对应的合计一栏是空(+3是根据工时模板决定,天数变化,合计的位置变化)if ReadSheet.cell_type(row, int(Sentence1.get())+3) == xlrd.XL_CELL_EMPTY or \ReadSheet.cell_type(row, int(Sentence1.get())+3) == xlrd.XL_CELL_BLANK:OtherList.append(0)# 如果“其他”对应的合计一栏非空(+3是根据工时模板决定,天数变化,合计的位置变化)else:OtherList.append(ReadSheet.cell(row, int(Sentence1.get())+3).value)elif product_value == '技术支持':# 如果“技术支持”对应的合计一栏是空(+2是根据工时模板决定,技术支持有3行,第三行是售后)if ReadSheet.cell_type(row+2, int(Sentence1.get()) + 3) == xlrd.XL_CELL_EMPTY or \ReadSheet.cell_type(row+2, int(Sentence1.get()) + 3) == xlrd.XL_CELL_BLANK:SupportList.append(0)# 如果“技术支持”对应的合计一栏非空(+2是根据工时模板决定,技术支持有3行,第三行是售后)else:SupportList.append(ReadSheet.cell(row+2, int(Sentence1.get()) + 3).value)elif product_value == '订单项目':#订单项目的第一行是“小计”,最后一行可能是空,可能是“小计”start = row+1while(ReadSheet.cell(start, 2).value != '小计' and \ReadSheet.cell_type(start, 2) != xlrd.XL_CELL_EMPTY and \ReadSheet.cell_type(start, 2) != xlrd.XL_CELL_BLANK):#每个人涉及的项目可能会重复,用Project2来存储所有项目号if ReadSheet.cell(start, 2).value not in Project2:Project2.append(ReadSheet.cell(start, 2).value)if ReadSheet.cell_type(start, int(Sentence1.get()) + 3) != xlrd.XL_CELL_EMPTY and \ReadSheet.cell_type(start, int(Sentence1.get()) + 3) != xlrd.XL_CELL_BLANK and \int(ReadSheet.cell(start, int(Sentence1.get())+3).value) != 0:#把一个人的所有项目号以及时长,绘制成一个字符串,存在数组里#其格式为S20001;10 S20002;12Information = Information + str(ReadSheet.cell(start, 2).value) + ';' + str(ReadSheet.cell(start, int(Sentence1.get())+3).value) + ' 'start = start+1if Information != "":Project.append(Information)# 如果没有任何订单项目,写入0else:Project.append(0)#与订单项目同理,不再赘述elif product_value == '研发项目':start = row+1while(ReadSheet.cell(start, 2).value != '小计' and \ReadSheet.cell_type(start, 2) != xlrd.XL_CELL_EMPTY and \ReadSheet.cell_type(start, 2) != xlrd.XL_CELL_BLANK):if ReadSheet.cell(start, 2).value not in Create2:Create2.append(ReadSheet.cell(start, 2).value)if ReadSheet.cell_type(start, int(Sentence1.get()) + 3) != xlrd.XL_CELL_EMPTY and \ReadSheet.cell_type(start, int(Sentence1.get()) + 3) != xlrd.XL_CELL_BLANK and \int(ReadSheet.cell(start, int(Sentence1.get()) + 3).value) != 0:Information = Information + str(ReadSheet.cell(start, 2).value) + ';' + str(ReadSheet.cell(start, int(Sentence1.get())+3).value) + ' 'start = start+1if Information != "":Create.append(Information)else:Create.append(0)#初始化文档,把文档所有的标题写好Table.write(0, 0, "姓名")Table.write(1, 0, "其他")Table.write(2, 0, "售后")Table.write(3, 0, "订单")#写项目号for row in range(4,4 + len(Project2)):Table.write(row, 0, Project2[row-4])Table.write(4 + len(Project2), 0, "研发")#写研发号for row in range(4 + len(Project2)+1,4 + len(Project2) + len(Create2) + 1):Table.write(row, 0, Create2[row - len(Project2)-1-4])Excel_Row = 0i = 0for Excel_Column in range(1,len(NameList)+1):row = Excel_RowTable.write(row, Excel_Column, NameList[i])row = row + 1Table.write(row, Excel_Column, OtherList[i])row = row + 1Table.write(row, Excel_Column, SupportList[i])j = 0if (Project[i] != 0):while(Project[i].split(' ')[j] != ""):#取得个人涉及项目号在Project2中的下标值,以便确认该项目号在Excel表格中的位置(第几行)temp = Project2.index(Project[i].split(' ')[j].split(';')[0])Table.write(temp + 4, Excel_Column, float(Project[i].split(' ')[j].split(';')[1]))j = j + 1#研发项目和订单项目同理,不再赘述j = 0if (Create[i] != 0):while(Create[i].split(' ')[j] != ""):temp = Create2.index(Create[i].split(' ')[j].split(';')[0])Table.write(temp + len(Project2) + 1 + 4, Excel_Column, float(Create[i].split(' ')[j].split(';')[1]))j = j + 1i = i + 1Write_File.save(ECEL_Path)Text = Label(root, text='')Text.config(text='汇总完成')Text.grid(row=7, column=1)# -------------------------------------界面---------------------------------
Text1 = Label(root, text='统计月的天数:')
Text1.grid(row=1, sticky=W)
Sentence1 = Entry(root)
Sentence1.grid(row=2, column=0, sticky=W)SelectFolder1 = Button(root, text="源文件夹", command=Button1Anwser, width=10, height=1, bg="DarkGray", fg="white")
SelectFolder1.grid(row=3, column=0, sticky=W)SelectFolder2 = Button(root, text="目标文件夹", command=Button2Anwser,width=10, height=1, bg="DarkGray", fg="white")
SelectFolder2.grid(row=5, column=0, sticky=W)SelectFile = Button(root, text="开始汇总", command=Button3Anwser,width=10, height=1, bg="DarkGray", fg="white")
SelectFile.grid(row=7, column=0, sticky=W)Advice1 = Label(root, text='')
Advice1.config(text='1 : 若工时统计模板更改,需要重新修改代码对应新的模板')
Advice1.grid(row=10, column=0, sticky=W)Advice2 = Label(root, text='')
Advice2.config(text='2 : 如要正确使用该工具,每位员工不得随意在原模板上进行加项,删减等操作')
Advice2.grid(row=11, column=0, sticky=W)Advice3 = Label(root, text='')
Advice3.config(text='3 : 使用过程中一直提示“正在汇总”时,有以下几个原因:*模板不正确 *未关闭Excel *目标文件夹存在非工时表')
Advice3.grid(row=12, column=0, sticky=W)Advice4 = Label(root, text='')
Advice4.config(text='4 : 观察黑色打印窗口,当异常时,最后输出谁的名字,就是谁的工时表有问题')
Advice4.grid(row=13, column=0, sticky=W)root.mainloop()

Python 员工工时汇总相关推荐

  1. python基础知识资料-Python基础知识汇总

    原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...

  2. Python面向对象案例汇总

    Python面向对象案例汇总 简介 Python是一门面向对象的语言,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能. 定义个空 ...

  3. list python 访问 键值对_基础|Python常用知识点汇总(中)

    字符串字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串.1.创建字符串 str1 = 'Hello World!' str2 = "Hello W ...

  4. python面试题及答案2020_2020年python面试题汇总(最新)

    随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.那么提前掌握最新的python面试题技巧,将有助于在求职中取得成功:同时gxlcms作为知名的编程学习网站,有着最新最热门的py ...

  5. 覆盖所有领域的 Python 工具库汇总!建议收藏!!!

    文章首发于个人站点 覆盖所有领域的 Python 工具库汇总 公众号:[DreamHub] 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. py ...

  6. python编程入门课 视频-为了学习Python,我汇总了这10个免费的视频课程!

    原标题:为了学习Python,我汇总了这10个免费的视频课程! 程序员书库(ID:OpenSourceTop) 编译 整编自:https://hackernoon.com/10-free-python ...

  7. Python基础知识汇总和应用示例

    Python基础知识汇总和应用示例 文章内容 链接 python库下载网站 python库下载网站 python读取csv文件 python读取csv文件 Python3基础知识:三元表达式.元祖.s ...

  8. python 爬虫 微博 github_GitHub 热门:各大网站的 Python 爬虫登录汇总

    原标题:GitHub 热门:各大网站的 Python 爬虫登录汇总 (给数据分析与开发加星标,提升数据技能) 转自:机器之心,GitHub 作者:CriseLYJ 不论是自然语言处理还是计算机视觉,做 ...

  9. 一份超全的Python学习资料汇总

    一.学习Python必备技能图谱 二.0基础如何系统学习Python? 一.Python的普及入门 1.1 Python入门学习须知和书本配套学习建议 1.2 Python简史 1.3 Python的 ...

最新文章

  1. GetWindowThreadProcessId 获得窗口所在进程ID和线程ID
  2. request的setAttribute()怎么用的?
  3. 对比Java和.NET多线程编程
  4. 计算机绘图实训任务书,2012-2cad实训任务书与指导书.pdf
  5. 2015年创业中遇到的技术问题:141-150
  6. ju 单元测试_【单元测试】一年级语文上册 第二单元
  7. python工资一般多少-Python工程师工资多少
  8. 【mysql快速入门】牛客网:查询所有列查询多列查询结果去重查询结构返回限制行数将查询后的列重新命名
  9. JavaScript基础语法介绍
  10. 7. PHP Xhprof
  11. LinkButton(按钮)
  12. python read_csv dtype_Pandas read_csv low_memory和dtype选项
  13. ceb怎么转换成word_win8.1系统将ceb文件格式转换成word的方法
  14. 数字图像处理100问—27 双三次插值( Bicubic Interpolation )
  15. 打造高效研发团队 (3) —— 绩效考核篇
  16. iOS内购实现及测试排查错误列表
  17. AR小项目的制作过程(一)
  18. Q版京剧脸谱来喽——刀马旦
  19. 注册aws账号创建ec2免费套餐
  20. clone别人远程仓库的代码,运行npm install报错npm ERR! Maximum call stack size exceeded

热门文章

  1. iOS dismissViewController到指定页面或dismiss多层
  2. 一款超好的省市区三级联动插件citypicher的使用(数据分从数据库获取或从js文件获取)
  3. 使用 Mailgun 配置 Ghost 邮箱
  4. 计算机专业省赛一等奖有什么好处,省技能大赛一等奖好处都有什么
  5. 自己动手搭建一个简单的网站
  6. 编程php计算行李托运费_飞机行李箱怎么算托运费?
  7. K-Means对红酒数据进行聚类||python
  8. DMIPS, TOPS, FLOPS, FLOPs, GMACs, FMA
  9. 2019 年TI杯全国大学生电子设计竞赛H题模拟电磁曲射炮
  10. windows查看端口占用情况