やりたい事
やりたい事は作業フォルダ内の各製品フォルダの中に存在する加工指示書を1つのフォルダにまとめたい。


kako_test2.exeファイルをダブルクリックすると新しくoutputフォルダが作成され
その中に各製品の加工指示書が保存される。


●加工指示書.xlsxの中身イメージは下記

※仕事で使用している実際の加工指示書は表示できないので上記はイメージです。
実際にPythonで書いたコード
import glob
import openpyxl
import os
import shutil
import re
from datetime import datetime # ← 日付用を追加
# 保存先ディレクトリ名
output_dir = "output"
# 保存先ディレクトリがなければ作成
os.makedirs(output_dir, exist_ok=True)
# ファイル探索
file_list = glob.glob("./*/加工指示書.xlsx")
# 日付(yyyy-mm-dd)のみ取得
today_str = datetime.today().strftime("%Y-%m-%d")
if not file_list:
print("加工指示書ファイルが見つかりませんでした。")
else:
for filepath in file_list:
try:
# ワークブックを読み込む
wb = openpyxl.load_workbook(filepath, data_only=True)
sheet = wb.active
# 元のフォルダ名を取得(ファイル名の一部に使う)
folder_name = os.path.basename(os.path.dirname(filepath))
# セルの値を取得(例: B2セル)
cell_value = sheet["B5"].value # 任意のセル指定可能
wb.close()
# 日時型なら日付に変換
if isinstance(cell_value, datetime):
cell_value = cell_value.strftime('%Y-%m-%d')
elif cell_value is None:
cell_value = "未記入" # セル値がNoneなら空文字にする
# ファイル名に使えない文字を除去
safe_value = re.sub(r'[\\/*?:"<>|]', '_', str(cell_value))
# 新しいファイル名を作成(例: 加工指示書_A.xlsx)
new_filename = f"加工指示書_{folder_name}_{safe_value}.xlsx"
save_path = os.path.join(output_dir, new_filename)
# 画像も含めてコピー
shutil.copy(filepath, save_path)
print(f"{filepath} を {save_path} に保存しました。")
except Exception as e:
print(f"{filepath} の処理中にエラーが発生しました: {e}")
上記のプログラムをPyInstaller で .exe 化しました。
行き詰まった点
保存して閉じるのを以下のようにしていたが
# 保存
wb.save(save_path)
wb.close()
加工指示書.xlsx内にワークサイズなどの図による指示がされているが、図だけ保存されなかった。
import shutil
# 画像も含めてコピー
shutil.copy(filepath, save_path)
print(f"{filepath} を {save_path} に保存しました。")
画像を含めてコピーできるように上記のように変更した。
コメント