mixiA
@mixiA

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【質問】PythonでExcellからデータを抽出しリストに格納する方法

解決したいこと

現在社内にあるエクセルファイル(130程)から
必要データをシート・範囲を指定して抽出しリストに格納するプログラムを
書きたいと思っております。
あわよくば、フォルダ内のエクセルファイルに一括で同処理を行い、
1つのリストに格納できればと考えています。

現状、エクセルファイルから範囲を指定して抽出し、
リストに格納する段階で以下のエラー発生し、
エラーコード等検索し対応を試みましたが、力不足だった為、
助力を願えればと思いました。
当方プログラミングを始めて2ヵ月程度の初心者の為、質問に不備がある場合は
補足いたしますのでよろしくお願いいたします。

発生している問題・エラー

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-7-d27db3450f3b> in <module>
     14         # 該当セルに値が存在する場合からのリストに列で格納
     15         if cell_value is not None:
---> 16             np.insert (nd_e_data[cell_value],axis=1)
     17             print(cell.coordinate, cell_value)
     18 

IndexError: index 28370 is out of bounds for axis 0 with size 100

または、問題・エラーが起きている画像をここにドラッグアンドドロップ。

該当するソースコード

# 特定範囲の絞り込み
# 始点
s_COL = 11
s_ROW = 9
# 終点
e_COL = 11
e_ROW = 52

#ループ処理で値を抽出
for row in ws0.iter_rows(min_col=s_COL, min_row=s_ROW, max_col=e_COL, max_row=e_ROW):
    for cell in row:
        # 該当セルの値取得
        cell_value = cell.value
        # 該当セルに値が存在する場合からのリストに列で格納
        if cell_value is not None:
            np.insert (nd_e_data[cell_value],axis=1)
            print(cell.coordinate, cell_value)



0

1Answer

エクセルデータのcell_valueが28370だと、nd_e_data[28370]にアクセスしてしまいます。
これは、nd_e_dataの長さを超えているためエラーになります。
ですが、そもそもnp.insertの引数も足りていません。np.insert(配列, 位置, 値, 軸)を指定する必要があります。

エクセルのある一列のデータを取ってきてリストにするのであれば、以下のようなコードでもいいのではないでしょうか。

nd_e_data = []
for row in ws0.iter_rows(min_col=s_COL, min_row=s_ROW, max_col=e_COL, max_row=e_ROW):
    for cell in row:
        # 該当セルの値取得
        cell_value = cell.value
        # 該当セルに値が存在する場合からのリストに列で格納
        if cell_value is not None:
            nd_e_data.append(cell_value)

1Like

Comments

  1. @mixiA

    Questioner

    エラーの内容について非常にわかりやすく回答いただきありがとうございました。
    引数に関しては別セルにて指定しておりました。
    提示していただいたコードで再度修正し、無事にリストに格納されることを確認しました。
    ご教示いただき誠にありがとうございました。

Your answer might help someone💌