

import xlrd
import PySimpleGUI as sg
# 拿到每个群所有的业务总数
def qun_number(lst):
group_list = []
# 群面去重复
group = set(lst)
# -------------------------------
# 对其数据所用 没有实质用途
# # 集合转为列表
# group_list = list(group)
# len_max = 0
# for element in group_list:
# if len(element) > len_max:
# len_max = len(element)
# max_num = len_max
# -------------------------------
# 拿到所有业务总数
sum_count = len(lst)
sg.cprint('今天完成' + str(sum_count) + '单', key='-mlt-', text_color='red')
# 循环拿到每个群 的业务量
for i in group:
cha = 8 - int(len(i)) # 只为对齐好看 没有实质用途
num1 = lst.count(i)
group_str = i + '-' * cha + str(num1) + '单'
sg.cprint(group_str)
group_list.append(group_str)
return group_list, sum_count
# 获取每个每个人的业务量
def person_number(lst1, lst2, total_list):
list_1 = [] # 存放便利出来群群名+人名
list_2 = [] # 存放集合去重后的数据
for i in range(len(lst1)):
# 组合群名+人名 添加列表
list_1.append(str(lst1[i]) + '-' + str(lst2[i]))
# 的 群名+人名的 唯一值的列表
all_group = list(set(list_1)) # 集合去除重复
for j in all_group:
# 利用函数计数
num = list_1.count(j)
str1 = j + '----共' + str(num) + '单'
list_2.append(str1)
# list_2 = sorted(list_2)
# 分级显示 便利结果
for g in total_list:
sg.cprint('------------------------------------')
sg.cprint(g, colors='red') # 显示一个群的总业务量
for x in list_2:
if g.split('-')[0] == x.split('-')[0]:
sg.cprint(x) # 显示群里每个人的业务量
# 主函数入口
def main():
new_file = values['In1']
if new_file == '':
sg.cprint('文件目录为空......')
# 获取工作簿
work_book = xlrd.open_workbook(new_file)
# 方法二 拿到指定工作表按名字 注意名字第一个字母大写
sheet_1 = work_book.sheet_by_name('Sheet1')
# 获取第一列的所有数据 群名
group_name = sheet_1.col_values(0)
# # 获取第二列的所有数据 人名
name = sheet_1.col_values(1)
group_str, sum_count = qun_number(group_name)
person_number(group_name, name, group_str)
sg.theme('GrayGrayGray') # 设置主题颜色
layout = [
[sg.T('数 据 汇 总', font=('楷体', 18), pad=((200, 0), (0, 0)))],
[sg.T('选择文件:'), sg.In(size=(25, 1), key='In1'), sg.FileBrowse(button_text='打开文件')],
[sg.B('数据统计', button_color='red', pad=((220, 0), (0, 0)))],
[sg.Multiline(size=(55, 30), key='-mlt-', reroute_cprint=True, do_not_clear=True)],
]
window = sg.Window('汇总', layout, font=('楷体', 14))
while True:
event, values = window.read()
if event is None:
break
if event == '数据统计':
window['-mlt-'].update('')
try:
main()
except Exception as e:
sg.cprint(e)
sg.cprint('发生未知错误\n检查文件是否为空,格式填写是否正确\n文件是否打开\n电子表格的后缀名必须.xls')
window.close()