当前位置:嗨网首页>书籍在线阅读

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 对象的 rowscolumns 属性。这些属性必须被 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] 。在得到了代表行或列的元组后,可以循环遍历它的对象,并输出它们的值。