目录

1 背景

2 相关资料

3 Excel结构

4 Openpyxl的总结

4.1 搭建环境

4.2 导入工具包

4.3 读取文件

4.4 按行读取,按列读取

4.5 读取值

4.6 访问和修改cell

4.7 合并单元格

4.8 存储

4.9 其它

4.9.1 文件格式

4.9.2 拷贝值和样式


1 背景

前两天家里人有一个工作要做:把一张从系统里导出来的excel表分割成多个长度不统一的部分,而且分割以后需要提取里面的姓名等分别分发给对应的人。观察表格以后我发现每一个分割部分都有重复的标题,而且需要提取的姓名等信息的位置相对标题是固定的,于是想到写代码来识别标题进行分割,然后再提取姓名分别导出。

先是查到excel自带的VBA,但是感觉不太习惯这个代码风格,又查到在python里用pandas,xlrd,openpyxl等可以处理excel,于是进行尝试。最后选定了调用比较方便、交互很人性化的openpyxl,大概花了两个多小时解决了问题,把每个人的表格都分别导出,而且姓名等信息作为文件名,结果还不错。

下面就稍微总结一下。

2 相关资料

  1. 手册:这是有人在简书上翻译的openpyxl的手册,很短小精炼,看完后表格的基本操作都能做了。
  2. 官方文档:如果要深入学习或使用高级功能还是要看文档

看相关资料前我建议我们先把excel的结构回顾一下,这样操作起来会更得心应手。

3 Excel结构

之所以说openpyxl交互人性化是因为它的结构就是根据excel的结构进行设计的。首先来回顾一下excel:

图中是一个新建excel文件打开后的样子,我们可以把它想象成一本账本:

每一个excel文件是一个workbook(一本账本)

每一个workbook里可以创建多个worksheet(在每一本账本里有很多页)

每一个worksheet里有很多行rows和很多列columns,行标用数字表示,列标用字母表示

行与列的交叉处是一个单元格cell(一条记账),每个cell有很多的属性:

编号:用cell所处行列唯一表示,即column+row

值:每个cell中记录的内容

数据类型:字符、数字、日期等

样式:底色、字体等

4 Openpyxl的总结

4.1 搭建环境

因为阅读的对象可能不是专业编程人员,所以介绍一下基本环境的搭建,搭环境一共三步:

安装python环境

安装pip

通过pip来安装openpyxl工具包

第一步装环境的时候可以顺便安装一个IDE(集成开发环境),比如Pycharm,Anaconda等,这样安装工具包可以直接在IDE里进行。

4.2 导入工具包

首先在python文件中导入openpyxl进行使用,导入workbook对于大多情况已经够用了

import openpyxl as xl
from openpyxl import workbook

4.3 读取文件

将.xlsx文件转化为workbook变量wb,并提取workbook中的第一个sheet存到变量ws,这样可以对worksheet做很多我们在excel里的操作了

filename = "full/path/of/xlsx"
# load file
wb = xl.load_workbook(filename)
# get the first sheet
ws = wb1.worksheets[0]

4.4 按行读取,按列读取

用worksheet的iter_rows()和iter_cols()方法可以读取出每一行/列,再在每一行/列中循环读取就可以获取每一个cell,这时候print出来的是该cell的编号信息。

# read by row
for row in ws.iter_rows():for cell in row:print(cell)# read by column
for col in ws.iter_cols():for cell in col:print(cell)

4.5 读取值

获取cell后只用调用cell的方法_value就可以获取cell中的内容

# read by row
for row in ws.iter_rows():for cell in row:print(cell._value)# read by column
for col in ws.iter_cols():for cell in col:print(cell._value)

4.6 访问和修改cell

可以直接通过给出序号的方式直接访问和编辑单元格,序号的规范是列号(字母)+行号(数字),如"A1"

# c1 get A1
c1 = ws['A1']# c2 get A1
c2 = ws.cell(row=1, column=1)# eidt A2
ws['A2'] = 1

4.7 合并单元格

合并单元格也是excel中非常常见的操作,在excel中只需要拖选中要合并的框然后点击合并即可;openpyxl同理,拖动的步骤由切片完成,切片方法是'起始cell编号:终止cell编号 ',合并调用的是worksheet的函数merge_cells

# merge A1 to F1
ws.merge_cells('A1:F1')

4.8 存储

存储的对象是workbook,当对worksheet进行操作后直接存储其所属的workbook,存储的格式仍然是xlsx

filename_save = "path/of/save"
wb.save(filename_save)

4.9 其它

还有两点想要补充说明一下:

4.9.1 文件格式

目前Openpyxl可以读取的是office2003以后的excel格式即.xlsx,因此如果表格是旧格式.xls的需要将文件另存一下,切记不要直接修改后缀名,可能导致文件不可用

4.9.2 拷贝值和样式

这个问题是我在做的时候遇到的,当从一个worksheet拷贝value到另一个worksheet时,其样式不会跟随拷贝。如果要连带样式一起拷贝需要加入如下语句:

from copy import copy# copy 1 to 10
start = 1
end = 10
# max column
mc = ws.max_column
#
for i in range(start, end + 1):for j in range(1, mc + 1):# reading cell value from source excel filesource_cell = worksheet.cell(row=i, column=j)# writing the read value to destination excel filetarget_cell = ws_save.cell(row=i-start+1, column=j)# copy style, comment and hyperlinkif source_cell.has_style:target_cell._style = copy(source_cell._style)target_cell.font = copy(source_cell.font)target_cell.border = copy(source_cell.border)target_cell.fill = copy(source_cell.fill)target_cell.number_format = copy(source_cell.number_format)target_cell.protection = copy(source_cell.protection)target_cell.alignment = copy(source_cell.alignment)if source_cell.hyperlink:target_cell._hyperlink = copy(source_cell.hyperlink)if source_cell.comment:target_cell.comment = copy(source_cell.comment)# copy valuetarget_cell.value = source_cell._valuetarget_cell.data_type = source_cell.data_type

请注意的是cell无法拷贝列宽和行高,列宽行高要通过worksheet的column_dimensions和row_dimensions属性来修改,可以参考这篇文章,另外可以查到一些自适应宽高的方法。

欢迎交流和指正。

使用Python工具包Openpyxl进行Excel处理相关推荐

  1. Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 Python使用openpyxl读取excel文件中数据 Python使用openpyxl往excel文件中写入数据 Python使用openpyx ...

  2. python使用openpyxl处理excel表格数据

    python使用openpyxl处理excel表格数据 前言 一.安装openpyxl包 二.读取excel数据 1. 获取excel表格的页码 2. 获取excel表格某一行的数据 3. 获取exc ...

  3. 【Python基础】python使用openpyxl操作excel

    1.openpyxl库介绍 openpyxl最好用的python操作excel表格库,不接受反驳: openpyxl官网链接:openpyxl官网 openpyxl只支持[.xlsx / .xlsm ...

  4. Python之openpyxl处理excel数据

    1.前言 在测试工作中,我们不可避免的就是跟测试数据打交道,那么说到数据,我们又不可避免的要跟excel打交道.在工作中,用excel存储测试数据以及测试结果是非常非常常见的.其实,python中有好 ...

  5. python用openpyxl向excel中添加数据(文字,数据,图片等)

    利用openpyxl向excel内添加数据 excel也是利用openpyxl生成的, 并且命名为当前电脑系统时间 import os import openpyxl as op# 创建excel并返 ...

  6. Python—使用openpyxl打开Excel的一个小坑

    最近打开了一个看似普通的Excel,里面的标题行有内置换行.但是用pandas打开发现这个标题行里面是带着\r的,但是用openpyxl打开,发现这个标题行里面带的就不是\r,而是被转换成了_x000 ...

  7. Python中用OpenPyXL处理Excel表格

    更多内容,请访问我的 个人博客. 前言 用 Python 处理Excel表格的几个常规库: xlrd 用来读 xlwt 用来写 xlutils 用于做复制.筛选等针对文档文件的操作 这些库都不如 Op ...

  8. python使用openpyxl操作excel

    目录 1 Excel表格 1.1 表格述语 1.2 表格示例 2 python打开及读取表格内容 2.1打开Excel表格并获取表格名称 2.2 通过sheet名称获取表格 2.3 获取表格的尺寸大小 ...

  9. python 使用 openpyxl 处理 Excel 教程

    目录 前言 一.安装openpyxl库 二.新建excel及写入单元格 1.创建一个xlsx格式的excel文件并保存 2.保存成流(stream) 3.写入单元格 三.创建sheet工作表及操作 四 ...

最新文章

  1. 理解First Chance和Second Chance避免单步调试
  2. Python中类的定义与使用
  3. crash工具解析_Linux 后台开发常用调试工具
  4. java json.pasent_来自CSV的带有id parent(Python)的JSON树
  5. 任正非:做芯片砸钱不行 得砸数学家、物理学家、化学家
  6. python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】
  7. mysql like in 数组_Web前端学习教程之常用的MySQL优化技巧
  8. 怎么给php下拉框默认选中
  9. 将分支指针移动到不同的提交而不签出
  10. JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,
  11. HashMap的实现原理看这篇就够了,图文源码详解,深入浅出简单易懂
  12. 将Linux可执行文件变成可执行命令
  13. 【报告分享】连锁经营行业全面费用管理数字化白皮书-亿欧汇联易(附下载)
  14. 思科模拟器叫什么_思科在过30年都证明了自己一直都是全球第一的网络公司
  15. 2020暑期牛客多校训练营第九场(A)Groundhog and 2-Power Representation(高精度)
  16. 【牛尔】【小p】这些美容强男的超级秘籍!!!丝般肌肤毛孔看不见,清透小面颊,丝滑小脸蛋儿,你难道不想拥有吗————【收缩毛孔的最佳方法】(一夜之间6万浏览量,大师的感召力和信服力就是强啊!)
  17. SAP CO-PC物料标准价格更改方案
  18. Karl Guttag:Magic Leap 2光学解析,部分指标超HoloLens 2
  19. PG使用pg_settings表查看参数的生效条件
  20. C++ vector的用法总结(整理)

热门文章

  1. 论文阅读笔记- Dremel
  2. 几何画板自定义工具_可能是全网最详细:12 款 iPad 绘画工具横评,总有一款适合你...
  3. 自上而下解读ncnn系列(1):加载param模型和bin文件前向传播
  4. ARM Cortex-M处理器详解
  5. 学计算机专业的买游戏本能用吗,2020好用的游戏本有哪些_2020适合高考后购买的游戏本...
  6. JAVA射线_射线法 - 萌德真帅 - 博客园
  7. QQ微信可以登录但打不开网页
  8. FilterConfig的作用
  9. 2022年圣诞节 | matlab实现炫酷的圣诞树
  10. 《用户至上:用户研究方法与实践(原书第2版)》一2.4 理解用户