私はそのコードを使用してセルの範囲を読み取ることができることを知っています:
worksheet.cell(range="A1:J1").value
しかし、私は次のような列を選択するために文字の代わりに数字を使用することを好みます:
worksheet.cell(row=1,column=1:10).value
これは可能ですか?
ws.cell()
は個々のセルのみを返すことができるため、その範囲は意味がありません。セルの範囲にアクセスするには、ws.iter_rows()
または_ws.rows
_または_ws.columns
_を使用できます。バージョン2.3以前では、ws.iter_rows()
はExcelスタイルの範囲表記のみを受け入れますが、行と列のオフセットを使用して範囲を作成できます。バージョン2.4以降、_min_row
_、_min_col
_、_max_row
_および_max_col
_の完全な数値(1ベースのインデックス)値を提供できるようになります。
worksheet.cell(range="A1:J1").value
が可能ですか?
上記は、公式ドキュメントに記載されているrange
関数を使用して可能になる場合があります。
http://openpyxl.readthedocs.io/en/default/api/openpyxl.worksheet.worksheet.html
Worksheet.cellを使用するには2つの方法があります。
使用法:cell(coodinate = ’A15’)またはcell(row = 15、column = 1)
座標が指定されていない場合は、行と列を指定する必要があります。
したがって、リスト内包表記を使用できます。
data = [worksheet.cell(row=1,column=i).value for i in range(1,11)]
範囲を行に分割し、各行のセル値をタプルまたはリストに格納したいようです。このためにクリーンで簡単な2つの方法があります。
仮定:
ws:ワークシート(例: _ws=wb['Sheet1']
_
rng:wsなどの任意の範囲_rng=ws['A1':'D10']
_またはrng=ws['A1':'D' + str(ws.max_column)]
方法1:
t=Tuple(rng)
これは、各行のタプルを含むタプルを返します。したがって、この例では、tには10個のタプルがあり、各内部タプルには4つの要素/値があります。
方法2:
_final_list=[]
for row in rng:
mylist=list(row)
final_list.append(mylist)
_
これは、リストを持つタプルの代わりに、ほとんど同じです。
注:
リストのリストまたはタプルのタプルは、値ではなくcells
を格納するため、それらの値にアクセスするには、次のようにします。
_first_cell_value=t[0][0].value
_
このデータをどのように読みたいかに応じて!例えば
_type(sheet['A7':'B8'])
_
次のように入力すると、_<class 'Tuple'>
_が得られます
_type(sheet['A7':'B8'][i])
_
ここで、i = 1,2の場合、同じタイプになります。したがって、それはタプルのタプルです。範囲内の行数と同じ数のタプルがあります。
行と列の範囲の開始と終了のインデックスを引数として関数を定義し、同様のタプルのタプルを返しますが、内部にセルの値があります。同様に、異なるタイプの出力と抽出したい情報を使用して、独自の関数を定義できます。
_def RangeValue(a, b, c, d):
return(Tuple(tuple(sheet.cell(row=a+i, column=c+j).value for j in range(d-c+1)) for i in range(b-a+1)))
_
ここで、範囲A7:B8については、RangeValue(7,8,1,2)
に尋ねるだけで済みます。