エクセル複数ファイルのシートを1シートにまとめるコード[Python][openpyxl]
「python openpyxl 複数ファイル 集約」などで検索してもこれ!という記事がなかったため、自分で解決した後、自分で書くことにしました。
集計ツールなどからログファイルがエクセル形式で複数出力され、これを毎度開いて任意のシートからコピペしなくてはいけないことが手と眼の疲れにつながるので書いてみたコードです。
粗々ですが、これでログファイルから10行づつ取り出して別の1ファイルに集約できるようになったので、シェアしますね。
今回書いてみたコード
どんどんコピペして使って改造もやってみてください。
#準備
from openpyxl import load_workbook
#読み込むファイル(ワークブック)のリスト
wbname = ['logfile1.xlsx','logfile2.xlsx']
#まとめ先として既存のワークブック(空推奨)
wb1 = load_workbook(filename='newfile1.xlsx')
ws1 = wb1['Sheet1']
#ワークブックのリストからファイル名を読み込みループする
for n in range(len(wbname)):
wb2 = load_workbook(wbname[n])
ws2 = wb2['Sheet1']
#シートに貼る
for i in range(1,10):
for j in range(1,3):
ws1.cell(row=i,column=j+2*n).value = ws2.cell(row=i,column=j).value
#集約したワークブックに名前をつけて保存
wb1.save(filename = 'result.xlsx')
#終了表示
print('処理完了')
.pyを実行すると起こること
wbnameにあるファイルの2列x10行がresult.xlsxファイルにコピーされます。
前提
Python3.xにopenpyxlを導入済みの環境で動きます
取り込むエクセルファイルはSheet1にログが記載されているものとする
上記コードを記載した.pyファイルとlogfile1.xlsx、logfile2.xlsx、newfile1.xlsxの各ファイルは同じディレクトリにある状態で.pyを実行する
参考
wbname = ['','']の箇所に好きなファイル名を追記することで変更できますし、3つ以上に増やすことができます。
コピー元のnewfile1は、あらかじめ表の書式などを記載しておくこともできます。
書いてみて思ったこと
既存のお手本やopenpyxlのドキュメントでの最初の例はwbとかwsという名前になっていて、検索でヒットする事例のコードでもwbとかwsという名前を無印で使っていてドキドキでした。
これはwb1,wb2などと別の名前つけて良かったんですねー。
読んでいる本
定期的に発生するめんどくさいエクセル作業を少しづつでもPythonにやってもらいたいと思い、複数の入門書を同時読みしているところです。
スクールなどには通っていないです。勉強したことは以下記事に記載。
これまでのプログラミング歴はエクセルの延長でやってきたエクセルVBAくらいです。
この記事のコードコピペして時短できちゃった!という場合、ジュース代程度いただけると、奮発した上記の書籍代の足しになって助かります…。