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之有容乃大的list(2)
Sep 15 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
PyTorch-GPU加速实例
Jun 23 Python
python线程里哪种模块比较适合
Aug 02 Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 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
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序入门教程
2016/11/18 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python 字符串常用函数详解
2019/09/11 Python
python tkinter组件摆放方式详解
2019/09/16 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
会计与审计专业大专生求职信
2013/10/03 职场文书
电工工作职责范本
2014/02/22 职场文书
高中班主任评语大全
2014/04/25 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
德能勤绩工作总结
2015/08/11 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
解析Java异步之call future
2021/06/14 Java/Android
MySQL之select、distinct、limit的使用
2021/11/11 MySQL
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript