今天要记录的学习主题是 —— Excel表处理神器:openpyxl库

1 写在前面

之前我想过 要不要写一篇关于如何处理excle表的博客,可是网上一搜都是有太多的文章了。python处理excel表的库,常见的有:xlrd、xlwt、xlwings、openpyxl、win32com、pandas等。

针对python各类第三方库,支持情况如下:

介于网上有这么多精彩的博客,我就一直懒的再去做总结。不过昨天小杰找到我,让我帮他处理下excel表数据。我说你自己百度下不就行了吗?他说网 上的看不懂。(虽然我觉得他肯定是没认真看 )

好吧,既然如此,我就为你写篇博客,让你能快速掌握excel表吧!

openpyxl库

这里我主要介绍openpyxl库的几类常见方法。至于为什么是openpyxl,主要是我自己平时习惯用openpyxl,其他库已经不熟悉了。

1、打开/创建excel文件

from openpyxl import *
# 打开已有test.xlsx表
wb1 = load_workbook('test.xlsx')
# 创建xlsx表,结束后以test.xlsx表保存
wb2 = Workbook()
ws = wb2.active
wb2.save('test.xlsx')

2、选择/创建sheet表

、# 创建test1表
ws1 = wb1.create_sheet('test1')
# 选择test1表
ws2 = wb2['test1']

3、单一单元格访问

# 方法一:
value1 = ws['A4'].value
# 方法二
value2 = ws.cell(row=4, column=2).value

这里一般获取单元格都是为了获取表格中的内容,即cell.value。如果是为了获取其他内容,如行、列、坐标值,可通过以下命令:

# 行
ws.cell(row=4, column=2).row
# 列
ws.cell(row=4, column=2).column
# 坐标
ws.cell(row=4, column=2).coordinate

4、多个单元格访问

# 切片
for row in ws['A1':'C3']:for cell in row:print(cell.value)
# 通过行或者列,下方是行
for row in ws[1:3]:for cell in row:print(cell.value)
# 遍历
for row in ws.iter_rows(min_row=1,max_row=3,min_col=1,max_col=3):for cell in row:print(cell.value)
# 列表转化,下方是行
for row in list(ws.rows)[0:3]:for cell in row:print(cell.value)

初学时,我以为当只取一列或者一行值时,可以只用 一个for循环,后来发现不行,当只有一个循环会报:AttributeError: 'tuple' object has no attribute 'value'

for row in ws['A1':'A4']:print(row.value)
报错:AttributeError: 'tuple' object has no attribute 'value'

另外,在通过行列取值时,ws[1:4]表示第1行开始;但用列表转化后,[1:4]表示从第2行开始。这个细节,需要关注下。

5、单元格数据写入

# 单一单元格写入
ws['A1']='test'
# 一行数据写入
ws.append([1,2,3,4,5])

6、获取表最大行、最大列

ws.max_column
ws.max_row

7、删除工作表

# 方式一
wb.remove(sheet)
# 方式二
del wb[sheet]

8、简单的单元格设置格式

from openpyxl.styles import Font, colors, Alignment# 设置字体、颜色:等线24号,加粗斜体,字体颜色红色
myfont = Font(name='等线', size=24, italic=True, color=colors.RED, bold=True)
ws['A1'].font = myfont
# 设置对齐:垂直居中和水平居中
ws['A1'].alignment = Alignment(horizontal='center', vertical='center')
# 设置行高 :第1行行高
ws.row_dimensions[1].height = 10
# 设置列宽:A列列宽
ws.column_dimensions['A'].width = 10
# 合并单元格
ws.merge_cells('A1:C3')
不过,我觉得单元格格式设置这种,还是直接在excel表上处理来着方便,因为效果直观嘛。

小杰的实际问题

【背景】:原始表格内的数据是按月分将所有人数据统计的,如1月将A/B/C等人的信息进行汇总。

【诉求】:将所有数据按人名进行统计,即将A的1-12月数据汇总到一张sheet表上;并且要保留原表中1-3行的表头。

【困难】:由于人名有上百个,总不能手动复制粘贴每人的数据吧?

示例代码

# coding=utf-8
# @公众号 : "鹏哥贼优秀"
# @Date : 2020/4/9
# @Software : PyCharm
# @Python version: Python 3.7.2from openpyxl import *# 将ws1的i-j行数据写入ws2表
def get_value(ws1,ws2,i,j):for row in list(ws1.rows)[i:j]:res = []for cell in row:res.append(cell.value)ws2.append(res)print('start!')
wb1 = load_workbook('原始数据.xlsx')
wb2 = load_workbook('test.xlsx')
sheets = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
ws_first = wb1[sheets[0]]
names = []
# 获取所有人名
for row in ws_first['C4':'C22']:for cell in row:names.append(row.value)for i,name in enumerate(names):# 保留每张sheet表1-3行的表头ws2 = wb2.create_sheet(name)get_value(ws_first,ws2,0,3)# 获取单人所有月分数据,并写入ws2for sheet in sheets:ws1 = wb1[sheet]get_value(ws1,ws2,i+3,i+4)wb2.save('test.xlsx')
print('end!')

作者:华为云特约供稿开发者 鹏哥贼厉害

快速掌握用python处理Excel相关推荐

  1. 如何在 Python 中将 Excel 文件转换为图像?Aspose快速搞定

    在各种情况下,需要将 Excel 电子表格嵌入到 Web 或桌面应用程序中.在这种情况下的解决方案之一是将 Excel 工作表转换为图像格式.在本文中,将学习如何在 Python中将Excel XLS ...

  2. Python 与 Excel结合

    很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速.但是这样还是有一大缺陷,操作不是可视化的表格,因此对技能要求更高一点.近日,开发者构建了名为 ...

  3. python与excel表格-超简单:用Python让Excel飞起来

    超简单:用Python让Excel飞起来 作者:王秀文;郭明鑫;王宇韬 编著 出版日期:2020年07月 文件大小:20.30M 支持设备: ¥45.00在线试读 适用客户端: 言商书局 iPad/i ...

  4. python导入excel数据-Python数据处理之导入导出excel数据

    欢迎点击上方"AntDream"关注我 .Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况.这里做一个Python处理Excel数据的总结, ...

  5. python填写excel-使用Python填写Excel文件的简便方法

    让我们说我有一个名为test.xlsx的excel文件,它是一个有三张工作簿,其中sheet1被称为hello1,sheet2被称为hello2,而sheet3被称为bye. 现在,我想读取该文件,然 ...

  6. 全网最全 Python 操作 Excel 教程,建议收藏!

    [欢迎关注微信公众号:厦门微思网络] 微思网络(官网):https://www.xmws.cn/ 0 Python Excel库对比 我们先来看一下python中能操作Excel的库对比(一共九个库) ...

  7. python的excel数据分析_excel VS python 谁更适合数据分析?

    我常常会听到这样的问题,"金融分析中,为什么我要学习像python这样的编程语言,甚至使用它超过excel呢?" 在金融领域,python成为炙手可热的分析工具,这几乎已经成为共识 ...

  8. 【好消息】Python和Excel终于可以互通了!!

    点击上方"爱学AI",选择"置顶公众号" 精品文章,第一时间送达 作者:小天真_5eed 链接:https://www.jianshu.com/p/6ecf41 ...

  9. python运行excel高级筛选怎么用_懂点EXCEL就行!教你利用Python做数据筛选(上)...

    前言 Python的数据清洗功能有多厉害,相信不用我说大家都知道了,寥寥几行代码便可以把一份杂乱无章的表格给处理的干干净净.但是python也是不容易入门的,毕竟编程语言要理解和精通也是要花不少功夫的 ...

最新文章

  1. JAVA SE学习day14:XML语言
  2. 从no-code到low-code:企业级hpaPaaS的未来
  3. PHP和Mysql处理IP地址
  4. java中针对数字怎么判断_java如何对输入的数字进行判断
  5. (最短路)HDU Today(hdu2112)
  6. Unity3d之HashSlash学习笔记之(二)--角色基础类的构建
  7. 译者后记 ——《DOOM启示录》读后感(二)
  8. MAX3485硬软件设计实测
  9. 三线压力传感器原理_压力传感器接线图及原理介绍
  10. Python分组百分比排名
  11. 「Jenkins」- No valid crumb was included in request for /ajaxExecutors @20210305
  12. 《时代》杂志:元宇宙将如何塑造我们的未来?
  13. 解决阿里云redis监听6379,配置规则也将6379端口开放,但是外网仍无法连接6379的问题。
  14. 如何设置excel中一部分表格显示但是不打印?
  15. MSM8953配置I2C及SPI
  16. linux 汇编 preserve8,ARM汇编伪指令
  17. linux freetype 安装
  18. 第六天:通过python代码控制越疆机械臂完成抓取投递整个过程
  19. IDEA创建java项目并打包成jar包
  20. 损失函数改进方法总览

热门文章

  1. java电脑_电脑上搭建java开发环境
  2. 数据结构和算法之排序一:归并排序
  3. PHP7 新特性 简介
  4. uva 10891 - Game of Sum
  5. 今天终于可以正常下班了
  6. leetcode 208 python3
  7. c# char unsigned_C 中 char、signed char 和 unsigned char 的区别
  8. 触摸屏开发_Microchip推出新型电容触摸式控制器,加速汽车触摸屏EMI认证
  9. python django前端重构_django修改models重建数据库的操作
  10. 集成电路查询软件_软件著作权登记的法律意义