
【python】Excelの2つの表を統合
〇2つのExcelの表を一つにまとめる
pyhonを使って2つの表をマージするコードを作ってみます。
(計画)がもともと設定されていてその(実績)は別のExcelというケースでその2つを簡単に統合できるようにしてみました。
対象のExcelデータはこのコードを保存した場所の同階層に"Data"というフォルダを作りその中に保存してください。今回は'plan.xlsx'と'result.xlsx'という名前でサンプルを入れています。出来上がると同じ階層に'merge.file.xlsx'が出来上がります。
コードを下記に載せておきます。
ブログで簡単な解説もしております。
https://atata-studio.com/2021/06/06/python5/
import openpyxl
import pandas
from openpyxl.styles.borders import Border, Side
# pandasでデータフレームとして読み込み
df1 = pandas.read_excel('Data/plan.xlsx', index_col=1)
df2 = pandas.read_excel('Data/result.xlsx', index_col=1)
#不要な列を削除する
df1 = df1.drop('No.', axis=1)
df2 = df2.drop('No.', axis=1)
df1 = df1.add_suffix('_1.plan')
df2 = df2.add_suffix('_2.result')
#2つのリストをマージする。その際にインデックスに「計画」と「実績」を追加してソート
df = pandas.merge(df1, df2, on='名前')
df = df.sort_index(axis = 1)
# エクセルファイルを保存
df.to_excel('merge_file.xlsx')
# 設定
tempfile = 'merge_file.xlsx'
side = Side(style='thin', color='000000')
border = Border(top=side, bottom=side, left=side, right=side)
# エクセルファイルを読み込み
wb1 = openpyxl.load_workbook(filename = tempfile)
ws1 = wb1.worksheets[0]
# 列幅の調整
for col in ws1.columns:
max_length = 0
column = col[0].column
for cell in col:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
adjusted_width = (max_length + 2) * 1.2
ws1.column_dimensions[col[0].column_letter].width = adjusted_width
# 罫線を引く
for row in ws1:
for cell in row:
ws1[cell.coordinate].border = border
# エクセルを保存
wb1.save(tempfile)