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. mysql 软件导出导入数据_MySQL 之 导出导入数据
  2. CSP认证 201312-1出现次数最多的数[C++题解]:简单题
  3. 利用AutoHotkey实现Vim和Excel的数据传递
  4. mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍
  5. 训练日志 2019.7.26
  6. SVN快速上手使用(适用于新入职同事)
  7. 前端实战项目:vue+elementUI管理平台
  8. linux安装jdk1.8
  9. LidarSLAM(一):NDT
  10. 南京大学计算机学类,并未开放计算机专业:南京大学2020年强基计划政策分析...
  11. 加油站都需要什么手续_开加油站,需要在哪些地方审批些什么手续?
  12. 求一个n*n矩阵对角线元素之和C语言,求一个n*n矩阵主对角线之和,次对角线元素之和.用指针完成...
  13. oracle商品当日销售排行,Oracle零售 (Retek)品类管理.ppt
  14. 计算机助理职称考试成绩查询,初级成绩可以查询了!
  15. ResNeXt算法详解(resnet提升篇)
  16. html手机和电脑一致,浏览器兼容性(手机、电脑。js、html、css)
  17. RCS(Real-time control systems) 库
  18. 5.5 综合案例1.0-电力采集
  19. python Turtle做一个小动画
  20. 儿童编程 python培训

热门文章

  1. 如何系统地学习 C++ 语言?
  2. educoder实训平台----简历表页面的制作
  3. 广州二本计算机专业大学排名及分数线,二本大学排名及分数线理科
  4. 中学物理教学参考杂志社中学物理教学参考编辑部2022年第21期目录
  5. Fugl-Meyer Assessment(FMA)
  6. 【mysql or条件是否走索引】
  7. ios 学习之 NSPredicate 模糊、精确、查询
  8. 一部电影,一种人生 (会议分享表述用)
  9. Apache Commons Codec介绍
  10. Audio Codec