新闻动态
2025-03-06 21:20 点击次数:145
今天,小王还没上班就到单位了。他发现同事刘姐比他来得还早,刘姐在电脑前沉思着……出于好奇,小王凑过去看了一下。
原来,大早上单位老大给刘姐布置了一项紧急任务。
紧急任务
老大要刘姐上班前,将历年来单位的子项目完成情况汇总一下,找出未完成的任务,上午一上班就开会讨论。
问题分析
王姐平时将每个子项目完成情况都汇总在了Excel表格中。下图是单位总的项目列表,记录了总的项目列表及完成情况,项目是根据项目id进行区分的。
当项目完成后,刘姐也及时将完成的子项目添加到了已完成的表格中。
但问题是,历年来单位承接的项目有900多个,如下表:
刘姐记录在案的已完成的项目也有190多个,如下表:
如何从总表中剔除已完成的项目,并将未完成的项目单独筛选出来呢?
听了刘姐的哭诉,小王决定帮助她,不到5分钟搞定了这个问题(后附解决该问题的源代码)。
小王的思路
这其实是一个简单的Excel读取数据的案例,对于小王来讲太简单了。小王快速理清思路,用Python解决了这个问题。
首先,读取Excel文件中“总表”和“已完成”的项目id数据。代码如下:
# 读取abc数据xls_data_r = openpyxl.load_workbook('abc.xlsx')# 获取已完成项目id列表ws_done = xls_data_r['已完成']id_done = [_id.value for _id in ws_done['A']]
然后,遍历总表中的id值,判断该项目是否已完成。如果未完成,则存入列表中。代码如下:
# 存储写入的数据insert_data = []# 遍历总表for row in xls_data_r['总表']:(tab)if row[0].value not in id_done:(tab)(tab)insert_data.append((row[0].value, row[1].value))
最后,将insert_data列表中的数据写入到一个新的Excel文件中。代码如下:
# 创建一个Excel写入未完成项目xls_data_w = openpyxl.Workbook()ws_w = xls_data_w.create_sheet("未完成项目汇总")# 写入数据ws_w.cell(row=1, column=1).value = '项目id'ws_w.cell(row=1, column=2).value = '项目完成情况'for num, row in enumerate(insert_data):(tab)ws_w.cell(row=num+2, column=1).value = row[0](tab)ws_w.cell(row=num+2, column=2).value = row[1]xls_data_w.save('未完成项目.xlsx')
搞定,'未完成项目.xlsx'交给刘姐即可。
想要获取源代码的小伙伴,私信“qcExcel”即可,感谢您的关注。
上一篇:打造“强磁场” 扩大“朋友圈”