인프런 커뮤니티 질문&답변

teacher hosan님의 프로필 이미지
teacher hosan

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

[응용] 엑셀문서 값을 필드에 입력하기

12강 한글복사

해결된 질문

작성

·

875

·

수정됨

1

hwp.Run("CopyPage")

row = 2

while True:

if not ws.Cells(row, 1).Value:

hwp.Run("DeletePage")

break

else:

data = list(

ws.Range(ws.Cells(row,1),

ws.Cells(row, 4)).Value[0]

)

data[2] = data[2].strftime("%Y년 %#m월 %#d일")

필드삽입(row-2, data)

hwp.Run("PastePage")

row += 1

 

전체 카피가 되지 않고 하나의 파일만 복사되어 엑셀첫번째 열 파일만 생성됩니다.

답변 3

1

teacher hosan님의 프로필 이미지
teacher hosan
질문자

네. 이제 실행됩니다. 감사합니다~

일코님의 프로필 이미지
일코
지식공유자

잘 된다니 다행이네요^^

직접 호산님의 업무에 활용하실 때
문법이나 명령어 종류 때문에 막히실 때
언제든 질문 남겨주세요.

구현에 도움 드리겠습니다.

행복한 하루 되세요^^

1

teacher hosan님의 프로필 이미지
teacher hosan
질문자

2010입니다

일코님의 프로필 이미지
일코
지식공유자

2014 이하 버전에서는 아쉽게도 CopyPage나 PastePage 명령어가 존재하지 않습니다.

다소 번거롭지만 아래 코드를 복붙하여 다시 테스트해봐주시기 바랍니다ㅎ

설명은 간단히 주석으로 붙여놓았습니다^^

# 모듈 임포트
import win32com.client as win32

FILENAME = r"C:\Users\Administrator\Desktop\누름틀필드.hwp"

def 한글시작():
    hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
    hwp.XHwpWindows.Item(0).Visible = True
    hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
    return hwp


def 엑셀시작():
    excel = win32.gencache.EnsureDispatch("Excel.Application")
    excel.Visible = True
    wb = excel.Workbooks.Open(r"C:\Users\Administrator\Desktop\취미.xlsx")
    ws = wb.Worksheets(1)
    return excel, wb, ws


def 필드삽입(index, value):
    """
    필드삽입 함수 정의
    """
    field_list = ["이름", "성별", "생일", "취미"]
    for idx, field in enumerate(field_list):
        hwp.PutFieldText(f"{field}{{{{{index}}}}}", value[idx])


def 쪽붙이기(file):
    """
    PastePage 액션 대신 정의한 함수(한/글 2014 이하 버전용)
    """
    hwp.HAction.GetDefault("InsertFile", hwp.HParameterSet.HInsertFile.HSet)
    hwp.HParameterSet.HInsertFile.filename = file
    hwp.HAction.Execute("InsertFile", hwp.HParameterSet.HInsertFile.HSet)


if __name__ == '__main__':
    hwp = 한글시작()
    excel, wb, ws = 엑셀시작()
    
    # 엑셀에서 데이터 가져오기
    data = [list(i) for i in ws.UsedRange()[1:]]  # 제목 행은 제외
    
    # 누름틀페이지 복사하기
    for i in range(len(data)):
        쪽붙이기(FILENAME)  # 페이지 끼워넣기
        hwp.HAction.Run("BreakPage")  # 쪽 나누기
        hwp.HAction.Run("MoveDocBegin")  # 문서 처음으로 이동
    hwp.Run("Delete")  # 빈 페이지 삭제
    hwp.Run("Delete")  # 빈 줄바꿈 삭제
    
    for idx, row in enumerate(data):  # enumerate함수는 for문 안에서 data의 인덱스와 요소를 동시에 가져올 수 있음
        row[2] = row[2].strftime("%Y년 %#m월 %#d일")  # 먼저 날짜 형식을 "1964년 2월 2일" 방식으로 변환
        필드삽입(idx, row)  # idx번째 페이지 누름틀에 row의 데이터를 삽입

image

1

일코님의 프로필 이미지
일코
지식공유자

혹시 어떤 버전의 아래아한글을 사용하고 계세요?^^

teacher hosan님의 프로필 이미지
teacher hosan

작성한 질문수

질문하기