해결된 질문
작성
·
780
답변 2
2
예시코드입니다.
아래와 같은 문서가 있을 때(1.png, 2.png, 3.png, 4.png가 삽입되어 있습니다.)
미리 짜둔 아래 함수를 실행하면
위와 같이 파일명이나 삽입순서로 이미지를 선택할 수 있습니다.
그럼 이번엔
이미지를 지우고 원문자를 삽입하는 작업도 간단히 진행해보겠습니다.
이제 코드 전체를 보여드리겠습니다.
(너무 길다고 놀라지 마시고 차근차근 읽어보시면 좋겠어요ㅎㅎ)
이 중 몇 개는 위 예제에서 사용하지 않은 함수입니다.
import os
import xml.etree.ElementTree as ET
import win32com.client as win32
def hwp_init():
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
return hwp
def save_as_hml():
hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
hwp.HParameterSet.HFileOpenSave.filename = hwp.Path.replace("hwpx", "hml")
hwp.HParameterSet.HFileOpenSave.Format = "HWPML2X"
return hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
def get_image_dict():
save_as_hml()
tree = ET.parse(hwp.Path.replace(".hwpx", ".hml"))
root = tree.getroot()
total_count = int(list(root.iter("BINDATALIST"))[0].attrib["Count"])
image_dict = {list(root.iter("SHAPECOMMENT"))[i].text.split("\n")[1].split(": ")[1]: i for i in range(total_count)}
os.remove(hwp.Path.replace(".hwpx", ".hml"))
return image_dict
def select_image_by_order(order):
hwp.Run("Cancel")
ctrl = hwp.HeadCtrl
count = 0
while ctrl:
if ctrl.UserDesc == "그림":
if order == count:
hwp.SetPosBySet(ctrl.GetAnchorPos(1))
hwp.FindCtrl()
return
count += 1
ctrl = ctrl.Next
return False
def select_image_by_filename(filename):
hwp.Run("Cancel")
order = image_dict[filename]
ctrl = hwp.HeadCtrl
count = 0
while ctrl:
if ctrl.UserDesc == "그림":
if order == count:
hwp.SetPosBySet(ctrl.GetAnchorPos(1))
hwp.FindCtrl()
return
count += 1
ctrl = ctrl.Next
return False
def get_image_ctrl_dict():
image_ctrl_dict = {}
hwp.Run("Cancel")
ctrl = hwp.HeadCtrl
count = 0
while ctrl:
if ctrl.UserDesc == "그림":
image_ctrl_dict[count] = ctrl
count += 1
ctrl = ctrl.Next
return image_ctrl_dict
def 원문자삽입(num):
hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
hwp.HParameterSet.HInsertText.Text = chr(9311 + num)
return hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
if __name__ == "__main__":
hwp = hwp_init()
hwp.Open(r"C:\Users\Administrator\Desktop\이미지명\이미지명으로탐색.hwpx")
image_dict = get_image_dict()
image_ctrl_dict = get_image_ctrl_dict()
for i, j in image_dict.items():
# 파일명이 숫자로만 이뤄져 있으면?
if i.split(".")[0].isdigit():
ctrl = image_ctrl_dict[image_dict[i]]
# 해당 위치로 이동
hwp.SetPosBySet(ctrl.GetAnchorPos(1))
# 이미지 삭제 후
hwp.DeleteCtrl(ctrl)
# 파일명에 따라 원문자 삽입
원문자삽입(int(i.split(".")[0]))
혹시 이해가 잘 안 되는 부분이 있다면
자유롭게 댓글 남겨주세요.
상세하게 설명드리겠습니다.
검토해보시고 추가로 필요하신 부분 알려주세요ㅎ
행복한 하루 되세요^^
1
정진님 안녕하세요?^^
파일명으로 이미지 컨트롤을 찾는 기능은
간단한 함수들의 조합으로 제작 가능합니다.
제가 정진님 질문을 이해하기로는
(예를 들어)
"1.png"가 이미지 원번호 ①이고,
"2.png"가 이미지 원번호 ②인데,
이를 각각 텍스트 원번호 ①과 ②로 교체하시겠다는 말씀 같은데
맞나요?ㅎ
제가 오늘 중으로 예제코드를 짜서 한 번 보여드려보겠습니다.
와우... 감사합니다!!
코드를 보는 것만으로도 많은 공부가 됩네요!(수강료를 올리셔야,,,ㅎㅎㅎ)