게시글
질문&답변
2024.05.04
표너비 비율대로 키우거나 줄일 수 있는지요?
가능합니다. 많이 요청받았던 기능이기도 하고요. 다만, 경험상 정부부처 보고서나 연구원 보고서는 셀이 복잡하게 짜여진 경우가 많고, 셀 안에 이미지가 꽉 차게 들어있는 경우, 1mm 높이나 너비의 셀들이 들어있는 경우도 많아서 모든 경우에 완벽하게 작동하게 코드를 짜는 것은 쉽지 않습니다. 그래도 간단한 예시를 들어드려보겠습니다. from pyhwpx import Hwp hwp = Hwp() target = 148 i = 0 while hwp.get_into_nth_table(i): hwp.set_table_width(target) i += 1 편집할 한/글 파일을 열어 둔 상태에서 위 코드를 실행하시면 문서 내 모든 표의 너비가 target (mm)대로 맞춰집니다. (일반적으로 좌우 각 30mm 및 제본여백을 제외하고 표 바깥쪽 좌우여백이 기본 1mm씩이므로 148mm) 실행해보면, (사진) target 변수에 입력한 값대로 표들의 너비가 조절되는 것을 확인할 수 있습니다. 하지만 예외사항이 많이 발생할 수 있으므로, 적용해보시고 나서 오류가 나거나 이상하게 실행된다면 다시 질문 남겨주시기 바랍니다. 도움이 되었길 바랍니다. 감사합니다. 행복한 하루 되세요^^
- 1
- 2
- 132
질문&답변
2024.05.04
InsertPicture 관련 질문입니다.
현재는 아래아한글 오토메이션API의 InsertPucture에는 URL 이미지 삽입 기능이 제거되어 있습니다. (아마 보안 때문인 것으로 추정해봅니다.) 이와는 별개로 pyhwpx의 InsertPicture 메서드는 url의 이미지 삽입을 가능하게 해 두긴 했습니다. (사진)
- 1
- 2
- 69
질문&답변
2024.05.04
섹션0 마지막강의 질문입니다.
1) 아뇨! 괜찮습니다. 아래아한글 버전이 달라서 그렇습니다. if name.startswith("!HwpObject."): 정도로 수정하셔도 됩니다. 혹은, pyhwpx를 이용하면 아래 코드로도 기존 한/글 프로그램에 연결할 수 있습니다. from pyhwpx import Hwp hwp = Hwp().hwp 이렇게 두 줄만 실행하시면 됩니다. 2) 하여튼 이 코드를 소개드린 이유는 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") 로 아래아한글을 실행하면 항상 새 한/글 창과 빈 문서가 먼저 뜨게 되고, 편집할 파일을 Open을 통해서 불러와서 수정하고 저장하는 일련의 과정을 거쳐야 합니다. 그런데, 그냥 아래아한글 작업을 하는 중에 '이 부분은 반복 때문에 시간이 많이 걸리니까 파이썬으로 처리하는 게 좋겠다!' 라는 생각이 들었을 때 편집 중에 즉시 파이썬과 연결해서 코딩할 수 있으면 얼마나 편할까요? (기존에는 작업중이던 파일을 저장하고 한/글을 종료한 후, 파이썬으로 다시 한/글을 열어야 하잖아요..) 그래서 이 코드를 활용하면 기존 실행중인 한/글 창에 바로 연결할 수 있으니까 작업이 훨씬 빠르고 간편해질 수 있겠죠. 아래처럼요. https://www.youtube.com/watch?v=HzdUicbHmUA 그리고 pyhwpx 모듈을 이용하면 위의 긴 코드 대신 from pyhwpx import Hwp hwp = Hwp() 이 두 줄로도 기존에 실행되고 있는 한/글 창에 파이썬으로 접근해서 조작할 수 있습니다. (사진) 참고로 선택한 라인만 실행하는 파이참 단축키는 Shift-Alt-E 입니다. 도움이 되었길 바랍니다^^
- 1
- 1
- 23
질문&답변
2024.05.04
한셀은 어떻게 하죠?
다행히 한셀의 API 인터페이스는 엑셀과 거의 동일합니다. (사진) 기존 엑셀 사용자들에게 익숙한 느낌을 주기 위해 의도적으로 엑셀과 유사하게 인터페이스를 만들었다는 느낌인데요. (저는 그 점이 마음에 듭니다.) 하여튼 위 영상에서 간단히 사용한 코드는, import win32com.client as win32 hcell = win32.gencache.EnsureDispatch("HCell.Application") #%% hcell.Visible = True #%% hcell.Cells(1,1).Value = "Hello World!" #%% for i in range(2, 11): hcell.Cells(i, 1).Value = \ f"Hello {i}!" #%% 위와 같습니다. 다만 엑셀도 "엑셀프로그램 - 워크북 - 워크시트" 계층이 있듯이 한셀에도 아래와 같이 계층을 짜서 프로그래밍하시는 걸 권장합니다. import win32com.client as win32 hcell = win32.gencache.EnsureDispatch( "HCell.Application" ) #%% Visible 기본값은 False라서 실행해도 숨겨져 있습니다. hcell.Visible = True #%% 엑셀과 달리 한셀에서는 실행시점에 워크북 하나가 자동으로 만들어집니다. wb = hcell.Workbooks(1) #%% 워크시트도 하나 만들어져 있습니다. ws = wb.Worksheets(1) #%% 해당 워크시트의 Cells나 Range 등을 통해 입력하실 수 있습니다. ws.Cells(1,1).Value = "Hello world!" #%% 저장이나 닫기는 워크북 계층에서 실행하시면 됩니다. wb.SaveAs("./hello.cell") # 기본 저장 폴더 : home/Documents 한셀의 COM API 코드나 파일구조는 엑셀과 굉장히 유사하다는 장점(?)이 있어, 기타 응용프로그램이나 판다스 등에서 불러오는 방법도 엑셀과 동일합니다. 다만 openpyxl이나 xlwings 등의 엑셀 라이브러리를 사용하셔야 한다면 라이브러리 일부를 약간 수정해야 합니다. 대부분의 단순작업은 win32com으로 충분하므로 기존의 방법을 사용해보시는 것을 추천드립니다. 도움이 되었길 바랍니다. 행복한 하루 되세요^^
- 1
- 1
- 23
질문&답변
2024.05.03
파일을 복사하는 코딩을 복사해서 붙여넣기 했는데 잘 모르겠어요.
histart76님 안녕하세요?^^ 실행이 안 될 때 오류메시지(너무 길면 제일 마지막 줄 정도만이라도)를 알려주시면 더욱 원활히 답변을 드릴 수 있습니다^^ 우선, 코드가 실행되는 경로 안에 1.hwp 파일이 있어야 합니다. (1.hwp 파일 안에는 "file"이라는 필드가 있어야 하고요.) 그럼 아래와 같이 실행됩니다. (사진) 코드를 그대로 실행하셨다면 문제가 없어야 하는데 만약 첫 번째 질문에서 말씀하신 것처럼, 파이썬의 실행경로(os.getcwd()로 확인할 수 있음) 안에 1.hwp 파일이 없는 경우에는 7번 라인[shutil.copy]에서 오류가 발생할 겁니다. 1.hwp 파일을 찾지 못하니까요. (현재 파이썬 경로 안에 1.hwp가 있거나, 1.hwp 파일의 절대/상대 경로를 직접 입력해주셔야 합니다.) 그리고 두 번째 주신 질문은, shutil.copy 명령어가 복사한 파일명을 리턴하기 때문에 생성되는 파일의 이름이 출력됩니다. (물론 파일도 실제로 생성되어 있을 거고요.) os모듈 등을 통해 전체경로를 넣어주지 않으면 2.hwp~100.hwp 파일이 파이썬 실행폴더 안에 만들어집니다. 위의 코드는 1.hwp 파일이 "현재 파이썬 실행경로"안에 있다고 가정하고 코딩했기 때문에 1.hwp 파일이 다른 경로에 있는 경우에는 오류가 발생합니다. 도움이 되었길 바랍니다^^
- 1
- 1
- 33
질문&답변
2024.04.29
다단 공백감지 질문드립니다.
안녕하세요? 아래아한글에서 페이지 내 다음 단의 시작으로 이동하는 명령어는 hwp.HAction.Run("MoveNextColumn") # 다음 단으로 이동 hwp.HAction.Run("MoveColumnBegin") # 해당 단의 시작문단으로 이동 입니다. 다만 위 명령어는 동일 페이지 내에서만 이동하는 명령어입니다. 특정 페이지의 마지막 단에서 MoveNextColumn을 실행하면 False를 리턴합니다. 그래서, ① MoveNextColumn을 실행했을 때 False를 리턴하면 ② 이어서 MovePageDown을 실행해보고, MovePageDown이 True를 리턴하면 ③ MoveColumnBegin을 실행한 후 정리작업을 하고 다시 MoveNextColumn을 실행하는 식으로 반복하는 코드를 짜면 됩니다. 간단한 예시를 보여드리겠습니다. from time import sleep from pyhwpx import Hwp hwp = Hwp() hwp.MoveDocBegin() i = 0 while hwp.MoveNextColumn() or hwp.MovePageDown(): hwp.MoveColumnBegin() while hwp.MoveSelRight(): if hwp.get_selected_text(as_="str") == "": sleep(0.5) hwp.Run("Delete") else: break (사진)(빈공간을 지우는 과정을 보여드리기 위해 일부러 0.5초 sleep을 걸었습니다.) 도움이 되었기를 바랍니다.
- 1
- 2
- 71
질문&답변
2024.04.29
파이참으로 하면 결과값이 다른데 왜그런거죠?
안녕하세요? 보안모듈 팝업은 cmd에서나 파이참에서나 동일하게 안 떠야 합니다. 파이참 환경 어딘가 잘못 설정된 게 있는 것 같아요. ① 혹시, hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") 코드에 오타가 있지는 않은지 한 번 살펴봐주시고, ② 만약 코드에도 문제가 없다면,, 아래 방법으로 한 번 시도해보셔도 좋을 것 같습니다. 기존 코드(아래) 대신에 import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") hwp.Open(한/글파일/경로) 이렇게 한 번 실행해봐주시기 바랍니다. 먼저 파이썬 가상환경 프롬프트에서 pyhwpx를 설치하셔야 합니다. (venv) c:\> pip install pyhwpx 아래 코드로 실행해보세요. from pyhwpx import Hwp hwp = Hwp().hwp 다소 간편하게 실행할 수 있는 방법인데요. 기존에 한/글 프로그램이 실행되어 있다면 해당 한/글 창과 자동으로 연결해주기도 합니다. 시작방법은 다르지만, 이후 진행은 동일합니다. (사진) 추가로 궁금한 부분이 있으면 또 질문 남겨주세요. (혹시 파이참에서 실행한 코드 전체를 한 번 복사해서 보여주시면 도움을 드릴 수 있을 것 같기도 합니다^^;)
- 1
- 2
- 47
질문&답변
2024.04.29
핸드폰으로는 못보나요?
개인적으로는 모바일로 수강을 하고 있습니다. 플레이스토어 등에 인프런 앱이 있으니 설치하신 후 사용해보세요^^ 행복한 하루 되세요!
- 1
- 1
- 31
질문&답변
2024.04.24
print(hwp.GetFieldList()) 결과값에 구분자가 x02가 아닌 값이 나옵니다.
동일한 기호입니다. \x02를 저렇게 ㄱ자 기호로 표시하는 에디터가 있습니다. 특히 파이썬 기본 IDLE에서 \x02를 출력하면 저렇게 나타납니다ㅜ 그리고 가급적 IDLE는 쓰지 마시고, VSCode나 파이참커뮤니티에디션 같은 통합개발환경으로 얼른 넘어가시면 좋겠습니다. 아니면 주피터 노트북 같은 환경으로요. 분명 '갈아타길 잘했다!'고 생각하시게 될 겁니다. 화이팅입니다! 행복한 하루 되세요^^
- 1
- 2
- 54
질문&답변
2024.04.24
InsertPicture()메서드 질문
용범님 안녕하세요? 답변이 늦어 죄송합니다. hwp.InsertPicture는 거의 모든 포맷의 이미지 삽입을 지원하고 있습니다. 물론 PNG 포맷의 이미지도 지원하고 있고요. 혹시 코드 다른 부분에 오류가 있지 않았는지 검토해주시기 바랍니다^^
- 1
- 2
- 52