百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Python自动化:拯救繁琐工作,一键规范汇总表,几秒完成几天工作

toyiye 2024-06-21 19:18 13 浏览 0 评论

你是否也在被重复繁琐的日常文档处理工作困扰?每天都需要手动处理大量的数据,制作各种汇总表,不仅耗时耗力,还容易出错。本文将介绍如何使用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,让工作变得更简单、更高效吧!



相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码