inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

2행의 내용을 찾아서 복사는 어떻게 하나요??

해결된 질문

690

이탱크

작성한 질문수 2

1

1678858256141.jpg1678858256039.jpg1678858493714.jpg

안녕하세요

엑셀 파일 토대로 상장제작 자동화를 하다가 궁금한점이 있어서 질문합니다.

엑셀 2행에 연번, 개인/단체, 회사, 직급, 이름, 주민등록번호 등 다양한 내용이 있는데

이런 셀의 내용은 hwp상장파일에 4개 정도 정보(이름, 회사, 직급, 내용)가 들어갑니다.

이 이름, 회사, 직급, 내용의 행을 찾아서

그 밑에 내용을 채워넣는것은 어떻게 코드를 수정해야 할까요..

python 한컴오피스

답변 1

2

일코

이탱크님 안녕하세요?ㅎ

제가 지금 대구 출장을 왔다가 창원 내려가는 길이에요. 오늘 자정 전에 정리해서 답변을 드리겠습니다^^ 수강해 주셔서 감사합니다.

행복한 하루 되세요!!!

2

일코

  1. pandas의 DataFrame을 이용하는 방법(추천)

import win32com.client as win32
import pandas as pd


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


if __name__ == '__main__':
    hwp = 한글_시작()
    hwp.Open(r"C:\Users\smj02\Desktop\표창장_서식.hwp")
    df = pd.read_excel(r"C:\Users\smj02\Desktop\인적사항.xlsx")

    hwp.Run("CopyPage")
    for _ in range(len(df) - 1):
        hwp.Run("PastePage")

    field_list = ['연번', '회사', '직급', '이름', '내용']
    for i in range(len(df)):
        for field in field_list:
            hwp.PutFieldText(f"{field}{{{{{i}}}}}", df[field][i])

 

  1. (DRM 경우) win32.Dispatch("Excel.Application")을 이용하는 방법

import win32com.client as win32
import pandas as pd


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")
    wb = excel.Workbooks.Open(r"C:\Users\smj02\Desktop\인적사항.xlsx")
    ws = wb.Worksheets(1)
    excel.Visible = True
    return excel, wb, ws


if __name__ == '__main__':
    hwp = 한글_시작()
    hwp.Open(r"C:\Users\smj02\Desktop\표창장_서식.hwp")
    excel, wb, ws = 엑셀_시작()
    ws.UsedRange.Select()
    excel.Selection.Copy()
    df = pd.read_clipboard()
    hwp.Run("CopyPage")
    for _ in range(len(df) - 1):
        hwp.Run("PastePage")
    field_list = ['연번', '회사', '직급', '이름', '내용']
    for i in range(len(df)):
        for field in field_list:
            hwp.PutFieldText(f"{field}{{{{{i}}}}}", df[field][i])
  1. df 대신 리스트를 사용하는 방법

import win32com.client as win32
import pandas as pd


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")
    wb = excel.Workbooks.Open(r"C:\Users\smj02\Desktop\인적사항.xlsx")
    ws = wb.Worksheets(1)
    excel.Visible = True
    return excel, wb, ws


if __name__ == '__main__':
    hwp = 한글_시작()
    hwp.Open(r"C:\Users\smj02\Desktop\표창장_서식.hwp")
    excel, wb, ws = 엑셀_시작()
    data = ws.UsedRange()[1:]
    data_list = [[i[0], i[1], i[2], i[6], i[9]] for i in data]
    hwp.Run("CopyPage")
    for _ in range(len(data) - 1):
        hwp.Run("PastePage")
    field_list = ['연번', '회사', '직급', '이름', '내용']
    for idx, field in enumerate(field_list):
        for i in range(len(data)):
            hwp.PutFieldText(f"{field}{{{{{i}}}}}", data_list[i][idx])
                             

 

  1. df 대신 dict를 이용하는 방법

from time import sleep

import win32com.client as win32
import pandas as pd


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")
    wb = excel.Workbooks.Open(r"C:\Users\smj02\Desktop\인적사항.xlsx")
    ws = wb.Worksheets(1)
    excel.Visible = True
    return excel, wb, ws


if __name__ == '__main__':
    hwp = 한글_시작()
    hwp.Open(r"C:\Users\smj02\Desktop\표창장_서식.hwp")
    excel, wb, ws = 엑셀_시작()
    data = list(zip(*ws.UsedRange()))
    key_list = [i[0] for i in data]
    val_list = [i[1:] for i in data]
    data_zip = list(zip(key_list, val_list))
    data_dict = {i: j for i, j in data_zip}
    hwp.Run("CopyPage")
    for _ in range(len(data[0]) - 2):
        hwp.Run("PastePage")
    field_list = ['연번', '회사', '직급', '이름', '내용']
    for idx, field in enumerate(field_list):
        for i in range(len(data[0]) - 1):
            hwp.PutFieldText(f"{field}{{{{{i}}}}}", data_dict[field][i])

 샘플파일 링크

설명은 동영상으로 남겨보았습니다.

  1. 데이터프레임으로 표창장 채우기

  2. 엑셀파일에 DRM이 걸려 있는 경우 표창장 채우기(업로드 예정)

1

이탱크

정말 감사합니다.^^!

섹션7과 같은 수학 수식을 백지에서 시작할 때 어떻게 만들 수 있을까요?

0

79

1

hwp 병렬 작업시 클립보드 충돌문제

0

62

1

본문을 각주로 내리는 법

1

93

1

한글 자동화 삽도 삽입!!

1

390

2

한글 표 내부 위치 찾는 코드좀 알려주세요 ㅠㅠ

1

243

2

빈 문서를 새로 열때는 팝업이 안나오는데 기존 문서를 열면 팝업이 나옵니다

1

120

2

사무실 컴퓨터ㅠ

0

99

2

글자입력 여러번 실행기

0

71

1

현재 커서 문단에 아무런 내용이 없는지 확인하기

1

104

1

특정 스타일을 찾아 이동하는 방법

1

168

2

한/글 파일 open 시 '상위 버전에서...' 메세지 안 뜨게 하는 방법?

1

1145

1

win32com 으로 hwp 문자열 검색하기 문의

1

226

2

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

1

124

1

표 병합하기 관련

0

143

0

메타태그 삽입 자동화

0

191

1

스크립트 매크로 초기화 하고 싶습니다.

1

274

2

한글 창이 여러 개 존재할 때 pyhwpx 모듈로 접근하는 방법을 알고 싶습니다.

1

272

1

표안의 특정 필드에 있는 이미지를 복사하여 한글 외부에 저장하기

1

283

2

스타일 싹 다 지우고 바탕글로 통일하는 방법 문의드립니다.

1

286

0

하위의 여러 폴더 중 특정폴더의 사진만 추출하기

1

350

2

한글 수식을 자동으로 넣는 코드를 만들었는데, 수식 사이의 간격이 계속 벌어집니다.

1

687

1

보유 특허 검색 페이지에서 검색이 되지 않습니다.

1

142

1

hwp 페이지별 분할 저장하는 코드 관련 문의

0

455

0

한글 문서에 사용된 폰트명 추출

1

654

1