반응형
안녕하세요
엑셀 파일 토대로 상장제작 자동화를 하다가 궁금한점이 있어서 질문합니다.
엑셀 2행에 연번, 개인/단체, 회사, 직급, 이름, 주민등록번호 등 다양한 내용이 있는데
이런 셀의 내용은 hwp상장파일에 4개 정도 정보(이름, 회사, 직급, 내용)가 들어갑니다.
이 이름, 회사, 직급, 내용의 행을 찾아서
그 밑에 내용을 채워넣는것은 어떻게 코드를 수정해야 할까요..
예제파일
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
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])
2. DRM 암호화된 경우 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 = 엑셀_시작()
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])
3. 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])
4. 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])
반응형
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[인프런QnA] 개체 여백 조정 방법 (0) | 2023.03.30 |
---|---|
[python+hwp] 자간 자동조정프로그램 리뉴얼 (0) | 2023.03.02 |
[inflearn QnA] 문항, 답안 및 표/그림 왼쪽여백 및 내어쓰기 적용 (0) | 2023.02.19 |
댓글