前提・実現したいこと
python初学者です。
python,openpyxlを用いてExcel作業の自動化について取り組んでいます。
指定した列において、ある単語(要素を取りまとめるグループのような意味を持つ)が入ったセルから何かデータが記入されたセルが続きます。(下記コード参照)
セルが続いていくと最後は空白セルに到着します。
到着した際、ある単語が入ったセル行から空白までの数をカウントしたいです。
このときある単語と空白は除きます。
実際にコードを書き予想した結果は得られたのですが冗長なものになってしまいました
何か別のやり方等あれば、後学のために参考にしたいです。
恐らく関数を作ってあげればよいのですが、、、有識者の方のご意見をお聞きしたいです。
ところどころ危ない所がありますが、ぜひ良ければ添削の程よろしくお願いいたします。
ソースコード
import os import openpyxl as px import re #--------------------------------------------------------------- # 出力結果の参考 #-------------------------------------------------------------- print("陸上部/出力してほしい数 : 7") print("野球部/出力してほしい数 : 4") print("写真部/出力してほしい数 : 2") in_path = r"C:\Users\---\Desktop\MyPandas\book.xlsx" wb = px.load_workbook(in_path) ws = wb["Sheet1"] # シート内のデータ確認 def print_data(ws): print("") for row in ws.iter_rows(values_only=True): print(row) print("") print_data(ws) #------------------------------- # 名前欄に入っている各部活の人数をカウント #-------------------------------- # 用語の定義 col_start_idx = 2# B列を探索 # それぞれの部員数 # 空白が含まれるため、その分引く tf_counter = 0 - 1 bb_counter = 0 - 1 pic_counter = 0 - 1 # 2列目で陸上部の部員数をカウント for a in range(1,30): name_list = ws.cell(row = a, column = col_start_idx).value if "陸上部" == name_list: start_tf = a + 2# 部活名と名前分,+ 2 を加える for a_tf in range(start_tf, 30): name_list_tf = ws.cell(row = a_tf, column = col_start_idx).value tf_counter += 1 if name_list_tf is None: print("陸上部員数↓") print(tf_counter) print("") break elif "野球部" == name_list: start_bb = a + 2 for a_bb in range(start_bb, 30): name_list_bb = ws.cell(row = a_bb, column = col_start_idx).value bb_counter += 1 if name_list_bb is None: print("野球部員数↓") print(bb_counter) print("") break elif "写真部" == name_list: start_pic = a + 2 for a_pic in range(start_pic, 30): name_list_pic = ws.cell(row = a_pic, column = col_start_idx).value pic_counter += 1 if name_list_pic is None: print("写真部員数↓") print(pic_counter) print("") break
出力結果
陸上部/出力してほしい数 : 7 野球部/出力してほしい数 : 4 写真部/出力してほしい数 : 2 (None, '陸上部') (None, '名前') (None, '布川') (None, '結城') (None, '溝井') (None, '福田') (None, '儀藤') (None, '加藤') (None, '熊田') (None, None) (None, '野球部') (None, '名前') (None, '矢部') (None, '相川') (None, '高田') (None, '郡山') (None, None) (None, '写真部') (None, '名前') (None, '高山') (None, '不見維持') 陸上部員数↓ 7 野球部員数↓ 4 写真部員数↓ 2
補足情報(FW/ツールのバージョンなど)
win 10
python 3.8.3
openpyxl 3.0.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。