导入模块-打开文件:
import openpyxl
openpyxl.load_workbook()
函数,接受文件名,返回workbook对象
wb = openpyxl.load_workbook('example.xlsx')
表的方法:
get_sheet_names()
方法,取得工作簿所有表名的列表
names_list = wb.get_sheet_names()
使用wb['Sheet3']
可以直接定位到Sheet3表,获得Sheet3的Workbook对象
sheet = wb['Sheet3'] # 此时sheet就是Sheet3的Workbook对象
active
属性,取得工作簿的活动表
anotherSheet = wb.active
单元格的方法:
单元格对象Cell
-
value 属性:包含这个单元格保存的值
-
row 属性:包含这个单元格所在的行数
-
column 属性:包含这个单元格所在的列号
-
coordinate 属性:包含这个单元格的坐标,返回列字母和行号的组合如:A1、B2
get_column_letter()
方法,可以将列号转换为列字母。
c = sheet['B1']
# 使用 get_column_letter 将列号转换为列字母
column_letter = get_column_letter(c.column)
c.value
c.row
c.clumn
c.coordinate
column_letter
在调用表的cell()
方法时,可以传入整数来作为 row 和 column 关键字参数。
要注意第一行或第一列的整数是1,不是0。
print(sheet.cell(row=1, column=2))
print(sheet.cell(row=1, column=2).value)
for i in range(1, 8, 2):
print(i, sheet.cell(row=i, column=2).value)
可以通过Worksheet对象的max_row
属性和max_column
属性来确认表的大小。
print(sheet.max_row)
print(sheet.max_column)
列字母与数字之间的转换
openpyxl.utils
模块引入函数
openpyxl.cell.column_index_from_string()
函数,字母->数字。
openpyxl.cell.get_column_letter()
函数,数字->字母。
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
print(get_column_letter(1))
print(get_column_letter(2))
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb['Sheet1']
print(get_column_letter(sheet.max_column))
print(column_index_from_string('A'))
print(column_index_from_string('AA'))
要使用这些函数不必加载一个工作簿,你可以直接使用。
或者你也可以调用一个工作簿的Worksheet对象,利用对象的max_column
属性来获取一个整数,然后将该整数传递给get_column_letter()
,从而获取这个工作簿的最大列的字母。
在表中获取行和列
我们可以将Worksheet对象切片,从而取得一行、一列或一个矩形区域中的所有Cell对象。
import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb['Sheet1']
print(tuple(sheet['A1':'C3']))
# 先循环每一行(ROW)
for rowOfCellObjects in sheet['A1':'C3']:
# 在循环每一行中的每一个 Cell 对象
for cellObj in rowOfCellObjects:
# 先打印cellObj的坐标,再打印它的值
print(cellObj.coordinate, cellObj.value)
print('--- END OF ROW ---')
这里我们指明要从A1到C3的矩形区域中的Cell对象,得到了一个Generator(生成器)对象,它包含该区域中的Cell对象。为了看清楚这个Generator对象,可以使用它的tuple()
方法,在一个元组中列出它的Cell对象。
这个元组中包含了三个元组,每个元组代表一行,从指定区域的顶部到底部。内部元组中每一个包含指定区域中一行的Cell对象
也就是:
((A1, B1, C1),
(A2, B2, C2),
(A3, B3, C3))。
想要访问特定的行或列的单元格的值,也可以利用Worksheet对象的 rows 和 columns 属性。
import openpyxl
# 加载工作簿和工作表
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.active
# 获取所有列的生成器对象并转换为列表,转换成列表后第一列A变成了0,第二列B是1
columns_list = list(sheet.columns)
print(columns_list[1])
for cellObj in columns_list[1]:
print(cellObj.value)
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.B7>)
Apples
Cherries
Pears
Oranges
Apples
Bananas
Strawberries
利用 Worksheet 对象的 rows属性,可以得到一个由一个元组构成的元组。内部的每个元组都代表了1行,包含该行中的Cell对象。columns 属性也会给你一个元组构成的元组,不过内部的每个元组都包含1列中的Cell对象。
参考书籍:Python编程快速上手