栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python openpyxl 库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python openpyxl 库

openpyxl 库
简介

openpyxl 是一个用于读取/写入 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库

Excel 文件

这里介绍下一些基本定义:Excel 电子表格文档称为工作簿。单个工作簿保存在扩展名为 .xlsx 的文件中。每个工作簿可以包含多个工作表。

安装 openpyxl 模块

openpyxl 是一个第三方模块,当要用于处理 Excel 文件时,须先安装。使用以下的命令进行安装

$ pip install openpyxl
创建工作簿

可以通过导入 openpyxl 的 Workbook 类来创建工作簿(workbook)。例如:

>>> from openpyxl import Workbook
>>> wb = Workbook()

创建工作簿后,至少有一个工作表(worksheet)。可以使用 Workbook.active 属性来获取:

>>> ws = wb.active

默认情况下,这个方法获取的是第一个工作表

创建新的工作表 ,可以使用 Workbook.create_sheet() 方法:

>>> ws1 = wb.create_sheet('Mysheet')
>>> ws2 = wb.create_sheet('Mysheet', 0)
>>> ws3 = wb.create_sheet('Mysheet', -1)

创建新工作表的时候,会自动赋予一个名字。会按照(Sheet,Sheet1,Sheet2)这样的顺序依次赋值 。不过能够通过 Worksheet.title 属性来修改这个名称。

ws.title = "New Title"

如果想要查看一个工作簿中所有工作表的名称,可以通过 Workbook.sheetname 属性来进行查看:

>>> wb.sheetnames
['Mysheet1', 'New Title', 'Mysheet2', 'Mysheet']

当然也可以用循环遍历的方式:

>>> for sheet in wb:
...     print(sheet)
...




处理数据

当创建完工作簿以及工作表后,现在就可以考虑修改单元格的内容。单元格能够作为工作表的键直接访问:

>>> c = ws['A1']

这个时候,将会返回 A1 处单元格,如果不存在的话,则创建一个。这个时候,可以直接赋值:

>>> ws['A1'] = 3

除了用这种大写字母(表示列)加数字(表示行)的形式来访问单元格。

还可以通过 Worksheet.cell()方法直接使用行和列的表示法来访问单元格:

>>> a = ws.cell(row=3, column=1, value=8)
访问多个单元格

当需要访问多个单元格的时候,可以使用切片的方法。当访问一个区域可以参考如下写法:

>>> cell_range = ws['A1':'D3']

当访问多行或多列时,可以使用如下的方法:

>>> col_c =  ws['C']
>>> col_range = ws['C':'D']
>>> row_10 = ws[10]
>>> row_range = ws[5:10]

除了使用上面切片的方法。同样可以使用 Worksheet.iter_rows() 方法访问,这个方法将逐行返回:

>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=
2):
...     for cell in row:
...  print(cell)
...






同样的,还有 Worksheet.iter_cols() 方法,这个方法将逐列返回:

>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=
2):
...     for cell in col:
...  print(cell)
...






这里有需要注意的地方,Worksheet.iter_cols 方法在只读模式下不可用。

如果需要遍历的是文件中所有的行或列,则可以考虑 Worksheet.rows 属性:

>>> ws = wb.active
>>> ws['C4'] = 'Hello World!'
>>> tuple(ws.rows)
((, , ),
 (, , ),
 (, , ),
 (, , ))

或者 Worksheet.columns 属性:

>>> tuple(ws.columns)
((,
  ,
  ,
  ),
 (,
  ,
  ,
  ),
 (,
  ,
  ,
  ))
返回单元格的值

如果只是需要返回工作表中单元格的值,可以使用 Worksheet.values 属性。

该方法将遍历工作表中所有行,但仅返回单元格中的值。

>>> for row in ws.values:
...     for value in row:
...  print(value)
...
None
None
None
None
None
None
None
None
None
Hello World!
None
Hello World!
保存数据到文件中

保存工作簿,可以使用 Workbook 对象的 Workbook.save() 方法:

>>> wb.save('temp.xlsx')

打开保存的文件,可以看到,下面的工作表名,正是上面创建的表名。

以及上面使用方法插入表格中的内容。

加载文件

当加载文件,可以使用 openpyxl.load_workbook() 方法来打开一个本地存在的文件:

>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('temp.xlsx')
>>> wb2.sheetnames
['Mysheet1', 'New Title', 'Mysheet2', 'Mysheet']
补充
插入时间
>>> import datetime
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('temp.xlsx')
>>> ws = wb2.active
>>> ws.title
'Mysheet1'
>>> ws['A1'] = datetime.datetime.now()
>>> ws['A1'].value
datetime.datetime(2020, 3, 29, 16, 29, 21, 786731)
>>> ws['A1'].number_format
'yyyy-mm-dd h:mm:ss'
使用公式

可以直接将 Excel 的公式,用字符串的格式赋值给某个单元格,如下:

>>> ws['A2'] = '=SUM(1,1)'
>>> ws['A2'].value
'=SUM(1,1)'
合并/拆分单元格

当需要合并和拆分单元格时,可以使用 worksheet.merge_cells() 方法以及 worksheet.unmerge_cells() 方法:

>>> ws.merge_cells('A2:B2')
>>> # 先将 A3:B3 合并,再尝试拆分
... ws.merge_cells('A3:B3')
>>> ws.unmerge_cells('A3:B3')
加载图像

这一步依赖 Pillow 库,所以使用之前需要先安装 Pillow 库。

>>> from openpyxl.drawing.image import Image
>>> img = Image('k.jpg')
>>> ws.add_image(img, 'A5')
>>> wb.save('temp_1.xlsx')
以上用法结果展示

在这张图片可以看到,A1 插入的时间已经生效。

A2 显示的结果是 2,红色标记的部分,表示这个结果是用这个公式得到的结果,也就说明公式插入也是生效的。

同时可以看到,A2:B2 单元格已经合并。

最后是插入图片,可以看到在 A5 单元格,成功插入了一张图片。


以上内容就是关于 openpyxl 库对 Excel 文件进行处理的简单用法。


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号