見出し画像

【python】Excelの2つの表を統合

〇2つのExcelの表を一つにまとめる

pyhonを使って2つの表をマージするコードを作ってみます。
(計画)がもともと設定されていてその(実績)は別のExcelというケースでその2つを簡単に統合できるようにしてみました。

対象のExcelデータはこのコードを保存した場所の同階層に"Data"というフォルダを作りその中に保存してください。今回は'plan.xlsx'と'result.xlsx'という名前でサンプルを入れています。出来上がると同じ階層に'merge.file.xlsx'が出来上がります。

画像1

画像2

画像3

コードを下記に載せておきます。
ブログで簡単な解説もしております。
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)

この記事が気に入ったらサポートをしてみませんか?