代码杂记[壹]-将多个Excel信息汇总到一个Excel表格里

  • ‘壹’——将多个Excel信息汇总到一个Excel表格里
    • 0.代码目的
    • 1.代码实现
    • 2.报错 FileNotFoundError和查找文件所在路径
    • 3.openpyxl报错UserWarning: Call to deprecated function
    • 4.openpyxl报错InvalidFileException(一)
    • 5.openpyxl报错InvalidFileException(二)
    • 6. 有的时候明明有某个人的文件,却没有复制到汇总文件中过去
  • 写在[壹]最后

从今天开始,我打算开展一个小小的计划,就是每次在写代码的时候都把写代码的原因、经过和结果记录下来。这主要有几个作用:一则是激励自己有事没事多写写代码,避免业务能力生疏了,二则是将所学用于实践,不让“学习编程”停留于课堂,三则是每次写代码,尤其是调用新的包/函数,或完成新的任务时都会遇到些许困难,要查很多资料才能解决,于是我想把困难(bug),产生原因和解决方法记录下来,或许其他人可以得到帮助,也提醒自己之后遇到相似的问题可以有对应解决的方法。

‘壹’——将多个Excel信息汇总到一个Excel表格里

0.代码目的

工作和学习中,我们总会收集统计一些人的相同信息,比如疫情期间,某位员工春节期间是否有跨省移动,以及相应时间和路径;又如学生返校的时间、方式、联系方式等。这些工作共同的特点是,我们会下发一个Excel文件,然后很多人都填同一个表格(如下图[汇总表格.xlsx]),但是我们最终又要把每个人的表格汇总到一个大表格里变成集成在一起的一条条信息。

这个过程的传统操作方法就是,找一个人打开每个人的Excel把对应信息复制粘贴到大的汇总表里。当人数较多时,这个操作就要重复很多次,效率很低。而这种简单重复性工作,完全可以用计算机来实现。同时我们还需要统计,谁提交了信息,谁没提交,如果人工统计很耗时费力。本代码就是为了解决这项工作。

1.代码实现

我们应用openpyxl来处理Excel文件,用os来对电脑中的文件进行操作。包的详细介绍和安装方法可以参考其他文章,在此只针对解决此问题进行记录。
在这之前我们需要把所有需要被统计的人员名单复制粘贴到汇总表格里面(在我的例子中,粘贴到从第三行开始的第二列),方便统计谁还没有提交。

## 打开要汇总的表格
from openpyxl import load_workbook #准备读写Excel的包
wb = load_workbook('汇总表格.xlsx')#要汇总的表格
ws = wb['在校学生']#load汇总表格的那个Sheet,在我的文件中叫‘在校学生’,也可以在这个地方按顺序选取第一个sheet,ws=wb[0]
#print(ws.cell(2,3).value)这行代码的意思是输出wb表格的ws这个sheet的第二行第三列的数据的值,可以check前面的操作是否成功##打开收集的员工/学生提交的每一个文件并把其中的数据粘贴都汇总表格里
import os#准备操作电脑文件的包
for filename in os.listdir('/Users/MEGAN/Desktop/所有数据'):#对路径中的每一个文件操作,循环得到这个文件夹下每一个文件的名字if filename == '.DS_Store':#①这里后面解释continuedirectory = './Desktop/所有数据/'#来源文件的文件夹路径file = filename#要打开的文件名file_to_find=directory+file#整个文件的文件名##这里打开每一个文件tem_wb = load_workbook(file_to_find)#打开这个文件tem_ws = tem_wb['在校学生']#选定这个文件的第一个sheettem_name = tem_ws.cell(3,2).value#存这个文件的人名plus = 0#②后面解释if tem_name == None:tem_name=tem_ws.cell(4,4).valueplus = 1#print(tem_name) 这行可有可无,有就是输出一下已经操作过谁的文件了##这里开始复制粘贴工作for i in range(30):#30是所有需要统计的人数总数row = i+3if ws.cell(row,2).value == tem_name:#粘贴到这个人名对应的那一行for col in range(2,14):#从第2-13列数据都粘贴过去ws.cell(row,col,value=tem_ws.cell(3+plus,col).value)break##都操作结束后记得保存
wb.save('汇总表格.xlsx')

基本方法介绍完毕,后续解释可能会遇到的问题及解决方法

2.报错 FileNotFoundError和查找文件所在路径

首先,注意直接文件名方式load的文件必需要在和此python文件在一个文件夹的文件,通常在根文件夹。os.getcwd()函数可返回当前文件夹
其次,如果要找其他文件夹的文件就必须在文件名前面加路径。找文件路径的方法,MacBook可以通过Ctrl/Command + I,或者打开文件夹后文件 → 显示简介,有可能得到的是中文路径,只需复制中文路径再粘贴到“文本编辑”里即可获得英文路径。复制粘贴到代码中即可。
最后, FileNotFoundError出现的主要原因就是,1文件名抄错了,2文件夹路径设置出错。注意,各级文件夹之间需要有/,文件夹和文件名之间也需要有/。
注,这里只介绍实现目的的个人认为最直接简单的方法,其他方法的参考链接我会备注在引用中,可参考。

https://www.zhihu.com/question/22883229

3.openpyxl报错UserWarning: Call to deprecated function

用了比较古老的函数,比如ws=wb.get_sheet_by_name(“在校学生”)。有可能也能实现但是会报错,建议换为比较简单直接的新鲜函数,即第一部分中介绍的,用名称或编号直接索引。

参考:https://blog.csdn.net/captain811/article/details/79648005

4.openpyxl报错InvalidFileException(一)

第一部分代码①部分的解释:
报错内容大概是openpyxl does not support file format, please check you can open it with excel,后面还会列举这个包支持的excel文件格式后缀。
最开始看到可能是很困惑的,文件夹里明明都是符合要求的excel文件为什么还会报错。其实是MacBook自动生成了一个/些隐藏文件,在循环文件夹中所有文件的时候也会处理那些隐藏文件,导致出问题,程序不能正常运行。
如果输出文件夹中所有文件的名字,会看到一个叫“.DS_Store”的文件。他也参与了循环,但是他不能被这个包处理,也不应该被处理,所以我们应该在循环中,如果遇到他就跳过循环中后续操作(continue),就可以解决这个问题了。
如果电脑中没有“.DS_Store”文件依然出现了这个报错,那可能是引用文件名的时候出现了一些问题,比如错误地写成了Excel工作名字。

关于“.DS_Store"的其他文章 https://www.jianshu.com/p/46f22a29b78d

5.openpyxl报错InvalidFileException(二)

遇到类似的报错我习惯性先输出文件夹中所有文件的名字,看有没有奇怪的东西出现。
有一次报错时我发现了一个文件的名字前面带有"~$",这是office文件的缓存文档,原因是我打开了这个文件夹中的某一个文件没有关闭,在代码处理这个文件夹中每一个文件的时候就会遇到问题。解决方法就是关闭打开的这个word/excel,这个"~$"开头的缓存文档会自然消失,bug就解决了。

6. 有的时候明明有某个人的文件,却没有复制到汇总文件中过去

第一部分代码②部分的解释:
有些人填表习惯很独特,不直接填在标题下第一行(可能会在第二行或第三行),所以我们直接去标题下第一行找他的数据,就找不到,于是我们需要检测一下这一行是否有数据,没有就找下一行,这样问题就解决了,第二部分代码正是这个用处。如果数据量大有的人会填在其他位置的话,也可以些更复杂点的循环来解决。第一部分的代码就是假设,大家要不然填在Excel的第三行(标题下第一行),要不然就填在第四行,不会有其他的了。

写在[壹]最后

  1. 希望还有[贰]
  2. 希望[贰]在不久后
  3. 希望写[贰]的时候可以有多几张图/截图

代码杂记[壹]-将多个Excel信息汇总到一个Excel表格里相关推荐

  1. excel几个表合成一张_快速将多个excel表合并成一个excel表

    应用场景:有很多张excel,而且excel表里面的结构基本一样,如何快速将这些excel合并在一个excel页面,便于后期分析和统计 技术实现:利用excel表的宏计算实现. 注意:金山的WPS没有 ...

  2. 快速将多个excel表合并成一个excel表

    应用场景:有很多张excel,而且excel表里面的结构基本一样,如何快速将这些excel合并在一个excel页面,便于后期分析和统计 技术实现:利用excel表的宏计算实现. 注意:金山的WPS没有 ...

  3. 如何快速把多个excel表合并成一个excel表(不熟悉vba及公式的人)

    对于不熟悉Excel公式,不熟悉vba的人,要如何按需要快速把多个excel表合并成一个excel表? 对于Excel的合并,很多需要通过vba变成,但对于不熟悉vba编程的人,如何合并呢?给大家推荐 ...

  4. 如何将多个Excel表合并成一个Excel表

    如何将多个Excel表合并成一个Excel表 每天需要和Excel办公软件打交道俄小伙伴,他们的电脑桌面上总是布满密密麻麻的Excel表,这样看上去非常的凌乱,其实我们完全可以将其中类别相同的Exce ...

  5. 花名册信息填写另一个exceL简历表格里

    '两天不睡着完成4万余名学生的基本信息表格 Option Explicit Dim i Private Sub Command1_Click() Timer1.Enabled = True Timer ...

  6. datatables页面合并两个列_python实现多个excel合成合并为一个excel

    一.环境准备 python在执行save保存excel时可能报错原因:# 每次执行前new_file_name都必须是最新的excel,也就是从原模板中直接复制的文件,如果你先执行了程序插入数据进模板 ...

  7. excel表格行列显示十字定位_取消excel单元格十字定位(excle表格里的十字对准)

    EXCEL表格里十字怎么画,四周可以写字的? 合并单元格呀! 在EXCEL表格中箭头变成十字形的是怎么回事啊? 重新做一遍系统即可 excel表格中的选择一个单元格就回出现十字叉 是什么工具?谢谢. ...

  8. excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...

    Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...

  9. 多个excel快速合并到一个excel的多个sheet

    亲自调试通过 1.创建一个空白excel,选中sheet1 右键--查看代码.进入VBA模式 2.插入--->模块 3.在编辑宽输入下列代码 源码: '功能:把多个excel工作簿的第一个she ...

最新文章

  1. OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
  2. CLLocationCoordinate2D 用法 和一个最隐蔽的错误
  3. Linux命令删除某目录下的所有.svn文件
  4. python平均成绩计算异常处理_7-10 jmu-python-异常-学生成绩处理基本版 (15 分)
  5. catch句子_「实用英文」知道 catch on 是什么意思吗?catch 精选短语合集
  6. PHP 解析xml(包含非英文字符)
  7. 借助Web技术,桌面用户界面将保持活跃
  8. php接受post接受不到数据,PHP $_POST接受不到数据,但$_GET可以接受数据
  9. python 文本相似度_python实现余弦相似度文本比较
  10. 为什么Unreal 4引擎能轻易实时渲染出vray要花半天才能渲染出的场景
  11. 基于JAVA+SpringBoot+Mybatis+MYSQL的企业员工考勤管理系统
  12. linux密码忘记grub登陆,CentOS7 忘记密码后通过修改grub进系统重置密码
  13. golang高级部分
  14. k2p拆机ttl刷breed_【1.10】k2p A版 22.10.3.42;22.10.3.38;拆机TTL刷BREED;B版 21.6.25.20刷机 图文教程...
  15. ApacheCN 翻译/校对/笔记整理活动进度公告 2019.9.13
  16. 高德地图--水波雷达动画
  17. 陀螺仪加速度计MPU6050
  18. win10分辨率不能调整_win10无法调整分辨率显示灰色的解决方法
  19. 计算机启动很慢,win7开机慢解决方法
  20. python基础入门(变量)

热门文章

  1. 「Python爬虫系列讲解」八、Selenium 技术
  2. Cannot retrieve repository metadata (repomd.xml) for repository:epel
  3. SEO网站外链全自动在线发布工具PHP源码
  4. 曾哥传(第五话)皇城大乱斗
  5. mybatis缓存原理
  6. mysql 同一张表直接用sql查交集数据
  7. 用了这么久的支付宝,这几个隐藏功能你还不知道?
  8. [乐意黎] 笔记本WIFI设置成固定IP
  9. event事件冒泡之cancelBubble和stoppropagation的区别
  10. [C++基础]-入门知识