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

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

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

#1.获取满足条件的数据from openpyxl import load_workbookwb = load_workbook("每月物料表.xlsx")data = {} #储存所有工作表中满足条件的数据,以工作表名称为键sheet_names = wb.sheetnamesfor 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][8, 72, 72, 8, 16, 93, 56, 63, 80, 30]

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

qty_idx[:10][(0, 8), (1, 72), (2, 72), (3, 8), (4, 16), (5, 93), (6, 56), (7, 63), (8, 80), (9, 30)]

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

row_idx[:5]

Out[4]:[317, 550, 551, 556, 557]

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

data_morethan1K[1]((<Cell '12月'.A550>,<Cell '12月'.B550>,<Cell '12月'.C550>,<Cell '12月'.D550>,<Cell '12月'.E550>,<Cell '12月'.F550>,<Cell '12月'.G550>,<Cell '12月'.H550>,<Cell '12月'.I550>),)

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

#2.写入获取的数据from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignmentthin = Side(border_style="thin", color="000000")#定义边框粗细及颜色

wb = load_workbook("模板.xlsx")ws = wb.activefor 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")

华丽的结果如下:

如果您有需要处理的问题,可发邮件到我邮箱:donyo@qq.com,一起探讨解决方案。

微信公众号(Python操作Office软件高效工作)输入“源文件”提取所有源文件及资料。

向内存中连续存入数据_实例35_在Excel中按条件筛选数据并存入新的表相关推荐

  1. excel如何晒出重复数据_怎么筛选出excel中重复数据

    本文收集整理关于怎么筛选出excel中重复数据的相关议题,使用内容导航快速到达. 内容导航: Q1:Excel的数据怎么筛选一列中重复的数据 假如1在A2单元格,在B2单元格输入公式, =IF(COU ...

  2. python匹配excel相同的数据_利用Python实现Excel的文件间的数据匹配功能

    我们知道Excel有一个match函数,可以做数据匹配. 比如要根据人名获取成绩 而参考表sheet1的内容如下: 要根据sheet1匹配每人的成绩,用Excel是这么写 index(Sheet1!B ...

  3. Java对比两张Excel表的数据_比较两个Excel表格并提取重复数据

    目标: 搜索并比较两个字段E列(表2)到E列(表1)将表2中的重复值返回到表3 显示和突出显示工作表1和2上的重复值突出显示 从工作表2复制重复条目,然后添加到工作表3 如果E列(表2)= E列(表1 ...

  4. python基础一 -------如何在列表字典集合中根据条件筛选数据

    如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) 1 ...

  5. sql多字段求和降序排序_快速入门:Excel中如何按照多个字段排序

    Excel排序怎么排?我们经常使用表格来搜集记录信息.如果我们表格中的数据过多,而且没有进行数据的归纳总结.那应该是件让人头大的事儿,为了获得更加准确的数据,我们需要对Excel中的内容进行排序.排序 ...

  6. excel取消保存微软_如何在Microsoft Excel中按日期排序

    excel取消保存微软 When you're trying to look at a set of data in a spreadsheet over time, it's often helpf ...

  7. python多条件筛选数据-Python实现多条件筛选目标数据功能【测试可用】

    本文实例讲述了Python实现多条件筛选目标数据功能.分享给大家供大家参考,具体如下: python中提供了一些数据过滤功能,可以使用内建函数,也可以使用循环语句来判断,或者使用pandas库,当然在 ...

  8. R语言对dataframe行数据进行筛选(row selection)、筛选数据行、基于条件筛选数据行

    R语言对dataframe行数据进行筛选(row selection).筛选数据行.基于条件筛选数据行 目录

  9. python中nlp的库_用于nlp的python中的网站数据清理

    python中nlp的库 The most important step of any data-driven project is obtaining quality data. Without t ...

最新文章

  1. python 打开文件-Python 读文件
  2. matlab远程桌面访问:License Manager Error - 103
  3. 《白鹿原》金句摘抄(四)
  4. java ArrayList源码分析(转载)
  5. mysql 客户端命令行_强大的工具 MySQL客户端命令行应用技巧
  6. 小米无线网卡linux驱动下载,Linux 下小米WIFI 的无线网卡驱动
  7. 桥接文件中file not found
  8. VBA编程之ODBC连接数据库
  9. 获取并处理中文维基百科语料
  10. EA周报|刘强东案 9 月 11 日开庭听证;小鹏员工承认上传特斯拉源代码到个人账户;传新 iPhone 将抛弃刘海使用真全面屏...
  11. 轻博客之点点推他模式分析
  12. iOS计算器:采用NSDecimalNumber 进行表达式的精准计算(计算字符串数学表达式)【案例:折扣计算器(完整demo源码)】
  13. 一次用Python制作电影字幕的尝试
  14. python bunch制作可导入数据_Python bunch包_程序模块 - PyPI - Python中文网
  15. 转手动档汽车的换挡技巧
  16. 以Vultr服务器为例,用Xshell远程连接CentOS7服务器
  17. 南宁发展重点向南 五象湖标志性建筑“五象塔”落成
  18. 论文阅读:A Survey on Transfer Learning
  19. http响应里如何设置图片名称和image格式
  20. Hive(数据仓库)数据压缩、数据存储格式

热门文章

  1. 程序发布以后,如何修改安装URL
  2. 动态规划法实现最优二叉搜索树
  3. Codevs 1205 单词反转(Vector以及如何输出string)
  4. Webpack 配置摘要
  5. [原创]CAN总线数据计算器V1.01
  6. ContentPresenter
  7. 解决离线安装依赖包的方法
  8. 【实践】多场景下的搜索词推荐算法及在腾讯的应用实践.pdf(附下载链接)
  9. 【报告分享】我国数字基础设施建设现状及推荐措施研究报告.pdf(附下载链接)...
  10. 【报告分享】中国都市圈发展报告:城镇化白皮书5.0.pdf(附下载链接)