【办公自动化】在Excel中按条件筛选数据并存入新的表

简介: 【办公自动化】在Excel中按条件筛选数据并存入新的表

一、Python处理Excel


  • Python处理Excel的好处


  1. 开源库支持:Python 有许多开源库(例如 openpyxl、xlrd、xlwt、pandas 等)可以用于读取、写入和操作 Excel 文件,这些库丰富而强大,支持各种 Excel 格式,包括 .xls 和 .xlsx。


  1. 数据处理能力:Python 具有强大的数据处理能力,可以轻松地从 Excel 文件中提取、转换和操作数据,包括数据清洗、筛选、合并、计算和可视化。


  1. 自动化:Python 可以用于自动化 Excel 任务,例如批量处理多个 Excel 文件,根据特定条件过滤和修改数据,自动生成报告和图表,以及自动发送电子邮件等。


  1. 与其他库集成:Python 可以与其他数据处理和分析库(如 NumPy、pandas、Matplotlib 等)无缝集成,使您能够在 Excel 数据上执行更复杂的分析和可视化。


  1. 跨平台性:Python 是跨平台的,可以在 Windows、Mac 和 Linux 等操作系统上运行,因此可以轻松地处理来自不同平台的 Excel 文件。


  1. 社区支持和文档:Python 社区非常庞大,有大量的文档、教程和示例代码可供学习和参考,帮助您解决与 Excel 处理相关的问题。


  1. 可扩展性:如果标准库中的功能不足以满足您的需求,您还可以使用其他第三方库来扩展 Python 的 Excel 处理功能,或者编写自定义脚本来执行特定的操作。


  • Python处理Excel主要有三大类库


  1. openpyxl:


优势:openpyxl 是一个功能丰富的库,用于读取、写入和编辑 Excel 文件,特别适用于处理 .xlsx 格式的文件。它支持大多数 Excel 功能,包括工作表的创建、修改、格式化,单元格内容的读取和写入,以及图表的创建。

适用场景:如果您需要与 Excel 2007及更高版本的 .xlsx 文件进行交互,openpyxl 是一个很好的选择。


  1. xlrd 和 xlwt:


xlrd 用于读取 Excel 文件,而 xlwt 用于创建和写入 Excel 文件,主要支持 .xls 格式。

优势:虽然这两个库在处理 .xlsx 文件方面不如 openpyxl 强大,但它们在处理早期版本的 Excel 文件(.xls 格式)方面非常有用,而且它们简单易用。

适用场景:当您需要与较早版本的 Excel 文件进行交互时,或者需要在读取和写入操作中保持兼容性时,可以考虑使用这些库。


  1. pandas:


优势:pandas 是一个强大的数据分析库,可以轻松地处理各种数据,包括从 Excel 文件中读取数据。它可以读取和写入 Excel 文件,支持 .xls 和 .xlsx 格式,并提供了丰富的数据处理和分析功能。

适用场景:pandas 特别适合在数据分析、数据清洗、数据转换和数据可视化等任务中处理 Excel 数据。它使得在 Python 中进行复杂的数据操作变得容易。


  • 开发环境


操作系统:使用windows


Python版本:系统中需要安装Python3.8以上的版本


开发工具:选择 jupyter notebook


二、在Excel中按条件筛选数据并存入新的表


技术工具:


Python版本:3.9


代码编辑器:jupyter notebook


  老板想要看去年每月领料数量大于1000的数据。手动筛选并复制粘贴出来,需要重复操作12次,实在太麻烦了,还是让Python来做吧。磨刀不误砍柴工,先整理一下思路:


1. 读取原表,将数量大于1000的数据所对应的行整行提取(如同在excel表中按数字筛选大于1000的)

2. 将提取的数据写入新的Excel表

#1.获取满足条件的数据
from openpyxl import load_workbook
wb = load_workbook("每月物料表.xlsx")
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 


   以上,我们把满足条件的12个月的数据提取并存入字典`data`,其键为对应的月份,比如“1月”,值就是满足条件的各行的数据。我们把“每月物料表”的G列对应的数据提取,存入列表`qty_list`,其中前10个数据是如下这样的。

qty_list[:10]


 然后需要使用`enumerate`函数给这个列表的数据加上索引,以便在跟1000比大小的时候定位满足条件的那些数据的对应在Excel表中的行数。加上索引之后的列表是如下这样的,索引从0开始累加。

qty_idx[:10]


然后,再新建一个列表`row_idx`,用于储存“领料数量”大于1000的数据所对应的行号。此处用到`if`语句进行判断,只将“领料数量”大于1000的数据所对应的行号加上2存入列表。为什么要加2,是因为`range`函数是从0开始取的,然后工作表首行是字段名,第二行开始才是数据。如下结果显示了满足条件的数据对应的行数。  

row_idx[:5]


        然后新建列表`data_morethan1K`用于存储以上行号对应的整行数据。比如`ws['A1:I1']`就指第一行从A列到I列的所有单元格数据。最后将数据存入`data`字典中。数据结构如下所示。

data_morethan1K[1]

data['1月']

len(data['1月'])

data['1月'][0][0][1].value


数据提取完成后,就可以开始写入数据了。打开模板,按月从`data`字典中提取数据。并根据数据结构找到层级关系,将其中的各行的数据写入各单元格。写完之后,设置一下字号、边框即对齐方式,保存数据。到此收工!

#2.写入获取的数据
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment
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 
    #将每个月的数据条数逐个取出并写入新的工作表
    for i in range(len(data[month])): #按数据行数计数,每行数据对应9列,所以每行需分别写入9个单元格
        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("每月(大于1K).xlsx")

华丽的结果如下:


三、往期推荐


Python提取pdf中的表格数据(附实战案例)

使用Python自动发送邮件

Python操作ppt和pdf基础

Python操作word基础

Python操作excel基础

使用Python一键提取PDF中的表格到Excel

使用Python批量生成PPT版荣誉证书

使用Python批量处理Excel文件并转为csv文件

目录
相关文章
|
11天前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第七讲之自动筛选
杨老师课堂之Excel VBA 程序开发第七讲之自动筛选
14 1
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的办公自动化管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的办公自动化管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
2月前
|
Python
办公自动化-Python如何提取Word标题并保存到Excel中?
办公自动化-Python如何提取Word标题并保存到Excel中?
52 2
|
22天前
|
XML Java 测试技术
《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
【6月更文挑战第8天】本文介绍了Java中操作Excel的工具,包括POI和JXL。POI支持处理Office 2003及以下的OLE2格式(.xls)和2007以上的OOXML格式(.xlsx)。而JXL只能处理2003版本的Excel文件。文章详细讲解了如何下载和使用JXL库,并给出了一个简单的Java代码示例,展示如何读取2003版Excel文件中的数据。在实际项目中,由于JXL对新版本Excel的支持限制,通常推荐使用POI。
37 5
|
22天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
【6月更文挑战第9天】本文介绍了如何使用Java处理Excel文件中的不同数据类型,包括日期、数字、布尔值和标签(常规字符串)。文章提供了两个示例,分别使用JXL库和Apache POI库来读取Excel文件。
20 1
|
24天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
【6月更文挑战第7天】本文介绍了在Java自动化测试中如何操作Excel数据。文章提到了当测试数据存储在Excel文件时,可以使用Apache的POI库来读写Excel。POI提供了对OLE2(.xls)和OOXML(.xlsx)格式的支持,比JXL库功能更全面。文章还详细讲解了如何下载和添加POI库到项目中,以及准备测试用的Excel文件。最后,给出了一个简单的Java代码示例,演示如何读取Excel文件的内容。
20 1
|
5天前
|
存储 Python
自动化办公的python代码
自动化办公的python代码
13 0
|
2月前
|
JavaScript Java 测试技术
基于ssm+vue.js的办公自动化管理系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js的办公自动化管理系统附带文章和源代码设计说明文档ppt
21 4
|
2月前
|
JavaScript Java 测试技术
基于ssm+vue.js的小型企业办公自动化系统的设计和开发附带文章和源代码设计说明文档ppt
基于ssm+vue.js的小型企业办公自动化系统的设计和开发附带文章和源代码设计说明文档ppt
28 4
|
12天前
|
数据采集 存储 JavaScript
深入Node.js:实现网易云音乐数据自动化抓取
深入Node.js:实现网易云音乐数据自动化抓取