Python自动化:批量处理Excel,按要求筛选出数据并存到新表

我是智能取经人 2024-08-04 03:06:42

摘要: 你是否曾被重复的数据筛选工作折磨得筋疲力尽。现在,借助Python自动化工具,仅需几秒钟就能完成原本需要上千分钟的工作量,彻底告别了枯燥与低效!

引言

在仓库管理这个看似平凡却又充满挑战的岗位上,微信公众号粉丝小李担任着仓库主管的角色。每月,他都要执行一项看似简单却极其繁琐的任务:从过去几年的每月物品领用表中筛选出老板需要的数据,比如:领用数量大于1000的物品信息。这不仅是一项重复性极高的工作,而且手工操作一次表格就需要几分钟,每年的数据表都是按月存储的,操作一年的数据表就需要重复操作12次,而十年的数据就需要重复120次,耗费的时间累积起来高达上千分钟。

1.小李的挑战

小李在后台留言中描述了他的困境:“每年的数据表我都需要重复操作12次,十年的数据就是120次。这不仅让我感到疲惫,而且效率极低,手工操作一次表格就需要几分钟,累计起来就是上千分钟。”

2.传统方法的局限

在没有自动化工具辅助的情况下,小李的工作流程是这样的:

打开每个Excel文件,逐月查找领用数量。手动筛选出领用数量大于1000的物品信息。复制这些信息并粘贴到新的Excel表中。保存并关闭每个文件,然后重复这个过程。

这个过程不仅耗时,而且容易出错,特别是当数据量庞大时,小李需要保持高度的专注力以避免遗漏或错误。

3.Python自动化的解决方案

我们为小李提供了一个Python脚本,这个脚本能够自动按条件筛选数据并保存到新的Excel里。使用pandas库,我们可以快速读取、筛选并合并数据。

import osfrom openpyxl import load_workbookimport pandas as pdfrom openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignmentdef extract_and_select_data(folder_path, dest_dir): try: for filename in os.listdir(folder_path): if filename.endswith('.xlsx'): src = os.path.join(folder_path, filename) os.makedirs(dest_dir, exist_ok=True) dest_file = os.path.join(dest_dir, filename) wb = load_workbook(src) data = {} # 储存所有工作表中满足条件的数据,以工作表名称为键 sheet_names = wb.sheetnames for sheet_name in sheet_names: ws = wb[sheet_name] qty_list = [] # 获取G列的数据,并用enumrate给其对应的元素编号 for row in range(2, ws.max_row+1): qty = ws['G'+str(row)].value qty_list.append(qty) qty_idx = list(enumerate(qty_list)) # 用于编号 # 判断数据是否大于1000,然后返回大于1000的数据所对应的行数 row_idx = [] # 用于储存数量大于1000所对应的的行号 for i in range(len(qty_idx)): if qty_idx[i][1] > 1000: row_idx.append(qty_idx[i][0]+2) # 获取满足条件的数据 data_morethan1K = [] for i in row_idx: data_morethan1K.append( ws['A'+str(i)+":"+'I'+str(i)]) data[sheet_name] = data_morethan1K thin = Side(border_style="thin", color="000000") # 定义边框粗细及颜色 wb = load_workbook("模板.xlsx") ws = wb.active for month in data.keys(): ws_new = wb.copy_worksheet(ws) # 复制模板中的工作表 ws_new.title = month # 将每个月的数据条数逐个取出并写入新的工作表 # 按数据行数计数,每行数据对应9列,所以每行需分别写入9个单元格 for i in range(len(data[month])): ws_new.cell( row=i+2, column=1).value = data[month][i][0][0].value ws_new.cell( row=i+2, column=2).value = data[month][i][0][1].value ws_new.cell( row=i+2, column=3).value = data[month][i][0][2].value ws_new.cell( row=i+2, column=4).value = data[month][i][0][3].value.date() ws_new.cell( row=i+2, column=5).value = data[month][i][0][4].value ws_new.cell( row=i+2, column=6).value = data[month][i][0][5].value ws_new.cell( row=i+2, column=7).value = data[month][i][0][6].value ws_new.cell( row=i+2, column=8).value = data[month][i][0][7].value ws_new.cell( row=i+2, column=9).value = data[month][i][0][8].value # 设置字号,对齐,缩小字体填充,加边框 # Font(bold=True)可加粗字体 for row_number in range(2, ws_new.max_row+1): for col_number in range(1, 10): c = ws_new.cell( row=row_number, column=col_number) c.font = Font(size=10) c.border = Border( top=thin, left=thin, right=thin, bottom=thin) c.alignment = Alignment( horizontal="left", vertical="center", shrink_to_fit=True) wb.save(dest_file) except Exception as e: print(e)if __name__ == "__main__": import time s_t = time.time() extract_and_select_data("data", "历年领料数量大于1K") e_t = time.time() print(f"用时{e_t-s_t}s")4.效果展示

通过上述脚本,小李现在可以在20秒钟内完成之前需要上千分钟的工作。这个自动化工具不仅提高了效率,还减少了因手动操作导致的错误。更重要的是,它让小李能够将更多的时间和精力投入到更有创造性和战略性的工作上。

结语

Python自动化不仅仅是编程技巧的展示,更是一种工作方式的革新。它能够帮助我们从重复性劳动中解放出来,让我们有更多时间去做更有创造性的工作。小李的故事证明了自动化的力量,希望他的经历能够激励更多的人去探索和利用Python自动化办公的无限可能。

如果你也像小李一样,面临着重复性工作的苦恼,或者对Python脚本的编写有任何疑问,欢迎在评论区留言,我们将为你提供一对一的技术支持!

本文为原创技术文章,转载请标明出处。如果你喜欢本文,别忘了点赞、转发和关注我们的公众号,获取更多技术干货!

数海丹心

大数据和人工智能知识分享与应用

132篇原创内容

公众号

0 阅读:2

我是智能取经人

简介:感谢大家的关注