如何利用python将excel表格中筛选出来的每一份数据各自另存为新的excel文件?

  • 1.问题描述
  • 2.解决过程
    • 2.1 问题分析:
    • 2.2 解决思路
  • 3.运行结果

1.问题描述

最近在处理一堆工作上的excel表格中,总是遇到一批重复性的操作问题。为了节约时间,提高效率,尝试用python代码来处理这一类重复性的excel操作问题。

如上图所示:
假如现在有这样一张原始数据表格原始数据.xlsx,存在大量的数据(这里仅列举部分做演示)。我们需要做的工作是将每一个公司的数据单独筛选出来,然后将筛选出来的每一个公司的数据重新保存为一个新的excel表格。

2.解决过程

2.1 问题分析:

假如数据量很大,按上述过程将存在大量重复性的操作。我们计划使用python来处理这类问题,那么需要考虑如下问题:

  • 首先,寻找python对应的库来操作读取和写入excel文件。
  • 第二,对于所有公司,每个公司只取值一次存入列表。
  • 第三,定义一个函数,该函数参数为某公司,通过该函数可以获取某公司对应的所有行的数据。
  • 第四,将公司列表的每一个值作为参数传入函数,通过循环遍历所有的公司,然后每调用一次函数做一次保存。

2.2 解决思路

第一,经过查阅文档。发现使用openpyxl库可以解决excel文件读写问题。

from openpyxl import load_workbook,Workbook
# 这里使用pycharm环境,与.py放入同一路径,因此加载路径省略
# load_workbook用于加载表格,Workbook用于创建表格
workbook = load_workbook('原始数据.xlsx')
sheet = workbook.active

第二,每个公司的名称只取一次存入列表

#先取出所有公司码
totalcorp = sheet['B']
corp = []
for co in totalcorp:corp.append(co.value)#通过一个循环删除重复的公司代码
i = 0
while i < len(corp):if corp.count(corp[i]) > 1:pos = corp.index(corp[i])temp1 = corp[:pos+1]temp2 = corp[pos+1:]j = 0while j < len(temp2):if temp2[j] == corp[i]:temp2.pop(j)j = j-1j = j+1corp = temp1+temp2i+=1# 删除表头,也就是第一行
corp.pop(0)

第三,这里我们先定义一个函数用于获取指定公司的所有行的数据。

def corptoexcel(str1):#参数str1用于传入每一个公司名称#指定公司所在列,即B列,同时创建一个空的列表corploc = sheet['B']row_corp = []for cell in corploc:if cell.value == str1:row_corp.append(cell.row)#创建新的excel文件,打开new_workbook = Workbook()new_sheet = new_workbook.active# 创建和原始数据 一样的表头(第一行)header = sheet[1]header_corp = []for cell in header:header_corp.append(cell.value)new_sheet.append(header_corp)# 从旧表中根据公司名称提取符合条件的行,并遍历所有单元格取值,以列表形式写入新表for row in row_corp:data_corp = []for cell in sheet[row]:data_corp.append(cell.value)new_sheet.append(data_corp)# 最后保存,使用占位符保存为对应公司的名称.xlsxnew_workbook.save('%s.xlsx'%str1)

第四, 将第二步获取的公司列表的每一个值作为参数传入第三部定义的函数,再通过循环遍历每一个公司,每调用一次函数做一次保存。

#遍历每一个公司名称,调用上面的函数。
k = 0
while k < len(corp):corp1 = corp[k]corptoexcel(corp1)k+=1

3.运行结果

完整的代码如下:

from openpyxl import load_workbook,Workbook
# 这里使用pycharm环境,与.py放入同一路径,因此加载路径省略
workbook = load_workbook('原始数据.xlsx')
sheet = workbook.active# 先取出所有公司码
totalcorp = sheet['B']
corp = []
for co in totalcorp:corp.append(co.value)# 通过一个循环删除重复的公司代码
i = 0
while i < len(corp):if corp.count(corp[i]) > 1:pos = corp.index(corp[i])temp1 = corp[:pos + 1]temp2 = corp[pos + 1:]j = 0while j < len(temp2):if temp2[j] == corp[i]:temp2.pop(j)j = j - 1j = j + 1corp = temp1 + temp2i += 1# 删除表头,也就是第一行
corp.pop(0)def corptoexcel(str1):#参数str1用于传入每一个公司名称#指定公司所在列,即B列,同时创建一个空的列表corploc = sheet['B']row_corp = []for cell in corploc:if cell.value == str1:row_corp.append(cell.row)#创建新的excel文件,打开new_workbook = Workbook()new_sheet = new_workbook.active# 创建和原始数据 一样的表头(第一行)header = sheet[1]header_corp = []for cell in header:header_corp.append(cell.value)new_sheet.append(header_corp)# 从旧表中根据公司名称提取符合条件的行,并遍历所有单元格取值,以列表形式写入新表for row in row_corp:data_corp = []for cell in sheet[row]:data_corp.append(cell.value)new_sheet.append(data_corp)# 最后保存,使用占位符保存为对应公司的名称.xlsxnew_workbook.save('%s.xlsx'%str1)k = 0
while k < len(corp):corp1 = corp[k]corptoexcel(corp1)k+=1

如上图所示:
通过运行toexcel.py,在对应目录下面将自动生成每一个公司的所有行的数据表格。

如何利用python将excel表格中筛选出来的每一份数据各自另存为新的excel文件?相关推荐

  1. 从两张Excel表格中筛选相同的值

    从两张Excel表格中筛选相同的值 (表一) (表二) 1.将两个表格的编号跟姓名分别合并到同一单元格当中 两个单元格之间用&拼接 =A2&B2 (表一) =A2&B2 (表二 ...

  2. 计算机算最大值如何操作,Excel表格中如何通过函数判断数据中的最大值

    Excel表格中如何通过函数判断数据中的最大值 腾讯视频/爱奇艺/优酷/外卖 充值4折起 Excel是我们常用的一款数据处理软件,深受大家的欢迎,是我们学习办公的助手,有的朋友想知道怎么通过函数判断数 ...

  3. 怎么一次性将Excel表格中指定文本整行数据删除

    今天跟跟大家分享一下怎么一次性将Excel表格中指定文本整行数据删除 1.如下图我们想要快速将汇总行数据整行删除掉 2.首先我们点击表格任意一单元格,同时按下Ctrl+A全选表格区域 3.然后点击下图 ...

  4. excel怎样修改表格时间和计算机一制,Excel表格中如何自动生成记录数据的日期和时间...

    前几天有人问我:Excel表格在录入信息时如何在日期单元格自动生成日期时间? 在录入表格的时候,我们经常需要录入时间,比要填写出入库时间,为了减少录入的工作量,可以把日期设置为自动生成. 例如我们在B ...

  5. Python处理2个表格。从源表格中筛选符合条件的数据,写入到dst表格中

    需求介绍:两个表格:srcData表格和dstData表格.将src表格中同一时刻的数据写入dst表格对应的行中. #!/usr/bin/env python # -*- coding: utf-8 ...

  6. excel表格下拉选项怎么设置_excel怎么筛选?excel表格中筛选怎么用?

    excel表格筛选功能的应用技巧教程: 一.过滤一系列数据 1.选择范围内的任何单元格. 2.选择数据 > 过滤器. 3.选择列标题箭头 筛选箭头 . 4.选择文本过滤器或数字过滤器,然后选择一 ...

  7. 利用EXCEL表格中Power Map实现大数据可视化操作

    一.打开数据表格 首先打开我们事先准备好的2017年世界各国和地区GDP排名数据表格,里面有排名栏.国家地区栏.2016GDP栏.2017GDP栏.GDP增速栏.人均GDP栏以及人口栏,样式如下: 二 ...

  8. 怎样在excel表格中画斜线并打字_一日一技丨Excel斜线表头如何制作?标题、表头的4个技巧...

    来源 | 迅捷PDF转换器 (ID:xjpdf6)作者丨小小迅 「一日一技」是每天的知识分享专栏,一是分享一些PDF.Office.办公小技巧:二是抽取小可爱们在留言中的疑问并解决.希望对大家有所帮助 ...

  9. Excel表格如何筛选出重复的数据?

    听起来是个很简单的事,但真操作起来就不那么简单了,一不留神就可能丢失数据.有没有安全一点的方法呢?下面是我常用的方法,虽然啰嗦或者笨了一点,但安全有效. 1.如下图一组数据,里面有重复的内容. . 2 ...

最新文章

  1. struts2点滴记录
  2. Hadoop2.0 YARN
  3. echarts label加边框_关于echarts的lines中的label的设置 -问答-阿里云开发者社区-阿里云...
  4. Git异常:Cannot delete the branch 'test1' which you are currently on
  5. 中等职业计算机等级考试,中等职业学校计算机等级考试题库(含答案):EXCEL
  6. android photopicker怎么修改状态栏,有没有办法阻止UIImagePickerController更改状态栏样式?...
  7. 11. Android框架和工具之 Logger(调试代码)
  8. java程序员面试技术_java程序员面试应该具备的一些基本技能
  9. python中的画布控制_使按钮在画布上工作(tkinter)
  10. 我对骨骼动画的理解(最精减的骨骼动画类)
  11. 本地化OElove婚恋交友系统源码+基于PHP开发
  12. 鸟哥的linux私房菜 简书,《鸟哥的linux私房菜》学习笔记
  13. 迅雷精简版绿色优化版
  14. 水下通信方式以及WSN(无线传感器网络
  15. 如何提升营销工作ROI?跨渠道营销了解一下
  16. The SPECIALIST Lexicon API
  17. springboot动态添加log4j2的Appender
  18. 数据处理时如何解决噪声数据?
  19. 《将博客搬至CSDN》_se7en3_新浪博客
  20. Ubuntu安装sysstat

热门文章

  1. 【频率计】基于FPGA的频率计设计
  2. 在Ubuntu 18.04上安装man中文帮助手册的方法手记
  3. Spring事务管理-tx:advice标签
  4. 开源开放 | 面向家庭常见疾病的知识图谱(东南大学)
  5. php拼接全景图,Opencv使用Stitcher类图像拼接生成全景图像
  6. 一文入门车载以太网,吐血整理!不看后悔!
  7. android4.2屏幕录像,android——使用自带录屏工具进行屏幕录像
  8. Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
  9. 咸鱼ESP32实例—RTC
  10. WinSCP(5.11.2)绿色便携版,开源SCP/SFTP客户端