from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import win32com.client as win32
import os
# Google Drive 인증 설정
gauth = GoogleAuth()
gauth.LocalWebserverAuth() # OAuth 인증 수행
drive = GoogleDrive(gauth)
# 다운로드 경로 설정
download_path = "xx" # 이미지가 저장될 로컬 경로
# Google Drive에서 '활동사진 첨부' 폴더 및 그 하위 폴더 내 이미지 다운로드
def download_images_from_subfolders():
# '활동사진 첨부' 폴더 가져오기
main_folder_id = "xx" # '활동사진 첨부' 폴더의 ID 입력
main_folder = drive.CreateFile({'id': main_folder_id})
# 하위 폴더들 ('photopair 222', 'photopair 223' 등) 가져오기
subfolders = drive.ListFile({'q': f"'{main_folder['id']}' in parents and mimeType = 'application/vnd.google-apps.folder'"}).GetList()
# 하위 폴더들을 이름순으로 정렬
sorted_subfolders = sorted(subfolders, key=lambda x: x['title']) # 이름순 오름차순 정렬
# 하위 폴더 처리
for subfolder in sorted_subfolders:
print(f"Processing folder: {subfolder['title']}")
# 하위 폴더의 이미지 파일 목록 가져오기 (PNG 이미지로 필터링)
image_files = drive.ListFile({'q': f"'{subfolder['id']}' in parents and mimeType contains 'image/png'"}).GetList()
image_paths = []
if len(image_files) >= 2: # 두 장 이상의 이미지가 있는지 확인
for i, file in enumerate(image_files[:2]): # 최대 2개의 이미지만 다운로드
file_path = os.path.join(download_path, f"{subfolder['title']}_image_{i+1}.png")
file.GetContentFile(file_path)
image_paths.append(file_path)
return image_paths # 첫 번째 폴더의 이미지 두 개를 리턴
else:
print(f"폴더 {subfolder['title']} 내에 이미지가 두 장 미만입니다.")
continue
print("이미지 2장이 발견되지 않았습니다.")
return None # 이미지가 두 장 이상인 폴더가 없으면 None 반환
# 한글 파일 열기 및 이미지 삽입
def insert_images_into_hwp(image_paths):
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.Open(r"C:\\Users\\wikky\\Downloads\\SWeat 튜터링 보고서 4명.hwp") # 한글 파일 경로
# 첫 번째 이미지 삽입
hwp.HAction.GetDefault("InsertImageFromFile", hwp.HParameterSet.HInsertImageFromFile.HSet)
hwp.HParameterSet.HInsertImageFromFile.FileName = image_paths[0] # 첫 번째 이미지 경로
hwp.Run("InsertImageFromFile")
# 두 번째 이미지 삽입
hwp.HAction.GetDefault("InsertImageFromFile", hwp.HParameterSet.HInsertImageFromFile.HSet)
hwp.HParameterSet.HInsertImageFromFile.FileName = image_paths[1] # 두 번째 이미지 경로
hwp.Run("InsertImageFromFile")
# 저장
hwp.SaveAs(r"C:\\Users\\wikky\\Downloads\\modified_report.hwp") # 수정된 파일 저장 경로
hwp.Quit()
# 실행
image_paths = download_images_from_subfolders()
if image_paths: # 이미지 경로가 반환되면 삽입 함수 실행
insert_images_into_hwp(image_paths)
구글 폼을 통해서 이미지를 받고, 그 이미지가 저장된 구글 드라이브 파일에서 로컬로 이미지를 설치한 다음에, 한글파일에 필드 “사진1”, "사진2"에 업로드를 하는 자동화 코드를 작성하고 있는데,
line 54, in insert_images_into_hwp
hwp.HAction.GetDefault("InsertImageFromFile", hwp.HParameterSet.HInsertImageFromFile.HSet)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
드라이브에서 사진 설치까지는 잘 되는데 사진 삽입이 안되면서 이러한 오류메시지가 발생합니다… 어느부분이 잘못된 것인지 가르쳐주시면 감사할것같습니다.