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的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
python os模块常用的29种方法使用详解
Jun 02 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
python控制台打印log输出重复的解决方法
May 14 Python
Python排序算法之插入排序及其优化方案详解
Jun 11 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
jquery中动态效果小结
2010/12/16 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
python复制文件代码实现
2013/12/23 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python简单读取json文件功能示例
2017/11/30 Python
Django如何将URL映射到视图
2019/07/29 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Python Merge函数原理及用法解析
2020/09/16 Python
python批量修改文件名的示例
2020/09/27 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
领导四风问题整改措施思想汇报
2014/10/13 职场文书
大学生见习总结报告
2015/06/24 职场文书
2016年清明节寄语
2015/12/04 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
详解Python requests模块
2021/06/21 Python