소개
안녕하세요?
일상의코딩 블로그를 운영중인 일코입니다.
업무자동화와 관련한 콘텐츠 제작 및 강의 등을 하고 있습니다.
강의
전체 1수강평
- 직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
- 직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
- 직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
게시글
질문&답변
2024.11.20
13-2. 녹화된 스크립트매크로를 파이썬에서 활용하는 방법 --- 강의 내용이 안보입니다.
그렇네요ㅜㅜㅜ 글이 아니라 영상을 만들어서 올렸던 걸로 기억하는데,(처음부터 올린 적이 없었던 건가?ㄷㄷㄷ)녹화해서 업데이트하겠습니다!알려주셔서 감사합니다^^
- 1
- 2
- 33
질문&답변
2024.11.20
초심자의 향후 학습방향에 대해 조언을 듣고 싶습니다~!
주현님 안녕하세요?말씀을 읽어보니 저도 자주 하는 고민과 비슷하게 느껴지기도 합니다.해결책은 아닐 수 있지만 부디 일부라도 공감해주셨으면 좋겠습니다. 저는 며칠 전부터 모종의 이유로open3d나 pymeshlab, bpy 같은 포인트클라우드와 메쉬를 다룰 수 있는파이썬 모듈과 pytorch의 pointnet 같은 모델 사용법을 공부하고 있습니다. 근데 문제는 각 모듈들이 제공하는 기능이 어마어마하게 많은데다,필터나 메쉬구축 기법 하나하나가 굉장히 깊은 이론적 배경을 요구하기 때문에처음 접하는 저한테는 굉장히 막연하게 느껴집니다. 관련 문서도 상세하지 않고,전공도 아니었니까요. 그런 이유로 제가 선택한, 빠르게 학습하는 방식은 아래와 같았습니다.필터나 디노이징, 메쉬생성 알고리즘을 하나부터 열까지 일일이 결과를 체크하는 건 불가능하다!기간 내에 프로젝트를 끝내려면 공식문서를 일독하는 것도 불가능하다!우선 이론을 떠나서 내가 완성하고 싶은 프로젝트의 프로세스를 나름 구체화해보고,검색과 챗지피티를 통해서, 프로세스별로 수행가능한 유명 알고리즘 두 개 정도씩만 골라낸다.골라낸 알고리즘들을 최소로 이해한 후, 파이썬 코드로 결과물 하나를 끝까지 완성해본다.우선 이 과정에 익숙해진다. 공장에서 타올 찍어내듯이 반복해보기도 하고. 자동화도 해본다.딱 호기심이 돋는 만큼만 추가로 학습한다. 그 이상 학습하면 너무 피곤하다. (몇 년이나 써먹겠다고)딱 이 만큼만으로 모 기관에 자문 및 동영상 교안을 납품해서 11월 20일 오늘, 소정의 사례비 수령.당분간 이 프로젝트는 계속될 듯 하니, 틈틈이 추가로 공부해 두자. 필요한 만큼만.... 기승전 N잡 이야기였습니다ㅜ완전히 동일한 케이스는 아니지만,위와 비슷한 맥락에서의 "문제해결을 위한 발췌독"을 말씀드렸던 게 아닌가 싶습니다.(지금도 그렇게 생각하고 있고요.)물론 일일이 정주행해주시고, 깊이있게 연습하고 이해해주시는 것이강사인 제 입장에선 더 뿌듯하고 기쁜 일입니다!^^ 그치만 아래아한글 메서드나, 제공하는 액션들이 굉장히 방대하기도 하고,아래아한글만 그러겠습니까? 엑셀, 오토캐드나 일러스트레이터도 그렇지요.세상에 자동화할 작업이나 문서들도 정말 무한할 만큼 다양하기 때문에,(또 그에 비하면 제 코드나 예시들은 정말 하늘을 가린 손바닥 같은 느낌이고요.)굳이 모든 케이스나 코드예제를 경험해봐야 할까? 하는 생각이 들기도 합니다. 음, 제가 드리고 싶은 조언이랄 게 있겠습니까?굳이 제 지론을 말씀드리면, "제일 간단하고 쉬운 것들만으로 문제를 해결해보자~" 정도? 입니다.이해하기 어렵고 복잡한 것들을 굳이 미리 배우지 마시고필요한 시점이 오면 그 때 질문게시판에 남기셔도 늦지 않을 거예요. 참고로 파이썬에서 가장 유명한(?) 웹프레임워크인 django의 공식문서는분량이 어마어마한 걸로 유명한데요. 현재 최신버전인 5.1 기준으로자그마치 A4용지 2,925페이지입니다.이걸 다 읽고 나서 나만의 홈페이지를 만들겠다고 선언하면다들 발벗고 만류하지 않겠습니까?^^; 하여튼 아래아한글은, 공식문서도 있고,저뿐만 아니라 아래아한글 개발자들이 직접 질문에 답글 달아주는한컴개발자포럼이라는 곳도 있고,프로그램 안에 스크립트매크로도 있고,win32com을 살짝 래핑한 pyhwpx도 있고문법이 생소하긴 해도 복잡한 건 아니어서막상 또 문제가 닥치면 곧잘 배우실 수 있을 겁니다. 하여튼 주현님~열심히 학습해 주셔서 진심으로 감사드립니다.업무자동화는 깊이있는 분야는 아니지만굉장히 실용적이기도 하고, 생산성을 극대로 끌어올릴 수 있는 지식인 만큼유용하게 잘 활용해주시면 좋겠습니다. 또 질문 있으시거나,만들어보고 싶은 프로그램 있으면 알려주세요~ㅎ행복한 하루 되세요!!!!!! 갑자기 생각났는데 시간 되시면 아래 영상도 한 번 시청해보셔요ㅎhttps://www.youtube.com/watch?v=JtthbD3uvYY문서작성을 위한 자료를 취합하거나 연산, 차트로 만드는 코드 비중이 훨씬 많기는 하지만하여튼 최종 결과물은 아래아한글 문서로 만들어집니다ㅋ(필드에 값 넣기, 필드로 이동해서 이미지 넣기 정도의 간단한 기능만 활용하신 걸로 보입니다.)
- 1
- 1
- 23
질문&답변
2024.11.20
2-6. 필드속성 수정하기 에서 "자료다운" 버튼 클릭 시 오류가 뜹니다.
헉 그렇네요ㅜㅜㅜ내부 오류인 듯 한데,섹션 시작부분에 해당 파일의 링크를 직접 달아놓았습니다.(클릭하셔서 다운받으시면 되도록 조치해 두었습니다.)다소 긴 챕터인데, 재미있게 봐주시면 좋겠습니다.감사합니다^^행복한 하루 되세요!!
- 1
- 2
- 18
질문&답변
2024.11.19
SaveAs메소드에 대한 질문입니다
성락님 안녕하세요?ㅎhwp.SaveAs는 한/글에서 제공하는 "메서드"가 맞습니다.다만 액션시퀀스의 단축명령어라고 이해하시는 게 좋겠습니다.(SaveAs 실행시에도 내부적으로는 FileSaveAs_S와 동일한 액션이 실행되기 때문입니다.)그리고 "FileSaveAs_S"는 엄밀히는 "액션"이라고 부릅니다. (메서드가 아니고요.) 각각메서드 목록은 "한글 오토메이션" 문서에서,액션 목록은 "액션 오브젝트" 문서에서,액션 실행시 파라미터 설명은 "파라미터셋 오브젝트" 문서에서 확인하실 수 있지만,(관련페이지 : https://developer.hancom.com/hwpautomation)액션 테이블과 파라미터셋 테이블을 함께 참고하면서하나의 액션(예를 들면, 블록 저장) 코드를 완성하는 것은굉장히 번거롭고 고된 일입니다. 참고로 저도 (원인모를 오류 때문에 헤매는 경우가 아니라면)액션테이블이나 파라미터셋테이블을 전혀 거의 열어보지 않습니다. 대신 스크립트매크로를 씁니다.스크립트매크로로 녹화로 코드 추출이 안 되는 기능은한컴 개발자포럼에 문의합니다. 보통 하루 이내에 한컴 개발자 분들이 답변을 달아주십니다.그래도 재현이 안 되는 액션은 과감하게 포기하고 대안을 찾습니다.(대안도 없는 액션이라면 십중팔구 문제정의부터 잘못되었을 가능성이 높다고 생각해버립시다.) 하여튼 FileSaveAs_S 액션을 녹화하는 과정은 아래와 같습니다.(사진)불필요하게 미리보기 이미지를 저장하는 PictureSaveAsAll 액션도 녹화가 되었는데, 이건 무시해도 됩니다. 녹화를 자주 하다 보면 나름의 필터링 노하우가 생깁니다. 이렇게 녹화된 코드는 jscript라는 언어 포맷입니다.function OnScriptMacro_중국어1성() { HAction.GetDefault("PictureSaveAsAll", HParameterSet.HSaveAsImage.HSet); with (HParameterSet.HSaveAsImage) { } HAction.Execute("PictureSaveAsAll", HParameterSet.HSaveAsImage.HSet); HAction.GetDefault("FileSaveAs_S", HParameterSet.HFileOpenSave.HSet); with (HParameterSet.HFileOpenSave) { FileName = "C:\\Users\\user\\Desktop\\ㅁㄴㅇㄹ.hwp"; Format = "HWP"; Attributes = 1; } HAction.Execute("FileSaveAs_S", HParameterSet.HFileOpenSave.HSet); } 파이썬으로 변환하는 방법은 간단한데,① 모든 변수는 hwp 안에 있으므로 hwp.~을 붙여주고,② jscript의 with문은 반복되는 인스턴스 이름과 속성을 축약하는 문법이므로다시 모두 전개하면,def save_block_as(): hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet) hwp.HParameterSet.HFileOpenSave.FileName = "C:\\Users\\user\\Desktop\\ㅁㄴㅇㄹ.hwp" hwp.HParameterSet.HFileOpenSave.Format = "HWP" hwp.HParameterSet.HFileOpenSave.Attributes = 1 hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)이런 모양이 됩니다. ③ 거의 완료되기는 했는데, 아직 두 가지 문제가 있습니다.먼저 FileName 속성을 filename으로 변경해줘야 합니다.win32com 단에서typelib을 파이썬 코드로 변환하는 과정에서 특정 속성명(파스칼케이스)을소문자로 치환해버리는 경우가 있습니다.두 번째로, 변환코드에는 hwp.HParameterSet.HFileOpenSave.HSet이위아래 두 번 정의되어 있습니다. (GetDefault와 Execute에서)그런데 가끔 각 HSet이 달라지는 경우가 있는데, 이 때는 오류가 발생합니다.이걸 방지하기 위해 변수(예를 들어 pset)에 담고, 해당 변수 pset을 반복해서 쓰면 됩니다. 이렇게 두 가지 방법을 적용한 최종 코드는아래와 같습니다.def save_block_as(path): pset = hwp.HParameterSet.HFileOpenSave hwp.HAction.GetDefault("FileSaveAs_S", pset.HSet) pset.FileName = path pset.Format = "HWP" pset.Attributes = 1 hwp.HAction.Execute("FileSaveAs_S", pset.HSet) 저는 보통 이런 식으로 함수(또는 메서드)로 만들고 재활용을 하는 편입니다.요약하면~① 매번 문서를 열어보기보다는, 스크립트매크로와 한컴개발자포럼을 활용② 스크립트매크로를 파이썬 코드로 변환하는 방법에 익숙해집시다.끝.
- 1
- 2
- 39
질문&답변
2024.11.18
win32com 모듈을 못 찾음
python 을 실행하시기 전에 터미널(명령 프롬프트)에서 `pip install pywin32`를 실행하셔서 모듈을 다운받아 설치하는 과정이 필요합니다. pip으로 pywin32 모듈을 설치했는데도 (드물지만) 동일한 오류가 나타날 수 있는데, 어떤 경우냐면 "여러 버전의 파이썬이 설치되고, 환경변수가 얽혀, 다른 버전의 파이썬에 pywin32가 설치되는 경우"입니다. pip도 파이썬 버전별로 만들어지니까요. 이런 경우에는 `pytyon -m pip install pywin32`라고 실행하시면 현재 폴더에서 최우선으로 실행되는 파이썬 버전의 pip으로 모듈 설치를 하게 됩니다. (아마 질문 주신 분의 경우에는 해당하지 않을 듯 합니다^^;)
- 1
- 2
- 29