09-从表中取得行和列
13.3.5 从表中取得行和列
可以将 Worksheet
对象切片,取得电子表格中一行、一列或一个矩形区域中的所有Cell对象。然后可以循环遍历这个切片中的所有单元格。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1']
>>> tuple(sheet['A1':'C3']) # Get all cells from A1 to 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
属性。这些属性必须被 list()
函数转换为列表,才能使用方括号和索引。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb.active
>>> list(sheet.columns)[1] # Get second column's cells.
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.
B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.B7>)
>>> for cellObj in list(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]
。在得到了代表行或列的元组后,可以循环遍历它的对象,并输出它们的值。