毎月の試算表が列ごとに記されており、新しい月の試算表は表の最大(右)列のひとつ右の列に書き込まれていきます。
では表の最大列はどのように取得したらよいのでしょうか?
通常はmax_columnで取得できますが、表からはずれて右側に文字または書式が設定されている場合、その列を最大列と認識してしまいます。
すると書き込みはその右側の列に書き込まれてしまいます。
上の図では、表の最後は先月(4月)の書き込みがされているD列なので、当月(5月)分としてはE列に書き込みたいところです。
しかし、G4にグレー色の書式が設定されているため、G列を表の最後の列と認識してしまい、その右の列、つまりH列に5月分が書き込まれてしまっています。
表からはずれて文字入力や書式が設定されていても、表の最終列を認識するためそれに対応する関数を作成することにします。
最大列を取得する関数を作る
書式が設定されていてもデータがなければ空列とみなすように作成します。
def remove_right_none(lst): # 関数名
count = len(lst) # ①
for item in reversed(lst): # ②
if item.value is None: # ③
count = count – 1 # ③
else: # ④
break # ④
return count # ④
① 引数に指定されたlstの長さをカウントする
② 最後のセルからひとつづつitem変数に入る
③ そのセルが空白ならばカウントを1つ減らず
④ セルが空白でなければ処理は終了して、その時点のセルの数を返す(それが空白列を除いた最大列となる)
最大列を取得する関数ができたところで、さっそく使用してみます。
作成した remove_right_none( ) 関数を次のように利用します。
# ワークシートの取得
ws_2 = wb[“合計残高試算表_2”]
# 各行の最大列うち、最も大きい列を取得
data_column_num_2 = max([remove_right_none(row) for row in ws_2.rows])
1.シートの行から1行づつ取り出しrow変数へ代入する。
2.そのrow(1行分)が関数の引数となりremove_right_none( )関数で処理され列数が返る。
3.すべての行につき関数で処理された後、max( )によりその中から1番大きい列数が最大列としてdata_column_num_2へ代入される。
これで表の最大列(上記図のD列)が取得されました。