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算法学习之计数排序实例
Dec 18 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
Python中一些深不见底的“坑”
Jun 12 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
Python字符串中删除特定字符的方法
Jan 15 Python
Python基于pip实现离线打包过程详解
May 15 Python
python如何实时获取tcpdump输出
Sep 16 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 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的计数器程序
2006/10/09 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
pandas中ix的使用详细讲解
2020/03/09 Python
物理教师自荐信范文
2013/12/28 职场文书
学习经验交流会主持词
2014/04/01 职场文书
工作检讨书怎么写
2015/01/23 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
全陪导游词开场白
2015/05/29 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server