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编写Linux系统守护进程实例
Feb 03 Python
Python编程实现双击更新所有已安装python模块的方法
Jun 05 Python
python3实现磁盘空间监控
Jun 21 Python
Python 字符串与数字输出方法
Jul 16 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
python__new__内置静态方法使用解析
Jan 07 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
python主要用于哪些方向
Jul 05 Python
Python通过getattr函数获取对象的属性值
Oct 16 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
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
Js+XML 操作
2006/09/20 Javascript
JS 字符串连接[性能比较]
2009/05/10 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
python中Switch/Case实现的示例代码
2017/11/09 Python
python 定时修改数据库的示例代码
2018/04/08 Python
python logging模块的使用总结
2019/07/09 Python
python自定义时钟类、定时任务类
2021/02/22 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
python numpy数组复制使用实例解析
2020/01/10 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
python实现AdaBoost算法的示例
2020/10/03 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
捐书寄语赠言
2014/01/18 职场文书
股份转让协议书范本
2015/01/27 职场文书
离婚协议书范文2016
2016/03/18 职场文书
2019年大学推荐信
2019/06/24 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript