毎月、報告用などで同じ形式で保存しているExcelファイルがあってそのファイルをまとめて一つのファイルにしたい要件がありました。1件ずつコピペして貼り付けていくのは、精神的にきついのでPythonでさくっと結合できないか調べたところ結構簡単だったので紹介したいと思います。
前提条件
今回は以下の場合であることが前提条件としています。
- 結合するファイルは同じ形式(列数など)が同じであること。
- シート名が同じであること
- 拡張子はすべてxlsxであること
- 結合するファイルがすべて同一フォルダに存在していること
- 各ファイルにヘッダーなどがある場合は、後で削除する。
ソースコード
さくっとやりたかったのでJuyter Labで記述してそのまま実行する形にしました。
ファイル名はmerge.ipynbとしています。pandasライブラリはExcelのデータだけでread_excelメソッドだけで
簡単に読み込みことが可能です。
import pandas as pd
from pathlib import Path
# 結合したファイルが保存されているフォルダ
excel_files_directory = r'C:\xxxxxx\xxxxxx'
# 同一名のシートを縦に結合するためのデータフレームを初期化
combined_df = pd.DataFrame()
# ディレクトリ内のExcelファイルを取得
for excel_file_path in Path(excel_files_directory).glob('*.xlsx'):
# フォルダ内のExcelの指定したシート名の内容を読み込む
excel_df = pd.read_excel(excel_file_path, sheet_name='シート名')
# 縦に結合する
combined_df = pd.concat([combined_df, excel_df], axis=0, ignore_index=True)
# 結合したデータフレームを同一フォルダのall.xlsxに書き出す
combined_excel_path = r'C:\xxxxxxx\xxxxxx\all.xlsx'
combined_df.to_excel(combined_excel_path, index=False)
print(f': {combined_excel_path}に書き出しました。')
上記ソースで結合したファイルが保存されているフォルダとシート名及び書き出すファイル名のフルパスを
指定するだけでサクッと結合されます。各ファイルに共通のヘッダーなどがある場合は、ヘッダーを削除する
必要がありますが、1ファイルずつコピペするよりは全然楽ちんです。
また、openpyxlのライブラリなどを使うと、計算式や罫線などもコピーできたりしますが今回は割愛します。
コメント