-
[Python] 여러개의 Excel / CSV 파일 내 vba 매크로를 순차적으로 실행하기전공/자동화 프로그램 2020. 9. 26. 10:46
여러 개의 파일(EXCEL or CSV)을 순차적으로 열고 vba 매크로를 돌릴 때 ‘매크로가 어느 파일에 존재하느냐’에 따라 2가지 경우로 나뉠 수 있을 것 같습니다.
1) 주어진 파일 각각에 엑셀 매크로가 심어져 있는 경우(엑셀 파일 내 매크로가 저장이 되려면 확장자가 xlsm 또는 xlsb이어야 합니다. 즉 모든 파일의 확장자가 xlsm, xlsb 인 경우)
이 경우 비교적 간단한 코드로 실행이 가능합니다.# 파일을 불러올 때 사용하는 패키지 import glob import os # 엑셀 사용을 위한 패키지 import xlwings as xw #엑셀을 띄우지 않고 실행 app = xw.App(visible=False) #파일 확장자가 xlsm인 파일만 순차적으로 실행 for file in glob.glob("./*.xlsm"): fileName_only = os.path.basename(file) #파일명 wb = xw.Book(fileName_only) #살행하고자 하는 매크로 이름(매크로 마다 이름이 바뀔 경우 코드 수정 필요) macro_vba = wb.app.macro("'"+fileName_only+"'!ihavemacroo") macro_vba() wb.save() #파일 저장과 닫기 wb.close()
2) 엑셀 매크로 파일(xlsm)과 데이터파일(csv)이 따로 있는 경우
이 경우에는 1번 방법보다는 구현 코드가 좀 더 필요합니다. 매크로 파일 내에서 CSV파일 데이터를 불러오는 등 매크로가 어떻게 구현되어 있느냐에 따라 추가 작업이 필요하기 때문입니다. 따라서 향후 제작 시에도 매크로 구현 내용을 참고하여 코드를 작성해야 합니다.# 파일을 불러올 때 사용하는 패키지 import glob import os # 엑셀 사용을 위한 패키지 import xlwings as xw import pandas as pd # 엑셀을 띄우지 않고 실행 app = xw.App(visible=False) # 파일 확장자가 csv인 파일만 순차적으로 실행 for file in glob.glob("./*.csv"): fileName_only = os.path.basename(file) # 파일명 # --------------[추가구현]-------------- # csv내 데이터를 xlsm파일에 붙여넣기 csv_file = pd.read_csv(fileName_only, index_col='idx') wb = xw.Book('samplefile.xlsm') # Sheet2 - xlsm 파일을 열었을 때 바로 보이는 시트명 적기 wb.sheets['Sheet2'].range('A1').value = csv_file # ------------------------------------ # xlsm파일 내 hello 매크로 실행 macro_vba = wb.app.macro("'samplefile.xlsm'!hello") macro_vba() wb.close() print("엑셀 파일 내 작업 완료를 클릭해주세요") print("모든 파일 작업 끝")
'전공 > 자동화 프로그램' 카테고리의 다른 글
[개발] Editing 프로그램 개발 에피소드_string 내에서 사칙연산 구분하기 (0) 2021.01.26 장기요양 급여제공계획서 list 자동화 프로그램 (0) 2020.09.15