Pythonでエクセルファイルの内容を別のエクセルファイルにコピー&ペーストしたい
Pythonでエクセルのファイルを二つ読み込み、データの一部ををコピー&ペーストしたい
ここに解決したい内容を記載してください。
Pythonで以下のプログラムを書こうと考えています。
1 業界名を入力
2 データ_業界名のエクセルを読み込む
3 AとBの列を記入しているところまで読み込む
4 A2からデータのないセルまで以下を繰り返す
・A列にある名前と同じ名前のエクセルファイルを開く
・B列と同じ日付があった場合、該当セルの一つ下から二つ上まで行ごとコピーする
・データ_業界名のエクセルの企業名のシートにペーストする。
・もし前の行にデータがある場合は一行開けてペーストする
5 A2からデータのないセルまで以下を繰り返す
・A列にある名前と同じ名前のシートに移動する。
・B~H、J、K、M列を削除する。
うまく文字で伝えることができないので、写真をつけて説明します。
実行したプログラム
chatGPTを使用して書いてもらったプログラムが以下になります。
import openpyxl
from google.colab import drive
from openpyxl.styles import Alignment
# Google ドライブをマウント
drive.mount('/content/drive')
# 入力内容:業界名の入力
industry_name = input("業界名を入力してください: ")
# Google ドライブ上の特許価値ファイルのパス
drive_file_path = '/content/drive/My Drive/特許価値_{}.xlsx'.format(industry_name)
# 特許価値のエクセルファイル読み込み
patent_excel = openpyxl.load_workbook(drive_file_path)
patent_sheet = patent_excel.active
# 企業名と日付データを読み込む
data = []
for row in patent_sheet.iter_rows(min_row=2, max_col=2, values_only=True):
data.append((row[0], row[1]))
# エクセルファイルの処理
for company_name, date_str in data:
company_excel_name = '{}.xlsx'.format(company_name)
company_excel_path = '/content/drive/My Drive/{}'.format(company_excel_name)
try:
company_excel = openpyxl.load_workbook(company_excel_path)
print('{} のエクセルファイルを開きました。'.format(company_excel_name))
except FileNotFoundError:
print('{} のエクセルファイルが見つかりません。'.format(company_excel_name))
continue
company_sheet = company_excel.active
for row in company_sheet.iter_rows(min_row=2, max_col=2, values_only=True):
if row[0] == date_str:
start_row = company_sheet.max_row - company_sheet.min_row + 1
end_row = start_row + 1
while company_sheet.cell(row=end_row, column=1).value is not None:
end_row += 1
new_row = [date_str] + list(row[1:])
if company_name not in patent_excel.sheetnames:
patent_sheet = patent_excel.create_sheet(title=company_name)
patent_sheet.append(['日付'] + [chr(i) for i in range(66, 82)]) # BからPまでの列を追加
else:
patent_sheet = patent_excel[company_name]
for col_idx, value in enumerate(new_row, start=1):
patent_sheet.cell(row=patent_sheet.max_row + 1, column=col_idx, value=value)
patent_sheet.cell(row=patent_sheet.max_row, column=col_idx).alignment = Alignment(horizontal='center')
patent_excel.save(drive_file_path)
break
company_excel.close()
# シートの削除と整形
for company_name, _ in data:
company_excel_name = '{}.xlsx'.format(company_name)
try:
company_excel = openpyxl.load_workbook('/content/drive/My Drive/{}'.format(company_excel_name))
except FileNotFoundError:
continue
company_sheet = company_excel.active
if company_name in company_excel.sheetnames:
company_sheet = company_excel[company_name]
company_sheet.delete_cols(2, 8) # BからH、J、K、Mまでの列を削除
company_excel.save('/content/drive/My Drive/{}'.format(company_excel_name))
company_excel.close()
print('処理が完了しました。')
実行後
これを実行することはできました。しかし、上記で書いたプログラムの流れの4と5、写真で言うと2枚目からが成功できていないのか、データファイルを確認すると何も変わっていません。どのように変更すればデータをコピーして貼り付けることができるのか教えていただきたいです。
追記
どこが動いているか確認するため間にprintを入れて確認したところ、ファイルを開いた後からシートの削除と整形をするまで何も動いておらず、すぐにファイルを閉じてしまっていました。