Python自动化办公Excel模块openpyxl原理及用法解析


Posted in Python onNovember 05, 2020

openpyxl 介绍

openpyxl 是一个直接可用于读写 xlsx 、xlsm、xltx、xltm 文件的 Python 内置库,借助它可以利用 Python 语法对本地 xlsx 文件进行自动化批量操作

先说一下安装部分,如果小伙伴们用 Anaconda 作为 Python 环境的话,openpyxl 无需安装可直接使用;需要安装的话方法也非常简单 pip 工具一行命令即可

pip install openpyxl

xlsx 文件属性

在对 Excel 表格处理之前,需要了解一下 xlsx 文件的几个名词解释及构造

1,Workbook 指的是神什么?

Workbook 名叫工作薄,可以代指一个 xlsx 文件;

2, sheet、cell、row 、col 分别指的是什么?

关于问题2 ,可参考下图(见注释)

Python自动化办公Excel模块openpyxl原理及用法解析

openpyxl 基本命令操作

1, 创建 一个空的 workbook

from openpypl import Wrokbook
from openpyxl.utils import get_column_letter

wb = Workbook()
ws1 = wb.active

一个 Workbook 默认至少含有一个 worksheet ,通过命令 Workbook.active 来获取当前第一个 sheet(也就是第一个 sheet);

2,创建新的 worksheet

ws1 = wb.create_sheet("Mysheet") # insert at the end (default)

ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
# or
ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position

可通过 create_sheet() 命令创建新的 worksheet , create_sheet 默认有两个参数 name、index;

  • name,定义 sheet 的名字;
  • index,来设置插入 sheet 的位置,默认为 None 即新创建的 sheet 插入到最后面;0 代表插入第一个 sheet 的位置;

3,更改 sheet 的名字

一行代码即可

ws.title = 'New Title'

4,更改 sheet 上 tab 背景颜色

ws.sheet_properties.tabColor = "1072BA"

通过修改 Wroksheet.sheet_properties.tabColor 参数即可,需要注意的是这里只接收 RRGGBB 颜色代码;

关于不清楚 sheet tab 背景颜色不清楚是什么的小伙伴,可参考下图;

Python自动化办公Excel模块openpyxl原理及用法解析

5, 返回 Workbook 中所有 sheet 的名字

通过 Workbook.sheetname 命令即可查看

>>> print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']

# 或者用迭代方法

>>> for sheet in wb:
... print(sheet.title)

6,将现有的 worksheets 复制新创建的 workbook 中

可通过 Workbook.copy_worksheet()函数方法

# 将 source 中的worksheet复制到 target 中去

source = wb.active
target = wb.copy_worksheet(source)

需要注意的是,当 workbook 为只读或 只写模式时不可复制;另外只有 cells(值,样式,超链接、注释) 和 特定的 worksheet 属性(维度、格式、属性)可以复制,其他的一些 workbook / worksheet 属性不可复制( Images Charts 等)

7,获取某个 cell 的数据

成功创建完 Workbook、Worksheet 之后,接下来就可以修改 cell(单元格中的内容,Cells 可以通过 worksheet 中特有关键词来获取

>>> c = ws['A4'] # 获取第4行列名为A 单元格中的值
通过赋值命令对其修改

ws['A4'] = 4

openpyxl 中有一个函数 Worksheet.cell() 可修改单元格中的数据,可定位到具体行、具体列进行更改,

d = ws.cell(row = 4,columns = 2,value = 10)

  • row 表示指定行
  • columns 表示指定列
  • value 表示该单元格中需替代的数据值;当此参数不设置时表示只对该 cell 创建内存空间,不赋值

例如

>>> for x in range(1,101):
... for y in range(1,101):
... ws.cell(row=x, column=y)

8,获取多个单元格

8.1 , openpyxl 也可以进行切片操作,来获取多个单元格

>>> cell_range = ws['A1':'C2']

8.2, worksheet 中多行多列数据获取方式相似

>>> colC = ws['C']
>>> col_range = ws['C:D']
>>> row10 = ws[10]
>>> row_range = ws[5:10]

8.3,Worksheet.iter_row() 来获取 sheet 中行列范围,再利用循环迭代获取每一个单元格数据

>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
... for cell in row:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>

8.4,Worksheet.iter_cols() 也可以实现同样功能

>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
... for cell in col:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>

需要注意的时在 read-only 模式中,Worksheet,iter_cols() 方法不能使用

9,只查看 cell 中的 value

9.1,只查看 worksheet 中的 value 时,可通过 Worksheet.values 属性,该属性将迭代 worksheet 中所有行,但返回的仅仅是 cell values

for row in ws.values:
for value in row:
print(value)

9.2,通过 Worksheet.iter_rows() 和 Worksheet.iter_cols() 也可以实现,在函数中加入一个参数 values_only = True 即可返回 cell 的值

>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
... print(row)

(None, None, None)
(None, None, None)

10,读写文件操作

10,excel 文件加载

openpyxl.load_workbook() 函数来打开一个指定本地存储的 xlsx 文件

>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.sheetnames
['Sheet2', 'New Title', 'Sheet1']

10.2,excel 文件存储

Workbook 修改成功后,后创建完成之后,通过Workbook.save(path) 命令即可保存至本地磁盘

>>> wb = Workbook()
>>> wb.save('balances.xlsx')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
Python中序列的修改、散列与切片详解
Aug 27 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
ipython和python区别详解
Jun 26 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Python中用xlwt制作表格实例讲解
Nov 05 #Python
如何利用pycharm进行代码更新比较
Nov 04 #Python
python产生模拟数据faker库的使用详解
Nov 04 #Python
Django配置跨域并开发测试接口
Nov 04 #Python
Python基于Serializer实现字段验证及序列化
Nov 04 #Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 #Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 #Python
You might like
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
Angular实现响应式表单
2017/08/04 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
临床医学专业个人的自我评价
2013/09/27 职场文书
应用电子专业学生的自我评价
2013/10/16 职场文书
艺术应用与设计个人的自我评价
2013/11/23 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
活动总结新闻稿
2014/08/30 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
纪检部部长竞选稿
2015/11/21 职场文书