Python操作Excel库openpyxl使用笔记

简介

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

Excel 文件

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

安装 openpyxl 模块

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

$ pip install openpyxl

创建工作簿

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

python">>>> 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)

...

<Worksheet "Mysheet1">

<Worksheet "New Title">

<Worksheet "Mysheet2">

<Worksheet "Mysheet">

处理数据


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

>>> 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)

...

<Cell 'New Title'.A1>

<Cell 'New Title'.B1>

<Cell 'New Title'.C1>

<Cell 'New Title'.A2>

<Cell 'New Title'.B2>

<Cell 'New Title'.C2>

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

>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=

2):

... for cell in col:

... print(cell)

...

<Cell 'New Title'.A1>

<Cell 'New Title'.A2>

<Cell 'New Title'.B1>

<Cell 'New Title'.B2>

<Cell 'New Title'.C1>

<Cell 'New Title'.C2>

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

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

>>> ws = wb.active

>>> ws['C4'] = 'Hello World!'

>>> tuple(ws.rows)

((<Cell 'Mysheet1'.A1>, <Cell 'Mysheet1'.B1>, <Cell 'Mysheet1'.C1>),

(<Cell 'Mysheet1'.A2>, <Cell 'Mysheet1'.B2>, <Cell 'Mysheet1'.C2>),

(<Cell 'Mysheet1'.A3>, <Cell 'Mysheet1'.B3>, <Cell 'Mysheet1'.C3>),

(<Cell 'Mysheet1'.A4>, <Cell 'Mysheet1'.B4>, <Cell 'Mysheet1'.C4>))

或者 Worksheet.columns 属性:

>>> tuple(ws.columns)

((<Cell 'Mysheet1'.A1>,

<Cell 'Mysheet1'.A2>,

<Cell 'Mysheet1'.A3>,

<Cell 'Mysheet1'.A4>),

(<Cell 'Mysheet1'.B1>,

<Cell 'Mysheet1'.B2>,

<Cell 'Mysheet1'.B3>,

<Cell 'Mysheet1'.B4>),

(<Cell 'Mysheet1'.C1>,

<Cell 'Mysheet1'.C2>,

<Cell 'Mysheet1'.C3>,

<Cell 'Mysheet1'.C4>))

返回单元格的值


如果只是需要返回工作表中单元格的值,可以使用 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 文件进行处理的简单用法。

以上是 Python操作Excel库openpyxl使用笔记 的全部内容, 来源链接: utcz.com/a/14175.html

回到顶部