yuhtaryouko
@yuhtaryouko (Yuta Kato)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

指定したワークシートをfor文の対象にしたい

解決したいこと

google colaboratory上にて、pythonとopenpyxlとpandasを組み合わせて使っています。
openpyxlでワークブックとワークシート名の読み取りまでできています。

ここで、読み取ったワークシートの一部を対象としてfor分を書きたいと思っていますが、どのように記述したらよいでしょうか。


file_path = glob('/content/drive/MyDrive/Colab Notebooks/test.xlsx')
wb = openpyxl.load_workbook('/content/drive/MyDrive/Colab Notebooks/test.xlsx')
worksheets = wb.sheetnames

#ワークシート名は以下のようにa~zまでのアルファベットが入っていると仮定します
['a',
 'b',

 'c',
 'd',
 'e',
 'f',
 'g',
 'h',
  .
  .
  .
 'z',]

この中のd~zまでを対象範囲としたfor文でそれぞれのワークシートの内容をpandasで読み込みたいです。

自分で試したこと

worksheetsがリスト形式なので

for worksheet in worksheets:
  _df = pd.read_excel(file_path[0],sheet_name=worksheet[3:28])

など書いてみたのですが、Worksheet named '○○' not foundというエラーが出てしまいます。
そもそもの構文自体におかしなところは多数あると思うのですが、どなたかご教示くださるとありがたいです。

0

3Answer

こうでしょうか?

import openpyxl
import pandas as pd

file_path = './example.xlsx'

worksheets = openpyxl.load_workbook(file_path).sheetnames

for worksheet in worksheets:
  sheet_body = pd.read_excel(file_path,sheet_name=worksheet)
  print(sheet_body)

実行例

image.png

0Like

ループ元の要素のところで「d」以降のシート名を取ってくるように指定すればうまくいくと思います。

for worksheet in worksheets[3:]:
  df = pd.read_excel(file_path[0],sheet_name=worksheet)

image.png

0Like

お返事遅くなって申し訳ありません、お二方ともとても参考になる回答、ありがとうございます!
ループ元要素をd以降にして対応できました!

0Like

Your answer might help someone💌