07-从表中取得单元格
13.3.3 从表中取得单元格
有了 Worksheet
对象后,就可以按名字访问 Cell
对象。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1'] # Get a sheet from the workbook.
>>> sheet['A1'] # Get a cell from the sheet.
<Cell 'Sheet1'.A1>
>>> sheet['A1'].value # Get the value from the cell.
datetime.datetime(2015, 4, 5, 13, 34, 2)
>>> c = sheet['B1'] # Get another cell from the sheet.
>>> c.value
'Apples'
>>> # Get the row, column, and value from the cell.
>>> 'Row %s, Column %s is %s' % (c.row, c.column, c.value)
'Row 1, Column B is Apples'
>>> 'Cell %s is %s' % (c.coordinate, c.value)
'Cell B1 is Apples'
>>> sheet['C1'].value
73
Cell
对象有一个 value
属性,它包含这个单元格中保存的值。 Cell
对象也有 row
、 column
和 coordinate
属性,可以提供该单元格的位置信息。
这里,访问单元格B1的 Cell
对象的 value
属性,我们得到字符串 'Apples'
。 row
属性给出的是整数1, column
属性给出的是 'B'
, coordinate
属性给出的是 'B1'
。
openpyxl
将自动解释列A中的日期,将它们返回为 datetime
值,而不是字符串。 datetime
数据类型将在第17章中进一步解释。
用字母来指定列,这在程序中可能有点儿奇怪,特别是在Z列之后,列开始使用两个字母:AA、AB、AC等表示。作为替代,在调用表的 cell()
方法时,传入整数作为该方法的 row
和 column
关键字参数,这样也可以得到一个单元格。第一行或第一列的整数是1,不是0。输入以下代码,继续演示交互式环境的例子:
>>> sheet.cell(row=1, column=2)
<Cell 'Sheet1'.B1>
>>> sheet.cell(row=1, column=2).value
'Apples'
>>> for i in range(1, 8, 2): # Go through every other row:
... print(i, sheet.cell(row=i, column=2).value)
...
1 Apples
3 Pears
5 Apples
7 Strawberries
可以看到,使用表的 cell()
方法,并传入 row=1
和 column=2
,将得到单元格B1的 Cell
对象,就像指定 sheet['B1']
一样。然后,利用 cell()
方法和它的关键字参数,就可以编写 for
循环以输出一系列单元格的值。
假定你想顺着B列输出所有奇数行单元格的值。通过传入2作为 range()
函数的“步长”参数,可以取得每隔一行的单元格(在这里就是所有奇数行)。 for
循环的 i
变量被传递作为 cell()
方法的 row
关键字参数,而 column
关键字参数总是取2。请注意传入的是整数2,而不是字符串 'B'
。
可以通过 Worksheet
对象的 max_row
和 max_column
属性来确定表的大小。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb['Sheet1']
>>> sheet.max_row # Get the highest row number.
7
>>> sheet.max_column # Get the highest column number.
3
请注意, max_column
属性是一个整数,而不是Excel中出现的字母。