
Pythonã§Exceléèšãèªååãã3æé #6
1.ã¹ã¯ãªããã®æŠèŠ
ãã®Pythonã¹ã¯ãªããã¯ããŠãŒã¶ãŒãæå®ãããã£ã¬ã¯ããªå ã®Excelãã¡ã€ã«ãåéããç¹å®ã®ããŒã¿ãæœåºããŠæ°ããExcelãã¡ã€ã«ã«çµ±åããããšãç®çãšããŠããŸãããŠãŒã¶ãŒã¯ã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãéããŠãã©ã«ããšä¿åå ãã¡ã€ã«ãéžæããã¹ã¯ãªãããèªåçã«ããŒã¿ãåŠçããŠçµæãåºåããŸãããã®ã¹ã¯ãªããã¯ãç¹å®ã®æ¥åããã»ã¹ãèªååããããŒã¿éçŽäœæ¥ã®å¹çãåäžãããããšãæå³ããŠããŸãã
2.äž»ãªæ©èœ
ã€ã³ã¿ã©ã¯ãã£ããªãã©ã«ãéžæïŒ
ãŠãŒã¶ãŒãããŒã¿ãã¡ã€ã«ãæ ŒçŽãããŠãããã©ã«ããéžæã§ããããã«ããŸãã
Tkinterã䜿çšãããã©ã«ãéžæãã€ã¢ãã°ãæäŸããŸãã
ããŒã¿æœåºãšéçŽïŒ
æå®ããããã£ã¬ã¯ããªå ã®Excelãã¡ã€ã«ãèµ°æ»ããæ¡ä»¶ã«åèŽãããã¡ã€ã«ãæ€åºããŸãã
åãã¡ã€ã«ããå¿ èŠãªããŒã¿ïŒç¹å®ã®ã·ãŒããšåç¯å²ïŒãæœåºããäžã€ã®ããŒã¿ãã¬ãŒã ã«éçŽããŸãã
æœåºããŒã¿ã«ãã¡ã€ã«åãèšé²ããæ°ããåã远å ããŸãã
é²æç¶æ³ã®è¡šç€ºïŒ
ããŒã¿ã®åŠçäžã«é²æã衚瀺ããããã®GUIãŠã£ã³ããŠãèšããŸãã
åŠçäžã®ãã¡ã€ã«ãšç·ãã¡ã€ã«æ°ã衚瀺ããŠãé²æç¶æ³ããªã¢ã«ã¿ã€ã ã§æŽæ°ããŸãã
åºåãã¡ã€ã«ã®ä¿åèšå®ïŒ
åŠçãå®äºããããŒã¿ãä¿åãããã¡ã€ã«ã®ååãšå ŽæããŠãŒã¶ãŒãæå®ã§ããŸãã
ããã©ã«ãã®åœåèŠåãšããŠåŠçæ¥ãšéžæããããã©ã«ãåãå«ãããã¡ã€ã«åœ¢åŒãšããŠExcelãæå®ããŸãã
åŠçå®äºã®éç¥ïŒ
å šãŠã®ãã¡ã€ã«ã®åŠçãå®äºããåŸãå®äºã¡ãã»ãŒãžã衚瀺ããŠãŠãŒã¶ãŒã«éç¥ããŸãã
åŠçããããã¡ã€ã«ã®æ°ãšããŒã¿ãä¿åããããã¹ããŠãŒã¶ãŒã«äŒããŸãã
äŸå€åŠçïŒ
éžæããããã©ã«ãã«Excelãã¡ã€ã«ãååšããªãå Žåããšã©ãŒã¡ãã»ãŒãžã衚瀺ãåŠçãäžæããŸãã
3.äœ¿çšæè¡
èšèªïŒ Python
äž»èŠã©ã€ãã©ãªïŒ pandas, os, tkinter, datetime
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ïŒ TkinterãçšããGUI
4.å®è¡æ¡ä»¶
é©åãªPythonç°å¢ãã»ããã¢ãããããŠããããšã
å¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããŠããããšã
åŠç察象ã®ãã¡ã€ã«ãæå®ããã圢åŒïŒ.xlsxïŒã§ããããšã
ãã®ã¹ã¯ãªããã¯ãããŒã¿åŠçã®èªååã«ããæ¥åã®å¹çåãå³ãããã«éçºãããŸãããç¹ã«ã倧éã®ExcelããŒã¿ãæ±ãæ¥åã§ãã®å¹æãçºæ®ããŸãã
5.ã¹ã¯ãªãã
import pandas as pd
import os
from tkinter import Tk, filedialog, Label, messagebox
from datetime import datetime
def select_directory(message):
"""ãã©ã«ãéžæãã€ã¢ãã°ã衚瀺ããéžæããããã©ã«ãã®ãã¹ãè¿ã"""
root = Tk()
root.withdraw() # GUIã®ã¡ã€ã³ãŠã£ã³ããŠã衚瀺ããªã
directory = filedialog.askdirectory(title=message) # ãã©ã«ãéžæãã€ã¢ãã°
root.destroy()
return directory
def save_file_dialog(default_name):
"""ãã¡ã€ã«ä¿åãã€ã¢ãã°ã衚瀺ããä¿åããããã¡ã€ã«ã®ãã¹ãè¿ã"""
root = Tk()
root.withdraw()
file_path = filedialog.asksaveasfilename(
title='ä¿åå
ãéžæããŠãã ãã',
initialfile=default_name,
defaultextension='.xlsx',
filetypes=[('Excel Files', '*.xlsx')]
)
root.destroy()
return file_path
def process_files(input_directory, output_path, sheet_name, data_range):
"""æå®ããããã©ã«ãå
ã®Excelãã¡ã€ã«ãåŠçããéçŽããããŒã¿ãæå®ããããã¹ã«ä¿åãã
sheet_name: èªã¿èŸŒãã·ãŒãå
data_range: èªã¿èŸŒãããŒã¿ã®åç¯å² (äŸ: 'A:AF')"""
compiled_data = pd.DataFrame()
files = [f for f in os.listdir(input_directory) if f.endswith('.xlsx')]
total_files = len(files)
if total_files == 0:
messagebox.showinfo("æ
å ±", "åŠçããExcelãã¡ã€ã«ãèŠã€ãããŸããã§ããã")
return
progress_root = Tk()
progress_label = Label(progress_root, text='åŠçäž...')
progress_label.pack()
progress_root.update()
for idx, filename in enumerate(files):
file_path = os.path.join(input_directory, filename)
data = pd.read_excel(file_path, sheet_name=sheet_name, usecols=data_range, nrows=1)
data['ãã¡ã€ã«å'] = filename # æ°ããåããã¡ã€ã«åãã«ãã¡ã€ã«åãæ ŒçŽ
compiled_data = pd.concat([compiled_data, data], ignore_index=True)
progress_label.config(text=f'åŠçäž... ({idx + 1}/{total_files} ãã¡ã€ã«)')
progress_root.update()
compiled_data.to_excel(output_path, index=False)
progress_root.destroy()
messagebox.showinfo("å®äº", f'åŠçå®äº: {total_files}ãã¡ã€ã«ãåŠçãããŸããã\nä¿åå
: {output_path}')
if __name__ == "__main__":
input_directory = select_directory('åŠçãããã¡ã€ã«ãå«ãŸãããã©ã«ããéžæããŠãã ãã')
if input_directory:
folder_name = os.path.basename(input_directory)
processing_date = datetime.now().strftime('%Y%m%d')
default_name = f'ããŒã¿éèš_{processing_date}_{folder_name}.xlsx'
output_path = save_file_dialog(default_name)
if output_path:
# ããã§ã·ãŒãåãšããŒã¿ç¯å²ããŠãŒã¶ãŒãèªç±ã«æå®ã§ããããã«åŒæ°ãšããŠæž¡ã
process_files(input_directory, output_path, 'éèšçš', 'A:AF')