你是否也在被重复繁琐的日常文档处理工作困扰?每天都需要手动处理大量的数据,制作各种汇总表,不仅耗时耗力,还容易出错。本文将介绍如何使用Python自动化办公技术,特别是针对处理汇总明细表并生成指定格式的汇总表的需求,来彻底摆脱这种困境。通过实际案例,我们将展示Python如何通过自动化手段解决这一繁琐工作,提高工作效率。
故事背景
月黑风高夜,打工加班时,在古老的国企大楼里,有一个忙碌的身影,那就是我们的朋友李经理。作为中层领导,他每天都需要处理大量的领料明细数据。不幸的是,公司的ERP系统还停留在“远古时代”,只能导出明细表,却无法自动生成汇总表。这意味着李经理每天都要手动从系统中导出数据,再一个个Excel表格打开,进行繁琐的汇总工作。
每天,他都要面对成百上千的领料记录,每个记录都要仔细核对,然后分类汇总。不仅如此,他还需要从每个记录中提取出日期、时间等信息,计算每个部门的领料次数,最后再将这些数据填入到新的Excel表格中。这样的工作重复、繁琐,让李经理苦不堪言。
明确需求
系统记录了每个部门的领料情况,现在要求汇总所有部门的领料明细,计算并加总各部门每日领料次数。各部门领料明细如下,需要抓取的数据在红色虚线框里。但是“业务类型”字段中的“备注”数据不需要。
汇总后的数据要求在原表基础上新增5列,数据来源都是原表。其中领取日期、时间需要在原表的“时间”字段中截取。领取次数要求加总,比如2018年1月13日这天领了三次料,则这三次领料记录对应的“领取次数”都填上“3”。“领料明细汇总表”的文件名按“领料明细汇总表”加上日期、时间命名,比如“领料明细汇总表2024-05-24 10.30.11.xlsx”。
针对以上需求,我们决定利用Python的自动化能力,为他编写一个程序,实现一键生成规范汇总表的功能。
Python自动化实现步骤
第一步:提取并处理数据
首先,我们需要从ERP系统中导出的.xls
文件中提取数据。由于openpyxl
不支持.xls
格式,我们选择了xlrd
库来读取数据。在读取过程中,我们遇到了时间格式不一致的问题,但通过if
语句和xlrd.xldate.xldate_as_datetime
函数,我们成功地将所有时间数据转换为了统一的格式。
接下来,我们按照要求提取了需要的字段,并对“领料日期”和“领料时间”进行了拆分。同时,我们排除了“业务类型”为“备注”的数据,以确保汇总表的准确性。
最后,我们计算了每天的领料次数,并将所有数据按照日期进行分类存储,得到了一个包含所有需要信息的字典。
import xlrd
import datetime
def Get_data(file):
wb = xlrd.open_workbook(file)
ws = wb.sheets()[0]
data = {}
for row in range(7, ws.nrows-2):
dept = ws.cell(2, 16).value
dept_id = ws.cell(3, 16).value
dt = ws.cell(row, 0).value
if type(dt) is float:
date_time = xlrd.xldate.xldate_as_datetime(dt, 0)
else:
date_time = datetime.datetime.strptime(dt,'%Y-%m-%d %H:%M:%S')
business = ws.cell(row, 2).value
model = ws.cell(row, 3).value
qty = ws.cell(row, 4).value
unit_price = ws.cell(row, 6).value
price = ws.cell(row, 8).value
reward = ws.cell(row, 9).value
discount = ws.cell(row, 11).value
balance = ws.cell(row, 13).value
location = str(ws.cell(row, 15).value).strip()
operator = ws.cell(row, 17).value
date = date_time.date()
time = date_time.time()
info_list=[dept,dept_id,date_time,business,model,qty,unit_price,price,reward,discount,
balance,location,operator,date,time]
data.setdefault(date,[])
if info_list[3] != "备注":
data[date].append(info_list)
for key in data.keys():
for i in data[key]:
i.append(len(data[key]))
return data
读取所有的明细数据,进行批量处理
import os #用于获取目标文件所在路径
path=os.getcwd()+"\\记录\\" # 文件夹绝对路径
files=[]
for file in os.listdir(path):
if file.endswith(".xls"): #只获取".xls"后缀的文件
files.append(path+file)
因为汇总后的Excel文件需要用当前日期和时间命名,所以再定义一个函数`Get_current_time`获取当前时间。调用一下,就获得我们设定格式的日期时间了。
import time
def Get_current_time():
time_stamp = time.time() # 当前时间的时间戳
local_time = time.localtime(time_stamp) #
str_time = time.strftime('%Y-%m-%d %H.%M.%S', local_time)
return str_time
第二步:新建Excel文件,写入数据,调整格式并保存
在得到所有需要的数据后,我们使用了openpyxl
库来创建一个新的Excel文件,并将数据写入其中。我们按照指定的格式设置了单元格的样式,并隐藏了不需要的列。
为了方便管理,我们还按照“领料明细汇总表”加上日期、时间的格式命名了文件,如“领料明细汇总表2024-05-24 10.30.11.xlsx”。
from openpyxl import Workbook
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment #设置单元格格式
thin = Side(border_style="thin", color="000000")#定义边框粗细及颜色
title = ['部门', '部门编号', '时间', '业务类型', '品种', '数量', '单价', '金额', '额外值',
'调整', '剩余', '库位', '操作员', '领取日期', '领取时间', '领取次数']
wb = Workbook()
ws = wb.active
ws.merge_cells("A1:P1") #合并首行单元格
ws.cell(1,1).value = "领料明细汇总表"
ws.cell(1,1).font = Font(name=u'黑体',bold=True,size=18)
ws.row_dimensions[1].height = 22.2 #设置首行行高
ws.cell(1,1).alignment = Alignment(horizontal="center", vertical="center") #设置对齐
ws.append(title) #写入字段行
#写入各部门领料的数据
for file in files:
data = Get_data(file)
for key in data.keys():
for i in data[key]:
ws.append(i)
#设置字号,对齐,缩小字体填充,加边框
#Font(bold=True)可加粗字体
for row_number in range(2, ws.max_row+1):
for col_number in range(1,17):
c = ws.cell(row=row_number,column=col_number)
c.font = Font(size=9)
c.border = Border(top=thin, left=thin, right=thin, bottom=thin)
c.alignment = Alignment(horizontal="left", vertical="center")
#设置列宽
col_name= list("ABCDEFGHIJKLMNOP")
col_width = [8, 8, 16, 8, 16, 8, 8, 9.8, 8, 8, 8, 11, 8.3, 9, 8, 8]
for i in range(len(col_name)):
ws.column_dimensions[col_name[i]].width = col_width[i]
#分组隐藏列
ws.column_dimensions.group('I','K',hidden=True)
ws.column_dimensions.group('N','O',hidden=True)
wb.save(f"领料明细汇总表{Get_current_time()}.xlsx")
成果展示
经过我们的努力,李经理现在只需要运行一下我们编写的程序,就可以自动生成规范的汇总表了。这不仅大大节省了他的时间,还提高了数据的准确性。现在,他可以有更多的精力去处理其他重要的事情,而不再被繁琐的汇总工作所困扰
结语
通过这个故事,我们再次看到了Python在自动化办公中的强大能力。只要我们善于利用这些工具,就可以轻松解决很多看似繁琐的问题,提高工作效率。让我们一起拥抱Python,让工作变得更简单、更高效吧!
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/78953.html