python使用openpyxl操作excel的方法步骤


Posted in Python onMay 28, 2020

一 前言

知识追寻者又要放大招了,学完这篇openpyxl第三方库,读者将会懂得如何灵活的读取excel数据,如何创建excel工作表;更新工作表,删除工作表;是不是感觉很强大,留下赞赞吧!!

二 openpyxl常用属性函数

常用函数或者属性 说明
openpyxl.load_workbook() 加载excel工作本
Workbook.active 获得默认sheet
Workbook.create_sheet() 创建sheet
Workbook.get_sheet_names() 已过时, 获得所有sheet名称
workbook.sheetnames 获得所有sheet名称
workbook.get_sheet_by_name(name) 已过时获得指定的sheet对象
workbook[sheetname] 获得指定的sheet对象
workbook.copy_worksheet(soure) 复制sheet
sheet[cell] 获取单个单元格
sheet.cell(self, row, column, value=None) 获取单个单元格
sheet[cell,cell] 访问多个单元格
sheet.iter_rows(min_row, max_col, max_row) 返回多行,用于访问多个单元格
sheet.iter_cols(min_row, max_col, max_row) 返回多列,用于访问多个单元格
sheet.rows 获取所有行
sheet.columns 获取所有列
cell.value 获取属性值
sheet.merge_cells() 合并单元格
sheet.unmerge_cells() 取消合并单元格

三 读取excel

读取整体流程如下

  1. 加载工作本
  2. 获取标签页
  3. 获取指定区域的单元格
  4. 获取单个单元格对象
  5. 通过单元格对象获取值

3.1 准备工作

创建一个名为zszxz.xlsx excel文件;其中标签sheet名为zszxz; 列A B C 如下;

id num name
1 100 zszxz
2 101 smile
3 102 kitty
4 103 wolf
5 104 cloud
6 105 water

3.2 安装

支持操作excel和图像

pip install openpyxl
pip install pillow

3.3 获取所有标签页名称

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获得所有标签页
sheet_names = workbook.get_sheet_names()
print(sheet_names)

输出

['zszxz']

正确的获取方式

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获得所有标签页名称
print(workbook.sheetnames)

3.4 获取指定标签页对象

不建议通过方法获得标签页对象,建议通过属性方式获取;

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获得指定的sheet
sheet = workbook.get_sheet_by_name('zszxz')
print(sheet)

输出

<Worksheet "zszxz">

正确的获取方式

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
print(sheet)

输出

<Worksheet "zszxz">

当然读者也可以通过循环工作本方式获取sheet,不赘述;

3.5 复制sheet

在已有的sheet上可以进行复制一个副本;

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
# 复制sheet
cp_sheet = workbook.copy_worksheet(sheet)
print(cp_sheet)

输出

<Worksheet "zszxz Copy">

3.5 获取指定一个单元格对象

指定获取A1单元格对象

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
# 获取指定单元格
cell = sheet['A1']
print(cell)

输出

<Cell 'zszxz'.A1>

方式二

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
# 获取指定单元格
cell = sheet.cell(row=1, column=1)
print(cell)

输出

<Cell 'zszxz'.A1>

3.6 访问多个单元格

访问单元格获取单元格对象;

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
cells_range = sheet['A1':'C1']
for cells in cells_range:
  for cell in cells:
    print(cell)

输出

<Cell 'zszxz'.A1>
<Cell 'zszxz'.B1>
<Cell 'zszxz'.C1>

方式二

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
# 获取指定范围的行
row = sheet.iter_rows(min_row=1, max_col=3, max_row=1)
for cell in row:
  print(cell)

输出

(<Cell 'zszxz'.A1>, <Cell 'zszxz'.B1>, <Cell 'zszxz'.C1>)

sheet.iter_cols(min_row, max_col, max_row)通用的道理,不赘述

3.7 获取全部行

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
# 获取所有行
for row in sheet.rows:
  print(row)

输出

(<Cell 'zszxz'.A1>, <Cell 'zszxz'.B1>, <Cell 'zszxz'.C1>)
(<Cell 'zszxz'.A2>, <Cell 'zszxz'.B2>, <Cell 'zszxz'.C2>)
(<Cell 'zszxz'.A3>, <Cell 'zszxz'.B3>, <Cell 'zszxz'.C3>)
(<Cell 'zszxz'.A4>, <Cell 'zszxz'.B4>, <Cell 'zszxz'.C4>)
(<Cell 'zszxz'.A5>, <Cell 'zszxz'.B5>, <Cell 'zszxz'.C5>)
(<Cell 'zszxz'.A6>, <Cell 'zszxz'.B6>, <Cell 'zszxz'.C6>)
(<Cell 'zszxz'.A7>, <Cell 'zszxz'.B7>, <Cell 'zszxz'.C7>)

同理 sheet.columns获取所有列不再赘述

3.8 获取值

cell.value获取属性值

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获取sheet对象
sheet = workbook['zszxz']
cells_range = sheet['A1':'C1']
for cells in cells_range:
  for cell in cells:
   # 获取属性值
    print(cell.value)

输出

id
num
name

四 写入 excel

4.1 写入文本

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 写入文本形式
sheet['A1'] = 'zszxz666'
# 读取
print(sheet['A1'].value)
# 保存
workbook.save(path)

输出

zszxz666

4.2 写入数字

# -*- coding: utf-8 -*-
import openpyxl
import datetime

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 写入值数字形式
sheet['A2'] = datetime.datetime(2010, 7, 21)
print(sheet['A2'].value)
# 保存
workbook.save(path)

输出

2010-07-21 00:00:00

4.3 写入公式

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 写入公式
sheet['A3'] = '=SUM(1, 1)'
print(sheet['A3'].value)
# 保存
workbook.save(path)

输出

=SUM(1, 1)

实际中A3单元格值为2

4.4 合并单元格

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 合并单元格
sheet.merge_cells('A2:D2')
# 保存
workbook.save(path)

4.5 取消合并单元格

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 取消合并单元格
sheet.unmerge_cells('A2:D2')
# 保存
workbook.save(path)

4.5 插入图片

# -*- coding: utf-8 -*-
import openpyxl
from openpyxl.drawing.image import Image

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 设置图像
img = Image(r'C:\mydata\generator\py\main.jpg')
# 设置图像单元格说明
sheet['A1'] = 'you are my angel'
# 插入图片
sheet.add_image(img, 'A1')
# 保存
workbook.save(path)

结果如下:

 python使用openpyxl操作excel的方法步骤

4.6 隐藏轮廓

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
wb = openpyxl.Workbook()
ws = wb.create_sheet()
# 隐藏行 A-B
ws.column_dimensions.group('A', 'B', hidden=True)
# 隐藏 列 1 -5 
ws.row_dimensions.group(1, 5, hidden=True)
wb.save(path)

4.7 设置行高列高

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 创建一个工作本
workbook = openpyxl.Workbook()
# 创建一个 sheet
sheet = workbook.create_sheet('zszxz')
# 写入文本形式
sheet['A1'] = 'zszxz666'
# 设置行高
sheet.row_dimensions[1].height = 50
# 设置列高
sheet.column_dimensions['A'].width = 30
workbook.save(path)

五 删除sheet

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获得sheet
sheet = workbook['Sheet']
# 移除sheet
workbook.remove(sheet)
# 保存
workbook.save(path)

六 更新工作表

# -*- coding: utf-8 -*-
import openpyxl

path = r'C:\mydata\generator\py\zszxz_write.xlsx'
# 加载工作本
workbook = openpyxl.load_workbook(path)
# 获得sheet
sheet = workbook['zszxz']
# 获得值
val = sheet['A1'].value
print(val)
# 重新赋值
new_val = sheet['A1'].value = 'zszxz'
print(new_val)
# 保存
workbook.save(path)

输出

zszxz666
zszxz

七 参考文档

更多内容参考官方文档;

openpyxl

到此这篇关于python使用openpyxl操作excel的方法步骤的文章就介绍到这了,更多相关python openpyxl操作excel内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python解析JSON数据的基本方法
Oct 15 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
opencv python 傅里叶变换的使用
Jul 21 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
numpy求平均值的维度设定的例子
Aug 24 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
详解python中groupby函数通俗易懂
May 14 Python
python如何查看网页代码
Jun 07 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
python 调整图片亮度的示例
Dec 03 Python
基于python实现破解滑动验证码过程解析
May 28 #Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 #Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 #Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 #Python
Python爬虫requests库多种用法实例
May 28 #Python
在pycharm中创建django项目的示例代码
May 28 #Python
python中有函数重载吗
May 28 #Python
You might like
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Django Admin实现上传图片校验功能
2016/03/06 Python
Python从零开始创建区块链
2018/03/06 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
大学生毕业自荐信
2013/10/10 职场文书
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
百日安全生产活动总结
2014/07/05 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
杨善洲观后感
2015/06/04 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP
Redis实现订单过期删除的方法步骤
2022/06/05 Redis