可以将 Worksheet 对象切片,取得电子表格中一行、一列或一个矩形区域中的所有
Cell 对象。然后可以循环遍历这个切片中的所有单元格。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb.get_sheet_by_name('Sheet1')
>>> tuple(sheet['A1':'C3'])
((<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>), (<Cell Sheet1.A2>,
<Cell Sheet1.B2>, <Cell Sheet1.C2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>,
<Cell Sheet1.C3>))
❶ >>> for rowOfCellObjects in sheet['A1':'C3']:
➋ for cellObj in rowOfCellObjects: print(cellObj.coordinate,
cellObj.value)
print('--- END OF ROW ---')
A1 2015-04-05 13:34:02
B1 Apples C1 73
--- END OF ROW ---
A2 2015-04-05 03:41:23
B2 Cherries C2 85
--- END OF ROW ---
A3 2015-04-06 12:46:51
B3 Pears C3 14
--- END OF ROW ---
这里,我们指明需要从 A1 到 C3 的矩形区域中的 Cell 对象,得到了一个 Generator对象,它包含该区域中的 Cell 对象。为了帮助我们看清楚这个 Generator
对象,可以使用它的 tuple()方法,在一个元组中列出它的 Cell 对象。
这个元组包含 3 个元组:每个元组代表 1 行,从指定区域的顶部到底部。这 3个内部元组中的每一个包含指定区域中一行的Cell 对象,从最左边的单元格到最右边。所以总的来说,工作表的这个切片包含了从
A1 到 C3 区域的所有 Cell 对象,从左上角的单元格开始,到右下角的单元格结束。
要打印出这个区域中所有单元格的值,我们使用两个 for 循环。外层 for 循环遍历这个切片中的每一行➊。然后针对每一行,内层 for
循环遍历该行中的每个单元格➋。要访问特定行或列的单元格的值,也可以利用 Worksheet 对象的 rows 和 columns
属性。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb.get_active_sheet()
>>> sheet.columns[1]
(<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>,
<Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>)
>>> for cellObj in sheet.columns[1]: print(cellObj.value)
Apples Cherries Pears Oranges Apples Bananas Strawberries
利用 Worksheet 对象的 rows 属性,可以得到一个元组构成的元组。内部的每个元组都代表 1 行,包含该行中的 Cell 对象。columns
属性也会给你一个元组构成的元组,内部的每个元组都包含 1 列中的Cell 对象。对于 example.xlsx,因为有 7 行 3 列,rows给出由 7 个元组构成的一个元组(每个内部元组包含 3
个Cell 对象)。columns 给出由 3 个元组构成的一个元组(每个内部元组包含 7 个Cell 对象)。
要访问一个特定的元组,可以利用它在大的元组中的下标。例如,要得到代表 B列的元组,可以用 sheet.columns[1]。要得到代表 A 列的元组,可以用
sheet.columns[0]。在得到了代表行或列的元组后,可以循环遍历它的对象,打印出它们的值。