묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결문서 작성의 기초부터 심화까지! 한글 2022 완벽 가이드
수업내용과 관련된 자료가 없네요..
학습 관련 질문사항질문 제목은 내용을 요약해서 작성해주세요.질문 내용은 구체적이고 명확하게 작성해주세요.가능하다면 예시와 함께 설명해주세요.오류가 발생한 경우, 오류 메시지를 함께 첨부해주세요.질문에 대한 추가 정보를 제공할 수 있다면, 함께 남겨주세요.
-
미해결직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
pyinstaller 빌드 시 바이러스 탐지 문제
안녕하세요 일코님,, 업무들을 순차적으로 자동화 하는데 많은 도움을 받았습니다.이제 또 새로운 문제에 직면을 했는데요, pyinstaller로 배포파일 빌드 시 자꾸 알약에 탐지가 됩니다.직원들에게 배포하고 사용하면서 알약에 바이러스 파일로 탐지가 된 것인지 모르겠지만 어느 순간부터 탐지되어 삭제가 되네요.이것저것 조치하다가 pyinstaller -F -w 에서 -w를 제외하고 배포하니 또 탐지가 안 되었다가, 하루 지나니 제외한 파일도 탐지가 됩니다.혹시 이 경우도 있었는지요? 프로그램의 과정이 아니라 배포의 과정에서 이러니 너무 답답합니다..
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
초심자의 향후 학습방향에 대해 조언을 듣고 싶습니다~!
2-5. 문서의 필드목록 및 필드 값 취득하기강의 중 아래의 내용과 관련입니다. 이후 과정들은 배우고 익히는 데 시간이 많이 걸리지만,그리 효용성이 높지 않은,비교적 특이한 케이스에 사용되는 코드들이기 때문입니다.그래서, 여기까지 읽기를 마치고여러분의 업무를 하나씩 자동화해보시다가한/글 누름틀과 셀필드로는 해결되지 않는 문제를 만나셨을 때 다시 찾아오셔서 이후 과정을 이어 읽어주시기를 권장드립니다. 라고 말씀하셨는데요.즉, 정주행 독파 보다는 발췌독을 통한 학습을 권장하시는데..제가 궁금한 점은 이렇게 발췌독이 가능한가가 궁금합니다.무슨 말이냐면,2-5 강의까지 오는데만도 저로서는 상당히 어려웠습니다.이해 안되는 것들을 여러 번 다시 보면서 고민해 보니 지금은 그래도 1-1 ~ 2-5 강의 까지의 내용은 어느정도 이해할 수 있게는 된 거 같습니다.막혔던 부분이 그 이후의 강의 내용을 통해 해소되는 것도 여러 번 있었던 거 같습니다. (순차적으로 들어도 이해될 수 있는 순서로 강의 내용이 배치된다면 더욱 좋을 거 같다는 의견을 조심스레 드려 봅니다.)아무튼 어떤 것을 이해해야 그 보다 더 복잡한 것을 이해할 수 있고 이런 식의 느낌을 받는데요.더 어려운 기법까지 배워보고는 싶은데..제 수준에서는 발췌독으로 필요한 부분만 찾아서 듣는 것 만으로 이해가 가능할지 모르겠어서요.여기서 강의해 주신 더 어려운 기법을 배우고자 하는 코딩 초심자에게도 정주행 보다도 발췌독을 권장하실까요?두서 없는 질문이지만, 배움의 욕심은 많고 실력은 부족한 초심자에게 일코님은 어떤 조언을 주실지 들어보고 싶습니다.거북이 같이 왔지만 2-5까지 오고 또 그 과정의 코드들이 실행되는 경험을 한 게 정말 즐거웠고 감사드립니다.오래 걸리겠지만 실력을 더 높이고 싶습니다!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
SaveAs메소드에 대한 질문입니다
안녕하세요 일코님한글 블록저장에 대해 살펴보다가 궁금한 점이 생겨서 여쭤봅니다.커서를 이동해서 블록선택한 다음 hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet) hwp.HParameterSet.HFileOpenSave.filename = filename hwp.HParameterSet.HFileOpenSave.Format = "HWP" hwp.HParameterSet.HFileOpenSave.Attributes = 1 hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)이 코드를 실행하면 블록 저장이 됨을 확인했습니다.여기서 궁금한 점이 있는데요hwp.SaveAs(hwp.Path.replace('.hwp', " - 계약서.hwp"), Format="HWP")이 코드와의 차이점이 뭘까요? 실행하면 위에 코드는 블록저장이 되지만, 아래 코드는 전체 파일이 다른이름으로 저장되더라구요.FileSaveAs_S가 블록저장 메소드인가요? 혹시 가능하다면 한글API설명서 어디에 있는지도 알려주실 수 있을까요?한글API설명서도 읽을 수 있는 수준이 되고싶은데 너무 어렵네요..
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
win32com 모듈을 못 찾음
맨 첫 강의에서 win32com 모듈을 찾지 못한다고 나옵니다. 질문에서 찾아보니 한글 오토메이션이 등록이 안 되어 있어서 그렇다고 하는 글을 봐서 해결책을 따라해 봤지만 그것 마저 안 됩니다^^;; 어떻게 해야 할까요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
2-6. 필드속성 수정하기 에서 "자료다운" 버튼 클릭 시 오류가 뜹니다.
2-6. 필드속성 수정하기 에서 "자료다운" 버튼 클릭 시 오류가 뜹니다. "자료다운" 버튼 클릭 시 나타나는 오류화면은 아래와 같습니다.확인 및 "자료다운" 가능하도록 정정 부탁드립니다. 감사합니다.
-
미해결직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
13-2. 녹화된 스크립트매크로를 파이썬에서 활용하는 방법 --- 강의 내용이 안보입니다.
한글 자동화 관련해서 공부할 강의 분량이 너무 많아서 완강은 아직 엄두도 안나고, 그냥 쭉 한 번씩 구경(?)하던 중이었는데요. 13-2. 녹화된 스크립트매크로를 파이썬에서 활용하는 방법이 강의에서는 내용이 전혀 뜨지 않네요. (아래 캡처) 제 컴퓨터 환경에 문제가 있는 것일까요?
-
미해결직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 2014버전의 경우 이 기능은 사용이 어렵나요?
안녕하세요 일코님현재 문서 홀수/짝수 페이지 삭제 기능을 구현하려고 하는데요한글 2014에서는 이 기능 사용은 어려운가요?pset = hwp.CreateSet() 에서 계속 알 수 없는 오류가 나옵니다
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
f"{field}{{{{{index}}}}}": 에 대해 제가 이해한 게 맞을까요?
2-4. [응용] 엑셀문서 값을 필드에 입력하기 관련입니다. # 1. 함수 정의 def 필드삽입(index, value): # 2. 필드 목록 만들기 field_list = ["이름", "성별", "생일", "취미"] # 3. 반복문으로 필드에 데이터 넣기 for idx, field in enumerate(field_list): # 4. 한글 문서에 데이터 입력하기 hwp.PutFieldText(f"{field}{{{{{index}}}}}", value[idx]) 위의 코드에서 바로 이 부분..hwp.PutFieldText(f"{field}{{{{{index}}}}}", value[idx])그중에서도 아래의 구문이 이해하기 어려웠습니다.f"{field}{{{{{index}}}}}" 이에 대하여 제가 최대한 이해하려고 풀어 써 본 것은 아래와 같습니다. ※ 아래는 엑셀(취미.xlsx)의 캡처 f"{field}{{{{{index}}}}}":위 줄은 한글 문서 안에 있는 특정 필드를 가리키는 주소를 의미함.예를 들어, 엑셀(취미.xlsx)의 첫 행인 2행의 이름 값을 넣고 싶다면, 한글 문서에서는 그 자리가 "이름{{0}}"에 해당할 것임.또한, 엑셀의 3행의 이름 값을 넣을 자리라면 "이름{{1}}"이 될 것임. 그래서 f"{field}{{{{{index}}}}}"는,여기서 field가 "이름", "성별", "생일", "취미" 중 하나이고, index는 몇 번째 데이터인지를 나타내는 숫자임.예를 들어, 첫 행인 2행의 이름이면 "이름{{0}}", 두 번째 행인 3행의 생일이면 "생일{{1}}" 이런 식으로 만들어야 함. 그런데 여기서 왜 중괄호가 5쌍이나 있는 것인지 궁금했음. --- {{{{{index}}}}} 에 중괄호가 무려 5쌍 있음! f"{field}{{{{{index}}}}}"에서,{{ }} <----- 실제로 보여질 중괄호 { } 를 출력하기 위함 ..... ①{{ }} <----- 실제로 보여질 중괄호 { } 를 출력하기 위함 ..... ②{index} <----- 'index'라는 변수의 값 넣기 위한 부분임. 위의 ①, ②의 부분의 중첩 즉 총 4쌍의 중괄호에 의해 {{ }} 형태의 문자열이 만들어짐.결과적으로 field = 이름이고 index = 0 이라면, f"{field}{{{{{index}}}}}" 코드는 "이름{{0}}" 이라는 문자열을 만들어 냄."이름{{0}}" 이라는 형태의 문자열을 만들어 내야, 이것을 이용해서 한글 문서에 hwp.PutFieldText("이름{{0}}", value[idx]) 라는 식으로 작동되어 원하는 값을 입력할 수 있는 상태가 되기 때문임. 제가 이해한 내용이 맞을까요?중괄호도 많고 복잡해서 이해하기 어려웠는데, 저와 같은 형태로 되어야 하는 이유를 추정해 보았습니다. 답변 부탁드립니다. 감사합니다.근데 문외한의 입장에서는 이런 거 한 줄 이해하기가 원래 이렇게 어렵게 느껴지는 게 정상인가요? ㅜㅠ
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
엑셀의 2행에서 7행의 데이터를 다루는데 for row in range(2, 8): 으로 해야하는 이유는?
2-4. [응용] 엑셀문서 값을 필드에 입력하기 관련입니다. 강의 내용 중 for문 안에 ws.Range를 넣어, 엑셀문서의 모든 행을 출력해보는 내용이 있습니다.여기서 다루는 엑셀의 데이터는 아래와 같습니다. 여기서 다루는 범위는 2행(마크, 남 ...)부터 7행(슬아, 여, ...)이므로,for row in range(2,7):이라고 해야 맞는 게 아닌가 싶은데,for row in range(2,7):로 해보면 아래와 같이 원하는 결과가 아닙니다.실제 7행인 ['리사', '여', '1969년 11월 7일', '게임'] 가 빠진 결과가 나옵니다.for row in range(2,7): data = list( ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0] ) data[2] = data[2].strftime("%Y년 %#m월 %#d일") print(data) ['마크', '남', '1984년 5월 14일', 'VR'] ['빌', '남', '1955년 10월 28일', '기부'] ['일론', '남', '1971년 6월 28일', '트위터'] ['제프', '남', '1964년 1월 12일', '독서'] ['리사', '여', '1969년 11월 7일', '게임'] 반면에,for row in range(2,8):이라고 해야만 아래와 같이 엑셀의 2행부터 7행의 데이터가 원하는대로 출력이 됩니다.for row in range(2,8): data = list( ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0] ) data[2] = data[2].strftime("%Y년 %#m월 %#d일") print(data) ['마크', '남', '1984년 5월 14일', 'VR'] ['빌', '남', '1955년 10월 28일', '기부'] ['일론', '남', '1971년 6월 28일', '트위터'] ['제프', '남', '1964년 1월 12일', '독서'] ['리사', '여', '1969년 11월 7일', '게임'] ['슬아', '여', '1983년 6월 16일', '쇼핑'] 2행부터 7행의 데이터를 출력하는데 왜for row in range(2,8): 로 하는 것이 맞는 것인지 궁금합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 표의 필드명 표시방법이 있을까요?
한글문서 표 안에 셀 별로 필드명을 지정했습니다.일반 문서의 필드명은 누름틀 이름이 나오는데셀의 필드명은 표시가 되지 않더라구요..셀의 필드명 확인하기가 번거로운데 혹시 방법이나 팁이 있나 싶어 여쭤봅니다
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
data = list( ~~~ .Value) 일 경우 오류 발생 이유?
2-4. [응용] 엑셀문서 값을 필드에 입력하기 관련입니다.※ 원 질문글 올린 이후, 공부해서 이 글에 자문자답하였습니다. 검토 부탁드립니다. 감사합니다. 질문을 드리기 위하여 파이썬 콘솔(IPython 적용)에서 진행한 코드를 아래에 먼저 제시 후 말씀드리겠습니다.excel = win32.gencache.EnsureDispatch("Excel.Application") excel.Visible = True wb = excel.Workbooks.Open(r"c:\Users\user\desktop\취미.xlsx") ws = wb.Worksheets(1) row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) print(data[2]) 1984-05-14 00:00:00+00:00 row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) print(data[2]) Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\IPython\core\interactiveshell.py", line 3577, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-9-a5cbf3d139c3>", line 1, in <module> print(data[2]) IndexError: list index out of range # 아래는, data = ~~~.value[0] 일 경우의 데이터 형태를 출력해 보기 위함. data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) print(data) ['마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR'] # 아래는, data = ~~~.value 일 경우의 데이터 형태를 출력해 보기 위함. data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) print(data) [('마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR')] # 위에서 확인 결과, data = ~~~.value[0] 일 경우와 data = ~~~.value 일 경우에, # print로 데이터 출력한 결과는 거의 비슷하나, # data = ~~~.value 일 경우에는 대괄호 안에 괄호가 하나 더 있음. 위의 과정에서 아래와 같이 진행하면 물론 정상적으로 출력됩니다.row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) print(data[2]) 1984-05-14 00:00:00+00:00 하지만 아래와 같이 진행하면 오류가 납니다. 원 코드에서 ~~~.Value 뒤에 [0] 만 빼 본 것입니다.row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) print(data[2]) Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\IPython\core\interactiveshell.py", line 3577, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-9-a5cbf3d139c3>", line 1, in <module> print(data[2]) IndexError: list index out of range row = 2 로 지정했으므로,data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) 은엑셀의 (2,1)부터 (2,4)의 값을 리스트로 가져오는 것일테고,원 코드인 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) 도 역시,지정한 범위의 값들 중 첫번째 행의 값만 가져오므로,엑셀의 (2,1)부터 (2,4)의 값을 리스트로 가져오는 것은 두 경우에 같아 보이는데,[질문 1]왜 원 코드에서는 print(data[2]) 입력했을 때 정상적으로 출력이 되고,원 코드에서 [0] 만 뺀 경우에는 print(data[2]) 입력했을 때 오류가 나는 것이지요?__________________________________________________________________________________P.S. _1 --- 이 질문글 올리고 천천히 강의내용을 다시 읽어 보니,위 코드의 두 번째 라인을 보면, 리턴되는 값을 리스트로 변환하는 코드가 들어 있습니다.기본적으로 ws.Cells나 ws.Range가 리턴하는 값은 튜플인데,이 중 특정 값을 수정하기 위해 튜플을 수정 가능한 리스트 자료형으로 변환을 해 주었습니다.라는 글이 눈에 들어오네요.(※ 처음 읽었을 때는 무슨 말인지 잘 몰랐는데, 강의 내용에 다 써 있는데 제가 이해를 못했던 부분이 많네요.)[('마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR')]요러한 형태가 말씀하신 튜플이라는 것이죠? 이런 형태의 data는 값을 수정할 수 없다는 말씀이죠?반면에,['마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR']요러한 형태는 튜플이 아닌 리스트 자료형이라는 것이죠? 이런 형태만이 data 값을 수정할 수 있다는 말씀이죠?[질문 2]튜플 형태의 데이터에 대하서는 data 값을 수정할 수 없는 것 뿐만 아니라 0, 1, 2번째의 데이터를 선택하는data[0]data[1]data[2]이러한 형태의 명령어조차도 쓸 수 없는 것이죠?제가 쓴 이 내용들이 맞는지만 확인 부탁드립니다.__________________________________________________________________________________ P.S. _2 --- 왕초보들이 더 쉽게 이해할 수 있게 개선의견을 말씀드리면, 아래와 같은 간단한 언급을 추가해주시면 더 좋지 않을까 합니다. (아래 쓴 내용이 맞다면요.) 튜플 형태의 data는 값을 수정할 수 없는데,튜플 형태의 data를 print(data) 했을 때는 [( ~~~~ )] 형태로 확인되고,리스트 형태의 data는 값을 수정할 수 있는데,리스트 형태의 data를 print(data) 했을 때는, 괄호 ( ) 가 없이 [ ~~~ ] 형태로 확인되니 참고하세요.참고로 튜플 형태의 data에 대해서는 data[2] 와 같은 형태로 데이터를 선택하는 명령어도 사용 불가능합니다. 튜플 형태의 data를 리스트 형태의 데이터로 바꿔야만 data[0] 와 같이 데이터를 선택하는 명령어를 사용 가능합니다.확인 부탁드립니다. 감사합니다. ____________________________________________________________________________________________________________________________________________________________________ 위 질문 글을 쓴 이후에 더 공부해 보고 아래와 같이 원인을 추정했습니다. 아래 내용이 위 [질문 1] 과 [질문 2]에 대한 답이 맞나요? 일코님이 바쁘실텐데 낮은 수준의 질문에 답변하느라 애쓰실 것에 죄송하여 그 사이에 자문자답(?)을 해보았습니다. [질문 1] Value[0]을 사용한 경우에는 정상적으로 출력되고, Value만 사용한 경우에는 오류가 발생하나요? [원인 분석]엑셀에서 win32com을 사용하여 특정 셀 범위의 값을 가져올 때, Range.Value는 튜플 형태로 반환됩니다. 이때 반환된 값은 2차원 배열처럼 행(row) 단위로 묶여있습니다.ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value는 튜플 안의 튜플 형태로 데이터를 반환합니다.예를 들어, (2,1)부터 (2,4)까지의 값을 가져오면 결과는 다음과 같습니다:(('마크', '남', datetime 객체, 'VR'),)반면에 ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]은 첫 번째 행의 값을 선택하는 것이므로, 단일 튜플이 됩니다:('마크', '남', datetime 객체, 'VR')따라서 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value)의 경우 data는 튜플 안에 또 다른 튜플이 있는 상태입니다. 이때 data[2]를 호출하면 "IndexError"가 발생하는 이유는 data가 한 개의 튜플을 포함하고 있기 때문입니다. 즉, data 안에는 튜플이 있고, 실제 데이터는 그 튜플 안에 들어 있기 때문입니다.반면에 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0])을 사용하면 튜플 중 첫 번째 행의 데이터를 직접 리스트로 변환하므로 data[2]를 정상적으로 호출할 수 있습니다. [위 내용 요약] Value[0] 사용하면 첫 번째 행의 데이터를 직접 가져오기 때문에 인덱싱이 가능하지만, Value만 사용하면 전체 범위가 튜플로 감싸져 있어 인덱싱 시 오류가 발생합니다. [질문 2] 튜플 형태의 데이터에서 값을 수정하거나 인덱싱할 수 있나요? [내용 추정]튜플은 불변(immutable) 자료형이기 때문에 한 번 생성된 후에는 그 값을 수정할 수 없습니다.하지만 튜플 내의 요소들을 조회하는 것은 가능합니다.즉,수정 불가: 튜플 내의 데이터를 변경하거나 삭제할 수 없습니다.mytuple = (1, 2, 3) mytuple[0] = 100 # TypeError 발생조회 가능: 튜플 내 특정 인덱스의 데이터를 조회하는 것은 가능합니다.mytuple = (1, 2, 3) print(mytuple[0]) # 출력: 1따라서 질문에서 언급한 것처럼 튜플 형태의 데이터에서는 값을 수정할 수 없지만, 인덱싱을 통해 특정 요소에 접근하는 것은 가능합니다.즉:data[0] # 가능 data[1] # 가능 data[2] # 가능따라서 인덱스 접근은 가능하지만 수정은 불가능합니다. 다만, 주의할 점은 위에서data[0] # 가능이라고 하였지만, 이것은 data가 튜플일 경우입니다.data가 튜플 내에 튜플인 경우, 즉 이중 튜플인 경우에는,data[0] # IndexError 발생 [위 내용 요약] 튜플은 불변 자료형으로 값을 수정할 수 없지만, 인덱스를 통해 요소를 조회하는 것은 가능합니다. 다만, 이중 튜플인 경우 인덱스를 통해 요소를 조회 시도 시 IndexError가 발생합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
배포 파일 작성방법 문의
현재 엑셀에서 값을 가져와서 필드값으로 입력하는 것으로 배포파일을 만들어 부서에 테스트 해보려고 하는데요,혹시 배포파일을 만드는 방법도 강의 커리큘럼에 있을까요?알려주시면 바로 수강하고자 합니다
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 불러올 때마다 뜨는 팝업 조치가 안 됩니다(한글 2014버전)
섹선1에 한글 파일을 불러올 때마다 뜨는 팝업 조치하고 있는데컴퓨터\HKEY_CURRENT_USER\SOFTWARE\HNC\HwpAutomation\Modules 이 레지스트리 경로가 없습니다..ㅠ저희 기관은 한글 2014를 아직 사용하고 있는데 이전 버전이라서 없는 걸까요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
1-9. [노하우] 기존에 열린 한글 프로그램을 파이썬으로 제어" 관련 질문 3가지
"1-9. [노하우] 기존에 열린 한글 프로그램을 파이썬으로 제어" 관련하여 질문드립니다. 질문1. 일코 님은 Jupyter Notebook을 사용하고 있는건지 아니면 파이참에 IPython을 설치한 것인지요?일코님의 움짤 동영상에서는, 파이썬 콘솔 내에서 In [7]: In [8]: In [9]: 같은 식으로 보여지는데,제 파이참의 파이썬 콘솔 내에서는 그러한 것이 보이지 않아서 궁금하여 여쭤 봅니다. 질문2. hwp.Run("FileClose") 은 hwp.Clear() 와 어떻게 다른가요? 질문3. 움짤 동영상에서의 진행과정은 아래에 제가 기록한 내용이 맞나요? 혹시 잘못 이해한 부분이 있는지 확인 후 피드백 부탁드립니다. ■ 움짤 동영상 진행내용 분석 ※ 일코님의 움짤에 있는 코딩 툴을 파이참으로 추정하였으나, 확실치는 않음. 00:00:01 예문모음.hwpx 파일을 더블클릭하여 오픈한다. hwpx의 10/10 페이지가 보임 00:00:03 1/10 페이지로 이동한다. 00:00:06 ( 파이참 화면 중 에디터(Editor)에위의 코드 전체(기존에 열린 한글 프로그램을 파이썬으로 제어)가 보임. ) 00:00:07 에디터(Editor) 화면을 최소화하고, 파이썬 콘솔 영역을 크게 확대함. 00:00:10 파이썬 콘솔에서,In [7]: 상태에서,hwp.Path 타이핑 후 엔터를 치니, 뭔가 오류 같이 빨간색으로 10줄 정도 뜬다.※ 미리 열어놓은 hwpx 파일을 Path를 얻어오는데 실패한 걸 보여주는 듯 함. 00:00:12 상단 메뉴바 중 Edit를 클릭하는 것 같음.그 즉시 에디터(Editor) 화면이 절반정도를 차지하도록 커짐.파이참 화면 중 에디터(Editor)에,위의 코드 전체(기존에 열린 한글 프로그램을 파이썬으로 제어)가 보임. 00:00:13 블럭지정해서 코드 복사(ctrl + c) 한 거 같음. 00:00:14 파이썬 콘솔에서,In [8]: 상태에서,아까 복사해 둔 위의 코드 전체를 붙여넣고 엔터를 친 것 같음.그 직후 별도의 빨간 텍스트가 안뜨는 걸로 봐서 정상적인 진행으로 보임. 00:00:15 In [9]: 상태에서,hwp.Path 타이핑 후 엔터를 치니,흰색으로 Out[9]: 'C:\\Users\\Administrator\\Desktop\\예...라고 뜨는 걸로 봐서, hwp.Path가 제대로 작동되는 것을 보여주는 듯 함. 00:00:19 에디터(Editor)와 파이썬 콘솔이 반반이던 화면에서,에디터(Editor) 화면이 최소화 되고 파이썬 콘솔 영역이 크게 확대됨.파이썬 콘솔 최상단 줄에 빨간색 텍스트로,pywintypes.com_error: (-2147023174, 'RPC 서버를 사용할 수 없습니다.'라고 보이는 것은, 아까 In [7]의 결과가 보이는 것임. 혼동 주의 00:00:22 파이썬 콘솔의 좌측 패널 상단의 아이콘들 중 안경모양 아이콘을 클릭한 듯 함.그 즉시 우측에 보이던 패널이 오른쪽으로 밀려 닫히며 안보임. 00:00:22 이 화면에서는, 아까 In [8]: 상태에서 코드 전체를 붙여넣고 엔터를 쳤다는 걸 다시 관찰 가능.00:00:23 In [10]: 상태에서,hwp.Run("FileClose") 타이핑 후 엔터를 치니,예문모음.hwpx 파일이 닫히고, 화면에 빈 문서 1 만 보임. 00:00:30 In [11]: 상태에서,hwp.Quit() 타이핑 후 엔터를 치니,빈 문서 1 마저도 닫히고 우측 절반 화면에 바탕화면이 보임. (화면 좌측 절반은 파이참 화면) In [12]: 상태에서, 커서가 깜빡이다가 움짤 동영상이 끝남. ※ 강의 개선의견도 드립니다.초보자가 이번 챕터의 코드를 이해하려면 움짤 동영상의 도움이 크게 필요한데,동영상의 진행이 너무 빠르고 동영상 프레임 간 이동도 불가능해서 결국에는 동영상으로 녹화한 후에 천천히 돌려보기를 여러 번 해서 파악하였습니다.코드 자체의 난이도가 어려워서가 아니라 움짤 동영상을 천천히 단계적으로 보기가 어렵다는 이유로 인해,이 코드의 용도와 실제 어떻게 사용하는 것인지 이해하기가 매우 어려웠습니다.초보자를 위해 추후 강의 개선이 가능하시다면, 움짤 동영상을 훨씬 더 느리게 보여주시거나,움짤 동영상에서 어떤 행위들이 이루어지고 있는 것인지 흐름이라도 짚어주시면 좋을 거 같습니다. 거창한 설명을 말씀드린 게 아니라움짤 동영상이 뭘 보여주는 것인지의 핵심만이라도 텍스트로 추가해 주시면 매우 도움이 될 거 같아요.움짤에 대한 설명을 예를 들면,움짤에서는, hwp문서를 수동으로 미리 열어놓은 후, 해당 코드를 적용하기 전에는 hwp.Path 명령어가 정상작동되지 않는 모습을 확인할 수 있지만, 해당 코드를 적용한 후에는 hwp.Path 명령어를 실행하면 hwp 파일 경로가 정상적으로 출력되는 모습을 확인가능합니다.참고로, 움짤에서는 파이참에 IPython을 추가 설정한 환경에서 진행한 것입니다. cmd 창의 Python 콘솔로도 이 실습이 가능합니다 또는 불가합니다.요 정도의 설명 추가만으로도 초보자도 헤매지 않을 거 같습니다. 동영상을 정말 엄청 많이 돌려보고 나서야, 움짤에서 일코님이 하셨던 거 비슷하게 제 파이참에서도 진행하는 것을 성공하긴 했는데, 알고보면 너무 쉬운 난이도에 비해서 불필요하게 헤맸던 과정이었던 거 같습니다.왕초보여서 그런 점도 있겠지만, 핵심만 간단히 라도 짚어주시면 수강생의 이해에 매우 도움이 될 거 같아서요. 그럼 답변 부탁드릴게요. 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
[성공 경험] hwp 문서 내에 파일명 타이핑하고 저장하기
이건 질문 아닙니다. ^^ 구현하고 싶은 간단한 내용이 있었는데,강의에서 배운 내용을 기반으로 하고, A.I.에 질문하여 코드를 작성한 후 정상 작동에 성공했습니다. 저 같은 왕초보도 작동하는 뭔가를 만들어 내게 하는 이 강의는 정말 훌륭합니다~!아주 기초적이고 작은 성공이라도 동기부여를 위해 소중합니다. ^^ # ■ 아래 코드의 용도 --- 작동 성공했음 _24-10-30 11:26 # "C:\\Users\\user\\Desktop\\제목 추가\\"에 여러 개의 hwp 파일들이 있을 때 # 파일을 하나씩 열고, 문서의 맨 처음으로 이동하여 파일명(~~~.hwp)을 타이핑하고 엔터를 3번 친 후 저장하고 닫기 import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule") import os from time import sleep os.chdir("C:\\Users\\user\\Desktop\\제목 추가\\") # r"C:\Users\user\Desktop\\제목 추가\\"로도 작동 성공함 for i in os.listdir(): hwp.Open(os.path.join(os.getcwd(), i)) sleep(0.2) # 문서 객체 가져오기 --- 일코 doc = hwp.XHwpDocuments.Item(0) # 전체 경로에서 파일명 추출 --- 일코, GPT full_path = doc.FullName file_name = os.path.basename(full_path) # 커서를 원하는 위치로 이동 (예: 문서 맨 처음) --- GPT hwp.HAction.Run("MoveTopLevelBegin") # 파일명 입력 (타이핑) --- GPT hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet) hwp.HParameterSet.HInsertText.Text = file_name hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet) # 엔터를 3번 치기 --- GPT for _ in range(3): hwp.HAction.Run("BreakPara") hwp.Save() hwp.Clear(1)
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
[강의 개선 의견] 실습용 파일이 미리 준비되도록 강의 전개순서 개선 건의
"1-6. [응용] 폴더에 있는 한글 파일을 모두 열기" 관련입니다. 일단 일코님의 설명대로 한 두 번 그대로 성공하고 나면, 강의 내용이 잘 이해가 됩니다. 하지만 초반에는 저 같은 왕초보의 경우 그대로 결과가 나타나지 않거나 실습 조건이 동일하게 마련되지 않으면 헤매게 됩니다. ■ 개선의견 1이 강의에서는 1.hwp ~ 100.hwp 파일이 들어 있는 "반복작업" 폴더가 있다고 가정하고 실습을 진행하는데요. 물론, 1.hwp 파일을 다운로드 가능하게 되어 있지만..1.hwp ~ 100.hwp 파일을 다 만들어 내는 것이 선행되어야 그대로 실습이 가능한데, 그 파일을 만드는 것은 강의 초반이 아니라 후반에 배치되어 있습니다. 제 의견은, 1.hwp ~ 100.hwp 파일을 만들어 내는 부분을 앞에 배치하고, 설명에서는 "이 코드는 아직 안배운 내용이 포함 되므로, 이대로 실습해서 1.hwp ~ 100.hwp 를 만드는 게 부담스러운 학습자는 이 부분을 SKIP하고 진행하세요."라고 한다던가, 아울러,"만약 SKIP하고 진행하실 분들은 1.hwp ~ 100.hwp 파일이 들어 있는 압축파일(zip)을 다운로드 받아서 진행하시면 됩니다."라고 안내하면서, 해당 압축파일의 다운로드도 제공해 주시는 게 어떨까 합니다. ■ 개선의견 2또 하나는, 작업 디렉토리의 강제 설정을 위한 코드 예시도 추가로 설명에 넣어 주셔도 좋을 거 같습니다.os.chdir(r"C:\Users\user\Desktop\반복작업")파이참으로 실습 시 작업 디렉토리는 '반복작업' 폴더가 아닌 경우가 대부분으로 왕초보는 요걸로 또 막힐 수 있습니다. ■ 마치는 글이미 잘 만들어 주신 강의이지만 왕초보의 더 매끄러운 이해를 위한 제안을 드리는 것이니, 꼭 반영하지는 않으셔도 되지만.. 왕초보는 이런 어려움도 있구나.. 정도로 이해해 주시면 감사하겠습니다. 간단한 것도 실행되면 큰 즐거움을 느끼면서 틈틈이 강의 따라하고 있습니다. 감사합니다.
-
미해결문서 작성의 기초부터 심화까지! 한글 2022 완벽 가이드
가운데 정렬이 안되요
중앙으로 설정이 안되요
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
코드 정정방법 문의(문서 끼워 넣기 관련)
지난 번에 답변주신 코드에서 일부 수정하여 아래와 같이 코드를 실행해 보면 제대로 작동되지 않습니다.ChatGPT에 물어봐도 정확한 문제원인과 해결책을 알려주지 않아서 질문 올립니다. 제가 원하는 기능은, 바탕화면의 combine 폴더 안에 n개의 hwp파일을 위치 시킨 상태에서, 코드를 실행하면 hwp 문서들을 순서대로 끼워넣기 하여 "취합본.hwp"으로 저장하는 기능입니다. 지난 번에 일코님이 알려주신 코드는.. "개구리.hwp, 너구리.hwp, 다람쥐.hwp, 라마.hwp, ... "를 먼저 생성하고 나서 "취합본.hwp"을 만들어 내는 방법이었으므로, "# 샘플문서 생성"에 해당하는 코드를 제거하고 제가 원하는 기능으로 작동하기를 기대했습니다. 위와 같이 바탕화면의 combine 폴더 내에 1.hwp, 2.hwp, 3.hwp, 4.hwp, 5.hwp 문서를 넣어 두고 해당 폴더가 활성화된 상태에서 아래의 코드를 실행시켰습니다.from pyhwpx import Hwp # 임포트 hwp = Hwp() # 한/글 실행 import os # 끼워넣기 hwp.open(os.listdir()[0]) # 첫 번째(0) 파일 열기 for i in os.listdir()[1:]: # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복 hwp.MoveDocEnd() # 한/글의 문서 끝으로 이동해서 hwp.BreakPage() # <----------------------- 페이지나누기(Ctrl-Enter) hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) hwp.save_as("취합본.hwp") # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장 hwp.Quit() # 한/글 프로그램 종료 그러니까 원하는 대로 작동되지 않고 아래와 같이 나타납니다. [질문] 위의 코드는 왜 제가 원하는대로 작동이 되지 않는지? 또 그 해결방법은 무엇인지? [추가질문] 아래 코드 4줄은 한/글 자동화 코딩에서 거의 필수적으로 항상 쓰는 것 처럼 이해했었는데요.위의 코드를 짜 주실 때 아래 4줄의 코드는 전혀 사용하지 않으셨었는데, 그 이유를 알 수 있을까요? import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule") 궁금합니다. 답변 부탁드립니다. 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
여러 개의 한글 문서를 합치는 방법 관련 후속 문의
여러 개의 한글 문서를 '문서 끼워 넣기' 기능을 이용해 합치는 방법 문의 -- 박주현 -- 24.10.17 14:56 관련입니다.해당 문의에 대해 아래와 같이 코드를 답변 주셨었는데요. from pyhwpx import Hwp # 임포트 hwp = Hwp() # 한/글 실행 # 샘플문서 생성 # 샘플문서 생성 import os os.chdir("c:\\users\\user\\desktop\\combine") for i in [ "개구리", "너구리", "다람쥐", "라마", "미어캣", "방울새", "사자", "얼룩말", "지렁이", "참새", "코끼리", "토끼", "펭귄", "호랑이", ]: hwp.SelectAll() hwp.Delete() hwp.set_font(Height=40) hwp.insert_text(i) hwp.save_as(f"{i}.hwp") # 끼워넣기 hwp.open(os.listdir()[0]) # "개구리.hwp" 열기 for i in os.listdir()[1:]: # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복 hwp.MoveDocEnd() # 한/글의 문서 끝으로 이동해서 hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) hwp.save_as("취합본.hwp") # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장 hwp.Quit() # 한/글 프로그램 종료 인터프리터 버전의 문제 및 pyhwpx 패키지 설치 등의 문제가 있었지만 그것들은 해결하였고, 코드가 동작하는데까지는 성공하였습니다.일코님의 결과물과 제 결과물이 다릅니다.일코님의 결과물은 아래 스크린샷과 같습니다. 반면에, 저의 "통합본.hwp"을 열어보면, 한 페이지마다 하나의 동물 이름이 입력되어 있는 것이 아니라 한 페이지 안에 모든 13개의 동물 이름이 아래 괄호 안과 같이 붙어 있는 형태입니다.(개구리너구리다람쥐라마미어캣방울새사자얼룩말지렁이참새코끼리토끼펭귄호랑이)아래 스크린샷은 제 노트북 화면이니 함께 참고 부탁드립니다. 같은 코드인데 왜 결과가 다른지 혹시 이유를 문의드려도 될까요?혹시 끼워넣기 할 때 새 페이지로 넘기기 한 후 끼워넣을 수 있는 코드가 있는지 아시는지요? 참고로, 제가 수동으로 빈문서를 열고, 끼워넣기(ctrl-o)를 통해 글자모양유지, 스타일유지, 문단모양유지, 쪽모양유지 체크한 상태에서 넣기 하면, 다음 페이지로 넘긴 상태에서 끼워넣기가 잘 됩니다.반면에 제가 파이참에서 위 코드를 넣고 실행했을 때는 다음 페이지로 넘긴 상태에서 끼워넣기가 되는 것이 아니라 본래의 페이지의 맨 하단 커서 위치 뒤로 붙으므로 의도하는 결과가 아닙니다.