セル範囲を文字列で指定してCellを順番に取得するOpenPyXLのコードをご紹介しました。
この方法の場合、基本的にはCellオブジェクトを要素として含むタプルのタプルが取得できるのですが、1行のみ・1列のみを指定した場合については、タプルのタプルではない点に注意が必要です。
タプルのタプルになる場合
以下のようなデータの入力されている「Sheet1」シートが、
Cドライブtempフォルダーのsample.xlsxブックに存在する場合を見てみましょう。
bk = openpyxl.load_workbook(r'C:\temp\sample.xlsx')
ws = bk['Sheet1']
print(type(i))
print(i)
上記のスクリプトを実行すると、
<class 'tuple'>
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>)
<class 'tuple'>
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>)
<class 'tuple'>
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>)
<class 'tuple'>
(<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>)
と出力され、タプルのタプルになっていることがわかります。
そのため、個々のセルを操作するには、
for cel in row:
print(cel.value)
のように2重ループにする必要があります。
タプルのタプルではない場合
この記事の本題である、タプルのタプルではない、タプルが取得できる場合を見ましょう。
以下のように1行のみを指定した場合には、タプルのタプルではなく、Cellオブジェクトを要素に含むタプルが取得できます。
print(type(i))
print(i)
を実行した場合には、
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.A2>
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.B2>
と出力され、タプルのタプルではなく、Cellオブジェクトを要素に含むタプルであることを確認できます。
ですから、
print(cel.value)
で、
1
Alice
が出力されます。
1列だけを指定した場合も同様です。
print(type(i))
print(i)
を実行した場合には、
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.B1>
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.B2>
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.B3>
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.B4>
<class 'openpyxl.cell.cell.Cell'>
<Cell 'Sheet1'.B5>
と出力され、こちらもタプルのタプルではなく、Cellオブジェクトを要素に含むタプルです。
ですから、
print(cel.value)
で、
Alice
Bob
Chris
Dave
と出力されます。
最終更新日時:2023-05-23 08:57
- Newer:SpecialCells(xlCellTypeVisible)で取得できる可視セルの最初のセルを取得したい
- Older:「Delete」ではなく「Remove」を名前に含むExcelのメソッド一覧
Home » Python » OpenPyXLの使い方 » OpenPyXLで1行のみ1列のみを指定した場合はタプルのタプルではない