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

schnabel님의 프로필 이미지
schnabel

작성한 질문수

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

[꿀팁] 기존에 열려있는 한/글 프로그램을 파이썬으로 제어하기

문서 A의 내용을 문서B에 옮기는 방법

해결된 질문

작성

·

1.3K

1

문서A의 내용을 문서B에다 전체 복사넣기 하다보니 문서A에서 적용된 폰트들이 다 깨져서 파이썬으로 활용하고자 합니다.

제목 그대로 문서A의 내용(텍스트, 그림, 표 등)을 문서B에다 옮기는 기본 방법은 무엇인지요?

답변 2

2

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

제가 가장 자주 사용하는 방법은 두 가지인데,

①쪽 복사/쪽 붙이기 또는 ②문서 끼워넣기(Ctrl-O)입니다.

버전과 상관없이 잘 동작하는 방법은 문서 끼워넣기이므로

문서끼워넣기에 대해 간략히 설명드리겠습니다.

A문서는 아래와 같고

imageB문서는 아래와 같을 때

image

A문서를 열어둔 상태에서 문서를 삽입하고자 하는 곳에 커서를 옮긴 후

문서끼워넣기를 실행하시면 아래와 같은 과정으로 문서가 끼워넣어집니다.

image 이 때 보시는 바와 같이 글자모양, 문단모양, 스타일 및 쪽 모양 등을 유지할 수 있는

옵션이 있으므로, 필요시 체크하시면 됩니다.

또한 이 액션은 스크립트매크로, 또는 파이썬으로도 실행 가능합니다.

def 문서끼워넣기(file):
    hwp.HAction.GetDefault("InsertFile", hwp.HParameterSet.HInsertFile.HSet)
    hwp.HParameterSet.HInsertFile.KeepSection = 1
    hwp.HParameterSet.HInsertFile.KeepCharshape = 1
    hwp.HParameterSet.HInsertFile.KeepParashape = 1
    hwp.HParameterSet.HInsertFile.KeepStyle = 1
    hwp.HParameterSet.HInsertFile.filename = file
    return hwp.HAction.Execute("InsertFile", hwp.HParameterSet.HInsertFile.HSet)

 

혹, 한/글 2014 이상의 버전을 사용하고 계신다면

문서B 1페이지부터 차례대로 hwp.Run("CopyPage") 명령 후

문서A 에서 hwp.Run("PastePage")로 쪽붙이기를 하시면

문서서식이나 배경, 스타일 등이 유지된 채로 페이지가 붙여넣기 됩니다.

단, 한 페이지씩만 붙이기가 되므로 while문이나 for문을 적절히 사용하셔야 합니다^^

도움이 되었길 바랍니다.

행복한 하루 되세요ㅋ

schnabel님의 프로필 이미지
schnabel
질문자

친절한 설명 감사드립니다.

한가지 더 여쭤봅니다. 전체 페이지나 문서 전체외에 문서의 일부 내용을 다른 문서로 옮기는 방법은 있는지요?

파이썬에서 문서를 A, B를 열고 A에서 일부 카피한 텍스트나 개체 등을 B로 옮기는 방법입니다.

1

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

텍스트나 컨트롤을 부분적으로 복사붙여넣기하는 몇 가지 방법이 있는데,

그 중 가장 쉬운 방법은 역시 Copy&Paste입니다.

문서 A에서 원하는 부분을 선택하신 후에 hwp.Run("Copy")를 실행하시고,

문서 B에서 붙여넣고자 하는 부분으로 커서를 옮긴 후에 hwp.Run("Paste")를 실행하시면 됩니다.

문서A = hwp.XHwpDocuments.Item(0)
문서B = hwp.XHwpDocuments.Item(1)

문서A.SetActive_XHwpDocument()  # 문서A 활성화
hwp.SetPos(2, 3, 0)  # 표 내부 "A문서입니다" 시작부분
hwp.Run("MoveSelParaEnd")  # 해당문단 끝까지
hwp.Run("Copy")  # 클립보드 복사

문서B.SetActive_XHwpDocument()  # 문서B 활성화
hwp.SetPos(2, 2, -1)  # 반갑습니다. 끝부분에 커서 놓고
hwp.Run("Paste")  # 클립보드 붙여넣기

image(이미지 우클릭 후 "새 탭에서 이미지 열기"를 클릭하시면 큰 이미지로 보실 수 있습니다.)

 

참고로 클립보드의 내용 중 텍스트 일부를 변경하여 붙여넣고자 하신다면

파이썬의 pyperclip 모듈을 활용하시면 됩니다. (다만, 서식은 유지되지 않습니다.)

서식을 유지하시려면 복사할 본문의 텍스트를 수정한 후 hwp.Run("Copy")를 실행하셔야 합니다.

import pyperclip as cb
    
문서A = hwp.XHwpDocuments.Item(0)
문서B = hwp.XHwpDocuments.Item(1)

문서A.SetActive_XHwpDocument()  # 문서A 활성화
hwp.SetPos(2, 3, 0)  # 표 내부 "A문서입니다" 시작부분
hwp.Run("MoveSelParaEnd")  # 해당문단 끝까지
hwp.Run("Copy")  # 클립보드 복사

cb.copy(cb.paste().replace(".", "!"))

문서B.SetActive_XHwpDocument()  # 문서B 활성화
hwp.SetPos(2, 2, -1)  # 반갑습니다. 끝부분에 커서 놓고
hwp.Run("BreakPara")
hwp.Run("Paste")  # 클립보드 붙여넣기

image

위 코드는 다소 생소하실 수 있습니다.

개인적으로는 특정 부분을 클립보드로 복사해서 다른 문서의 특정 위치에 붙여넣는 기능은

활용해본 적이 손에 꼽을 만큼 적습니다.

코드는 전부 보여드렸지만,

복사할 문서의 텍스트 위치가 고정적이라면

누름틀 등 가급적 다른 방법으로 자동화할 수 있는 대안을 찾아보실 것을 권장드립니다^^;

 

도움이 되었길 바랍니다.

행복한 하루 되세요^^

schnabel님의 프로필 이미지
schnabel
질문자

아...정말 감사합니다. 덕분에 많이 배우고 알게되었습니다. 최고의 강사이십니다.

schnabel님의 프로필 이미지
schnabel

작성한 질문수

질문하기