web-dev-qa-db-ja.com

OpenPyXLで文字の代わりにcolumn = numbersを使用してセルの範囲を読み取る方法は?

私はそのコードを使用してセルの範囲を読み取ることができることを知っています:

worksheet.cell(range="A1:J1").value

しかし、私は次のような列を選択するために文字の代わりに数字を使用することを好みます:

worksheet.cell(row=1,column=1:10).value

これは可能ですか?

5
user5801730

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ベースのインデックス)値を提供できるようになります。

5
Charlie Clark

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)]
6
trans1st0r

範囲を行に分割し、各行のセル値をタプルまたはリストに格納したいようです。このためにクリーンで簡単な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
_
0
Ibo

このデータをどのように読みたいかに応じて!例えば

_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)に尋ねるだけで済みます。