openpyxl的使用

1 Excel的基本结构

Workbook:一个Excel电子表格文档被称为一个工作簿,一个工作簿保存在扩展名为 .xlsx 的文件中。

Sheet:一个工作簿可以包含多张表(也称为工作表)。用户当前查看的表(或关闭Excel前最后查看的表),称为活动表

Row:表格中的行,地址是从1开始的数字

Column:表格中的列,地址是从A开始的字母

Cell:单元格,特定的行和列组成的方格称为单元格。每个单元格都包含一个数字或文本值。单元格形成的网格和数据构成了表。

2 安装openpyxl模块

Python没有自带openpyxl,所以需要单独进行安装才可正常使用。

Windows下打开命令行输入:

pip install openpyxl

Mac下打开终端输入:

pip3 install openpyxl

如果想要测试是否安装正确,可以在交互式环境下输入以下代码:

import openpyxl

如果该模块正确安装,则运行后不会返回任何错误消息

openpyxl官方文档链接:

https://openpyxl.readthedocs.io/en/stable/index.html

3 读取一个已有的Excel表格

简单示例

from openpyxl import load_workbook
# fileName 这里是指文件路径
fileName = "工作簿.xlsx"
# 以只读模式打开工作簿
wb = load_workbook(filename = fileName,read_only = True)
# sheetName 就是 sheet页的名称
sheetName = "Sheet1"
# 通过 工作表名 获取 工作表
ws = wb[sheetName]
# 按行读取 工作表的内容
for row in ws.rows:for cell in row:# 输出 单元格中的数据print(cell.value)

3.1 获取工作簿对象

在导入openpyxl模块后,就可以使用load_workbook()方法读取Excel文件。openpyxl.load_workbook()方法返回一个工作簿对象(也是一个workbook数据类型的值),为了方便后续的使用,我们通常将这个对象命名为wb。

注意:load_workbook()方法只能读取已有的Excel表格文件,无法创建新的Excel表格。

import openpyxlwb = openpyxl.load_workbook(filename, read_only=False, keep_vba=False, data_only=False, keep_links=True)

openpyxl.load_workbook()方法可以接收多个参数进行读取设置

filename:字符串类型,读取Excel文件的文件路径,可使用相对路径或是绝对路径。

read_only:布尔类型,选择只读模式或是读写模式,选择只读模式可以提高查询速度,默认为False。

keep_vba:布尔类型,保留vba内容(这并不意味着可以使用它),默认为False。

data_only:布尔类型,如果设置为True则包含公式的单元格,显示最近计算结果或是None,如果设置为False 则单元格显示公式,默认为False。注意:data_only=False状态下打开,最后用save()函数保存了的话,原xlsx文件只剩下data_only=False的公式,如果想重新获取公式及结果,需要用Excel城西打开文件并保存。

keep_links:布尔类型,是否保留指向外部工作簿的链接。默认为True。

3.2 获取工作表对象

3.2.1 获取工作簿中的所有工作表

调用get_sheet_names()方法或者sheetnames属性可以取得工作簿中所有表名,返回为一个列表。

from openpyxl import load_workbook
# fileName 这里是指文件路径
fileName = "工作簿.xlsx"
# 以只读模式打开工作簿
wb = load_workbook(filename = fileName,read_only = True)
# 获取工作簿中所有的工作表,返回一个列表对象
wb.get_sheet_names()
wb.sheetnames

3.2.2 选中需要操作的工作表

每个工作表由一个Worksheet对象表示,可以通过类似字典的键或是方法来取得。最后,还可以通过wb.active获取活动表(关闭Excel前最后查看的表)

# 通过工作表名称去的工作表
sheet = wb.get_sheet_by_name('工作表名称')
sheet = wb['工作表名称']# 获取工作簿中的活动表
sheet = wb.active
# 获取活动表的表名称
sheet.title

3.2.3 获取表格中的一些属性

# 获取表格的大小(表格存在数据的大小)
sheet.dimensions
# 单独获取最大行或列
sheet.max_row or sheet.max_column
# 设置表格为隐藏状态
sheet.sheet_state = 'hidden'
# 设置表格为显示状态
sheet.sheet_state = 'visible'

3.3 获取单元格对象

3.3.1 获取单元格对象

有了表格对象,就可以按照坐标或行列数来获取单元格对象

# 通过固定的行列坐标获取单元格对象
cell = sheet['A1']
# 通过数字的行列获取单元格对象
cell = sheet.cell(row=1,column=1)
# 为单元格赋值
cell.value = 'A1'

3.3.3 获取单元格的一些属性

# 获取单元格的行
cell.row
# 获取单元格的列
cell.column
# 获取单元格的坐标
cell.coordinate

3.3.4取一行或是一列的单元格,返回一个元组对象

可以将表格对象切片,取得电子表格中一行、一列或一个矩形区域中的所有单元格对象。然后可以通过循环遍历取得切片中的所有单元格。

# 取一列单元格
cells = sheet['A']
# 取一行单元格
cells = sheet[1]
# 取表格当中的所有列,一列为一组
cells = sheet.columns
# 取表格当中的所有行,一行为一组
cells = sheet.rows
# 已知单元格矩形范围坐标时
cells = sheet['A1:C5']
# 已知单元格起始与终结的行列数时
cells = sheet.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3)
cells = sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3)

4 创建一个新的Excel表格

4.1 创建一个新表格

创建一个新的Excel表格需要使用openpyxl.Workbook()方法,实际上Workbook方法调用的是openpyxl自带的Excel模板文件。

当修改Excel表格中的内容的时候,电子表格文件不会自动保存,直到我们使用 save()工作簿方法。

import openpyxl
# 打开一个工作簿,由于是创建一个新的,所以不需要添加路径参数
wb = openpyxl.Workbook(encodin='utf-8')
# 获取活动表
ws = wb.active
# 修改活动表明湖曾
ws.title = 'test1'
# 修改 A1 单元格数据
ws['A1'] = 'A1'
# 查看当前所有表格名称
wb.get_sheet_names()
# 保存Excel文件
wb.save('test1.xlsx')

4.2 对表格对象的一些操作

4.2.1 创建表格

create_sheet()方法返回一个新的表格对象,名为SheetX,默认为工作簿的最后一个工作表。或者,可以利用index和title参数,指定新工作表的索引及名称

# 使用工作簿对象创建一个新的表格,表格名称为test2
wb.create_sheet(index=None,title='test2')

index:整数类型,设置新工作表索引,默认为None即放在最后,如果设置为0,则表格放置在最前。

title:字符串类型,设置新工作表名称,如果新工作表名称已存在,新工作表名称会自动变为title1。

4.2.2 删除表格

remove()方法中接收一个表格对象而不是表格名称的字符串。

wb = openpyxl.load_workbook('test.xlsx')
# 使用工作簿对象删除表格
wb.remove(wb['test2'])
wb.save('test.xlsx')

4.2.3 复制表格

copy_worksheet()方法接收一个表格对象并将其复制粘贴

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
# 复制选中表格
wb.copy_worksheet(sheet)
wb.save('test.xlsx')

4.2.4 表格中插入删除行和列

插入行和列

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active# 插入行
# 在idx行上方插入数量为amount的行
sheet.insert_rows(idx=2, amout=2)# 插入列
# 在idx列左侧插入数量为amount的行
sheet.insert_cols(idx=2, amout=2)wb.save('test.xlsx')

删除行和列

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active# 删除行
# 从idx行开始向下删除amount数量的行,包括idx这一行
sheet.delete_rows(idx=2, amout=2)# 删除列
# 从idx列开始向右删除amount数量的列,包括idx这一列
sheet.delete_cols(idx=2, amout=2)wb.save('test.xlsx')

4.2.5 为表格新增数据

新增数据即在已有表格中添加数据,只能使用load_workbook()方法读取Excel电子表格。

append()方法接收一个可变参数,包括但不限于列表、范围或生成器或字典

如果传入一个列表:从第一列开始顺序添加所有值,列表元素对应每一行

如果传入一个字典:值被分配给键(数字或字母)指示的列

注意:append一次只能添加一行的数据,如果想要多行添加,需要与循环或其他方法相结合实现。

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
# 在当前工作表数据的底部追加一组值
sheet.append(iterable)
# 追加数据
sheet.append([1,2,3])
sheet.append({'A':'这是A1'})

4.3 对单元格的一些操作

4.3.1 修改单元格数据及定义公式

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
cell = sheet['A1']
# 修改单元格数据
cell.value = 'A1'
# 在单元格中添加公式
cell.value = '=SUM(A2:C4)'
wb.save('test.xlsx')# 查看openpyxl支持的公式
from openpyxl.utils import FORMULAE
FORMULAE

4.3.2 移动单元格

使用move_range()方法移动单元格

sheet.move_range(cell_range, rows=0, cols=0, translate=False)wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active# 将A1:C2范围的单元格,向下移动一行,向右移动2列
sheet.move_range('A1:C2', rows=1, cols=2)

4.3.3 冻结窗格

对于数据量过多而不能一屏显示的Excel电子表格,冻结需要的行或列是非常有帮助的。

使用freeze_panes属性,可以设置一个单元格坐标的字符串,冻结单元格坐标上方及左侧的行和列,但是单元格本身所在的行和列不会被冻结。

# 冻结行1
sheet.freeze_panes = 'A2'
# 冻结列A
sheet.freeze_panes = 'B1'
# 冻结列A和列B,行1
sheet.freeze_panes = 'C2'
# 不会冻结窗格
sheet.freeze_panes = 'A1'

5 单元格样式修改

设置某些单元格行或列的字体风格,可以帮助你强调电子表格中的重点区域。

这里需要使用openpyxl.styles中的Font()方法

注:下面几种样式(字体、填充、边框、位置等)实例一旦被创建实例的属性就不可更改,只能重新创建实例。

5.1 获取单元格字体风格

import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
cell = sheet['A1']
# 获取单元格字体所有属性
cell.font
# 获取字体对象
font = cell.font
# 获取字体名称
font.name
# 获取字体大小
font.size
# 字体是否加粗
font.bold
# 字体是否为斜体
font.italic

5.2 设置单元格字体风格

Font()方法可以设置单元格的字体风格,下面是一些常用的参数设置

# 导入需要的方法
from openpyxl.styles import Font
from openpyxl import load_workbook
# 加载一个Excel电子表格
wb = load_workbook('test.xlsx')
sheet = wb.active
cell = sheet['A1']
cell.value = 'CSDN'# 设置一个字体风格,宋体,字号20,加粗,斜体,颜色为红色
font = Font(name='宋体',size=20, bold=True,italic=True,color='FF0000')
# 设置选中单元格的字体风格
cell.font = font
wb.save('test.xlsx')

name:字符串类型,传入所需设置的字体名称。

size:正整数类型,设置字体的大小。

bold:布尔类型,True表示粗体。

italic:布尔类型,True表示斜体。

color:字符串类型,传入十六进制颜色色号(HEX),如‘FFFFFF’表示白色。

5.3 设置单元格格式分类

可以通过设置单元格的风格来设置单元格格式分类

# 设置单元格分类为百分比
cell.style = '百分比'
cell.style = '常规'# 常规单元格
cell.number_format = 'General'
# 百分比单元格
cell.number_format = '0.00%'
# 科学计数法
cell.number_format = '0.00E+00'

openpyxl所支持的excel的单元格格式

https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html?highlight=openpyxl.styles.numbers

5.4 单元格对齐格式设置

# 导入所需模块
from openpyxl.styles import Alignment
# 设置单元格对齐样式
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)# 应用样式
cell.alignment = alignment

Alignment中可以传入多个参数:

horizontal:字符串类型,水平对齐,对应Excel助攻对齐格式

"general", "left", "center", "right", "fill", "justify", "centerContinuous","distributed"

vertical:字符串类型,垂直对齐,对应Excel助攻对齐格式

 "top", "center", "bottom", "justify", "distributed",

wrap_text:布尔类型,设置是否自动换行

textRotation:整数类型,设置文本旋转角度,最大值180

官方文档链接:

https://openpyxl.readthedocs.io/en/latest/_modules/openpyxl/styles/alignment.html

5.5 设置颜色填充样式

5.5.1 纯色填充

# 导入所需模块
from openpyxl.styles import PatternFill
# 设置颜色填充样式
pattern_fill = PatternFill(fill_type='solid',fgColor='00B0F0')# 应用样式
cell.fill = pattern_fill

fill_type:字符串类型,设置填充的样式,常用的是 solid

fgColor:字符串类型,输入HEX十六进制颜色色号

注:官方文档中写明, fill_type 若没有特别指定类型,则后续的参数都无效

5.5.2 渐变颜色填充

# 导入所需模块
from openpyxl.styles import GradientFill
# 设置颜色填充样式
gradient_fill = GradientFill(stop=('FFFFFF', '99CCFF', '000000'))# 应用样式
cell.fill = gradient_fill

stop:传入一个元组,从起始颜色色号至终止颜色色号,同样是十六进制HEX的格式

5.6 设置边框样式

# 导入所需模块
from openpyxl.styles import Side, Border
# 设置边框线样式
side = Side(style='thin', color='000000')
border = Border(left=side, right=side, top=side, bottom=side)

Side 设置具体的边框线格式

style:传入格式,样式有以下

‘dashDot’,‘dashDotDot’,‘dashed’,‘dotted’,‘double’,
‘hair’,‘medium’,‘mediumDashDot’,‘mediumDashDotDot’,
‘mediumDashed’,‘slantDashDot’,‘thick’,‘thin’

color:HEX颜色色号

Border 设置边框线应用的范围,常用的为上下左右

ll = gradient_fill


stop:传入一个元组,从起始颜色色号至终止颜色色号,同样是十六进制HEX的格式### 5.6 设置边框样式```python
# 导入所需模块
from openpyxl.styles import Side, Border
# 设置边框线样式
side = Side(style='thin', color='000000')
border = Border(left=side, right=side, top=side, bottom=side)

Side 设置具体的边框线格式

style:传入格式,样式有以下

‘dashDot’,‘dashDotDot’,‘dashed’,‘dotted’,‘double’,
‘hair’,‘medium’,‘mediumDashDot’,‘mediumDashDotDot’,
‘mediumDashed’,‘slantDashDot’,‘thick’,‘thin’

color:HEX颜色色号

Border 设置边框线应用的范围,常用的为上下左右

openpyxl的基本使用相关推荐

  1. openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old

    具体错误如下: openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file ...

  2. Python可视化——3D绘图解决方案pyecharts、matplotlib、openpyxl

    Python可视化--3D绘图解决方案pyecharts.matplotlib.openpyxl 1. pyecharts 2. matplotlib 3. openpyxl 这篇博客将介绍pytho ...

  3. python openpyxl写入多行_Python openpyxl读写操作

    import openpyxl #导入 模块 #读取xlsx文件 rb = openpyxl.load_workbook(r"c:\11.xlsx") #获取工作表--Sheet ...

  4. Python openpyxl 之 Excel 文档简单操作

    背景:生活中常常因日常工作,在记录统计方面需频繁处理较多 Excel 表格,这部分工作虽可由人工完成,但这样会显得有些繁琐且可能存在偏差,遂闲时查阅了是否有相关基于python处理Excel表格的学习 ...

  5. python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)

    围观人数: 7 标签:book   set   tle   命令行   文件中   不能   charm   读取   pen 第一part:Excel文件的介绍 Microsoft Excel是Mi ...

  6. 使用openpyxl处理表格数据

    你们都一定在生活中的某个时候使用过 Excel,并且一定觉得需要自动化在本教程中,我们将学习如何使用 Python 处理 Excel 一些重复或乏味的任务. Openpyxl 是一个 Python 库 ...

  7. openpyxl 操作 Excel表的格基本用法

    在本教程中,将Python3和openpyxl库一起使用来操作 Excel 表格. 本文将介绍如下操作: 如何在内存中创建工作簿 如何从工作簿中检索.创建.复制.移动和删除工作表 如何从文件创建工作簿 ...

  8. openpyxl读取excel_初识openpyxl--读取excel数据(二)

    (4)对mySheet进行切片. col_range = ws['B:D']row_range = ws[2:3] ①:以列的方式访问单元格: for col in col_range: for ce ...

  9. openpyxl安装_自拍教程76Python 一键批量安装第三方包

    案例故事: 在测试环境搭建环节,尤其是需要在新的电脑上搭建Python测试环境时, 可以考虑把日常自动化测试所需要用到的第三方Python包(非自带内置包), 一次性批量安装上. 准备阶段 1.确保p ...

  10. Python中用OpenPyXL处理Excel表格

    更多内容,请访问我的 个人博客. 前言 用 Python 处理Excel表格的几个常规库: xlrd 用来读 xlwt 用来写 xlutils 用于做复制.筛选等针对文档文件的操作 这些库都不如 Op ...

最新文章

  1. SLAM中大场景下室内外区域的地图管理方法
  2. [20170711]关于tmux共享会话问题.txt
  3. 59.加载Viewcontroller的几种方法(添加导航,解决xib里面空间不显示问题)
  4. HDFS数据副本的摆放策略
  5. csv数据去重 python_python批量查询、汉字去重处理CSV文件
  6. Angular 指令ngTemplateOutlet的运行原理单步调试
  7. etabs数据_etabs使用经验
  8. linux脚本ipddr.sh 是什么,MTK DDR调试
  9. Java 中的十大排序算法
  10. 指数分布的极大似然估计
  11. 进制转换(C++实现)
  12. java simon_Java程序监控API Java Simon
  13. 各大开源项目中的GA的意思?
  14. 跟着我从零开始入门FPGA(一周入门系列)第三天
  15. 福特中国启动“福特更美好的世界“公益项目
  16. 别碰鼠标——让键盘飞起来
  17. 牛客国庆集训派对Day1 New Game!+计算几何
  18. 8、go语言:测试与性能调优
  19. Django项目——报错处理
  20. win7通过cmd创建wifi热点无需软件

热门文章

  1. 高校奖学金评定系统的设计与实现(论文+源码)_kaic
  2. 计算输入的正数和负数个数
  3. 深入Array.prototype.slice()方法
  4. Hadoop学习——Hadoop概述
  5. Chronometer实现计时器 开始、暂停、停止功能
  6. c语言中void f1(),c语言常见笔试题f1ryiedy.doc
  7. PLC通讯实现-C#实现AB-CIP以太网通讯
  8. C++ 文件查找 _findfirst、_findnext和_fineclose的使用
  9. 关于antd Tree组件修改图标
  10. CentOS下安裝Nvidia docker 2.0:[Errno 256] No more mirrors to try錯誤及解決方式