现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法长时间做某种重复性的枯燥操作。想象这样一个场景,我们有个几千行的表要填,需要根据姓名输入其对应的身份证号,但之前我们已经做过一个类似的表,同样的一些人的姓名跟身份证号是完整的,那么我们就需要通过一个个查找姓名,然后把身份证号码复制到我们当前要做的表里去。
当我日复一日重复着这些操作的时候,我都很想有一个自动化工具来完成这种操作,把做为人的我从这种非人的折磨里解脱出来,最后还是想到了python,因为这样我能很少的关注语言内部的一些细节,从而专注于解决这个问题。
python有很多专门处理excel的第三方库,我选择了openpyxl,因为支持微软最新excel的格式xlsx,其官网地址为https://openpyxl.readthedocs.io/en/latest/index.html,官网上的教程很全面,有其他需求的可以好好研究一番。
其安装命令为 (在线安装)或者 。
openpyxl的操作可以分四步,第一步载入现有workbook或者创建workbook到内存,分别使用
第二步就是操作excel表中的sheet了,通过Workbook()创建的workbook默认活动的sheet名称为Sheet,可以通过python交互命令行进行验证。
第三步就是操作sheet中的cell了。需要注意的是,一个cell的位置由它所在的列跟行共同决定,比如一个cell,它在A列,并在第三行,就可以通过 来访问。cell还具有row跟column属性,cell.row跟cell.column的数据类型如下图所示。
特别注意当用read_only模式载入workbook时,cell.row跟cell.column都是int对象。cell.column记录的是cell所在列离第一列的偏移数,并非workbook中真正代表列数的大写字母,比如“A”。
最后一步把更改保存,这里要注意,当要保存的表在别的软件(microsoft office或者wps)中打开时,保存操作会报错。
实现需求
新建一个getinfofromexcel.py文件,用你习惯的编辑器来编辑,首先需要引入openpyxl库中的loadworkbook模块。可以使用load_workbook载入已经存在的excel表。
我们的目的是从源excel表中提取信息并批量复制到目标excel表中,所以我们首先定义一些变量。
将源表跟目标表载入内存,方便下一步操作这两个表。
从前面已经定义的sheet名称跟标题行数获取源表跟目标表的标题行:
操作源表标题行,获取我们想要的信息:
操作目标表标题行,获取我们想要的信息:
现在我们已经得到所有需要的信息,该到实际粘贴数据的时候了。
最后保存目标workbook就可以了。
注意:如果excel中标题行有合并居中的话,脚本会报错,一种办法就是去掉合并居中;另一种就是在原标题行下再插入一行新的行再把原标题行的内容粘贴进去,用插入的这一行作为标题行。
领取专属 10元无门槛券
私享最新 技术干货