묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
초심자의 향후 학습방향에 대해 조언을 듣고 싶습니다~!
2-5. 문서의 필드목록 및 필드 값 취득하기강의 중 아래의 내용과 관련입니다. 이후 과정들은 배우고 익히는 데 시간이 많이 걸리지만,그리 효용성이 높지 않은,비교적 특이한 케이스에 사용되는 코드들이기 때문입니다.그래서, 여기까지 읽기를 마치고여러분의 업무를 하나씩 자동화해보시다가한/글 누름틀과 셀필드로는 해결되지 않는 문제를 만나셨을 때 다시 찾아오셔서 이후 과정을 이어 읽어주시기를 권장드립니다. 라고 말씀하셨는데요.즉, 정주행 독파 보다는 발췌독을 통한 학습을 권장하시는데..제가 궁금한 점은 이렇게 발췌독이 가능한가가 궁금합니다.무슨 말이냐면,2-5 강의까지 오는데만도 저로서는 상당히 어려웠습니다.이해 안되는 것들을 여러 번 다시 보면서 고민해 보니 지금은 그래도 1-1 ~ 2-5 강의 까지의 내용은 어느정도 이해할 수 있게는 된 거 같습니다.막혔던 부분이 그 이후의 강의 내용을 통해 해소되는 것도 여러 번 있었던 거 같습니다. (순차적으로 들어도 이해될 수 있는 순서로 강의 내용이 배치된다면 더욱 좋을 거 같다는 의견을 조심스레 드려 봅니다.)아무튼 어떤 것을 이해해야 그 보다 더 복잡한 것을 이해할 수 있고 이런 식의 느낌을 받는데요.더 어려운 기법까지 배워보고는 싶은데..제 수준에서는 발췌독으로 필요한 부분만 찾아서 듣는 것 만으로 이해가 가능할지 모르겠어서요.여기서 강의해 주신 더 어려운 기법을 배우고자 하는 코딩 초심자에게도 정주행 보다도 발췌독을 권장하실까요?두서 없는 질문이지만, 배움의 욕심은 많고 실력은 부족한 초심자에게 일코님은 어떤 조언을 주실지 들어보고 싶습니다.거북이 같이 왔지만 2-5까지 오고 또 그 과정의 코드들이 실행되는 경험을 한 게 정말 즐거웠고 감사드립니다.오래 걸리겠지만 실력을 더 높이고 싶습니다!
-
미해결직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
13-2. 녹화된 스크립트매크로를 파이썬에서 활용하는 방법 --- 강의 내용이 안보입니다.
한글 자동화 관련해서 공부할 강의 분량이 너무 많아서 완강은 아직 엄두도 안나고, 그냥 쭉 한 번씩 구경(?)하던 중이었는데요. 13-2. 녹화된 스크립트매크로를 파이썬에서 활용하는 방법이 강의에서는 내용이 전혀 뜨지 않네요. (아래 캡처) 제 컴퓨터 환경에 문제가 있는 것일까요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
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가 발생합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
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\반복작업")파이참으로 실습 시 작업 디렉토리는 '반복작업' 폴더가 아닌 경우가 대부분으로 왕초보는 요걸로 또 막힐 수 있습니다. ■ 마치는 글이미 잘 만들어 주신 강의이지만 왕초보의 더 매끄러운 이해를 위한 제안을 드리는 것이니, 꼭 반영하지는 않으셔도 되지만.. 왕초보는 이런 어려움도 있구나.. 정도로 이해해 주시면 감사하겠습니다. 간단한 것도 실행되면 큰 즐거움을 느끼면서 틈틈이 강의 따라하고 있습니다. 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
코드 정정방법 문의(문서 끼워 넣기 관련)
지난 번에 답변주신 코드에서 일부 수정하여 아래와 같이 코드를 실행해 보면 제대로 작동되지 않습니다.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)를 통해 글자모양유지, 스타일유지, 문단모양유지, 쪽모양유지 체크한 상태에서 넣기 하면, 다음 페이지로 넘긴 상태에서 끼워넣기가 잘 됩니다.반면에 제가 파이참에서 위 코드를 넣고 실행했을 때는 다음 페이지로 넘긴 상태에서 끼워넣기가 되는 것이 아니라 본래의 페이지의 맨 하단 커서 위치 뒤로 붙으므로 의도하는 결과가 아닙니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
파일경로 출력 시도 시 결과 리턴이 되지 않습니다. _자체 해결 완료
아래는 당초 제가 질문한 내용인데, 한참 헤매다가 2가지 문제점이 있었던 걸 찾았고, 해결되었습니다. 문제1. import os 치는 걸 빼먹음.아래에서 os.listdir()이나 os.getcwd() 또는 os.path.join() 등을 사용하려면 import 필요한데,import os 치는 거 빼먹어서 아래 for문이 제대로 작동안해서 한참 헤맸음. 문제2. ... 이 나타났을 때, 엔터를 한 번 더 치지 않았음.import os 치는 걸 추가하고 나서도 작동이 안되어 더 헤맸는데..여기서 엔터 한 번 쳐줘야 결과값이 출력되는 거였음. 강사님께.위 2개 문제를 찾아서 해결하긴 했는데,혹시 강의 내용 보완을 한 두 줄 보완이 가능하다면강의 본문 또는 강의 맨 하단에 위 내용 한 줄씩만 언급해 주시면, 저같은 왕초보가 어이없게 헤매는 걸 줄여줄 수 있을 거 같습니다. ㅜ조심스레 의견 드려봅니다. 아래는 해결된 후 정상작동 화면 아래는 당초 질의 내용입니다. 섹션1 중에서 "[응용] 폴더에 있는 한/글을 모두 열기" 강의내용 실습 관련입니다. 그럼 이제 for문을 사용해볼게요.한/글 문서를 열지는 말고, 완성된 파일경로를 출력만 해 볼까요?에서 설명에 따라,for i in os.listdir():print(os.path.join(os.getcwd(), i))위의 코드 2줄을 1줄씩 입력하고 엔터를 누르면,강사님의 움짤 동영상에서는 아래와 같이 파일들의 경로가 쭉 리턴됩니다. (캡처 떠서 첨부한 것임)그런데 제가 동일하게 진행하면 파일들의 경로가 리턴되지 않고 파이썬 콘솔이 계속 멈춰있는 상태입니다. (아래)왜 실행 결과가 다른지 궁금하고, 해결책을 알고 싶습니다. [응용] 폴더에 있는 한/글 파일을 모두 열기 [응용] 폴더에 있[응용] 폴더에 있는 한/글 파일을 모두 열기는 한/글 파일을 모두 열기
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
여러 개의 한글 문서를 '문서 끼워 넣기' 기능을 이용해 합치는 방법 문의
안녕하세요, 일코님.강의 수강한지 얼마 안되었지만, 완강하고 나서 질문 올리기에는 궁금증이 너무 커서 대략적인 답변이라도 듣고 싶어서 질문 드립니다. 사실, 저는 한글 문서 수동편집이라면 수천 페이지 이상 지겹도록 해봤지만, 이제는 자동화를 익혀서 하나씩 업무를 효율화 해보고 싶은 열망이 큽니다.제가 제일 처음 만들어 보고 싶은 업무 효율화 기능은 여러 개의 한글문서를 '문서 끼워 넣기' 기능을 이용해 합치는 것입니다.좀 막연할 수는 있지만, 제가 구현하고 싶은 기능의 개념을 아래에 설명드리겠습니다. 바탕화면의 combine이라는 폴더 속에 다음과 같은 한글문서들이 들어 있습니다.개구리.hwp, 너구리.hwp, 다람쥐.hwp, 라마.hwp, 바람.hwp, 사자.hwp ... 해당 폴더 속 문서들 중 가나다 순 첫번째 문서(여기서는, 개구리.hwp)를 열고,이 문서의 마지막 페이지의 마지막 위치에 커서를 옮긴 채 ctrl-o를 눌러 '문서 끼워 넣기' 창을 엽니다.'문서 끼워 넣기' 창에서 체크박스에 모두 체크된(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지) 상태로, 끼워넣을 파일은 가나다 순 두번째 문서(여기서는, 너구리.hwp)를 선택하고 '넣기(I)'를 클릭합니다.이제 첫번째 문서에 두번째 문서가 끼워넣어 졌습니다. 그 다음에는 이 문서의 마지막 페이지의 마지막 위치에 커서를 옮긴 채 ctrl-o를 눌러 '문서 끼워 넣기' 창을 엽니다.'문서 끼워 넣기' 창에서 체크박스에 모두 체크된(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지) 상태로, 끼워넣을 파일은 가나다 순 세번째 문서(여기서는, 다람쥐.hwp)를 선택하고 '넣기(I)'를 클릭합니다.이제 세번째 문서까지 끼워넣어 졌습니다. 이와 같은 반복을 계속 진행하여 가나다 순의 마지막 문서까지 끼워넣기를 합니다. 이 과정이 끝나면, 다른 이름으로 저장하기(alt-v) 팝업을 열고 파일 이름을 '취합본.hwp'로 하여, 바탕화면의 combine 폴더 내에 저장합니다. [추가설명] 구태여 복사-붙여넣기가 아닌 '문서 끼워 넣기' 기능으로 합치려고 하는 이유는, 문서마다 스타일과 서식이 다를 경우 복사-붙여넣기로 합치면 서식이 심하게 틀어지는 경험을 많이 했었기 때문입니다. 서식 유지 4개 항목(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지)에 체크된 상태로 '문서 끼워 넣기'를 하면 가장 안전하게 합치기가 가능했었습니다. 제가 문의 드리는 이 기능을 구현하는 것의 난이도가 어느 정도인지 궁금합니다.완강을 하면 평균적인 수강생의 경우라면 이 정도는 어렵지 않게 스스로 제작이 가능한 정도일까요? 혹시라도 저같은 초심자도 한 번에 이해 가능한 수준일 경우에는 가급적 일코님께서 구체적인 답변을 주신다면 매우 감사하겠습니다.그게 어려울 경우 이 강의의 어느 어느 부분을 중점적으로 익히면 이 기능 구현에 도움을 받을 수 있을지 정도라도 가이드 해주시면 감사하겠습니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 문서를 불러오기 시 매번 경고 팝업이 뜹니다.
"한글 문서를 불러오고, 저장하고, 닫기" 챕터 관련입니다. 강의 내용에 따라 한글 문서 불러오는 명령을 하면, 파일이 열리기 전에 경고 팝업이 매번 뜹니다. 혹시 제 PC나 진행한 실습에 문제가 있는 것일까요? 진행한 내용은 아래와 같습니다.(cmd 창에서 아래와 같이 진행) C:\Users\user>python>>> import win32com.client as win32>>> hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")>>> hwp.XHwpWindows.Item(0).Visible = True>>> hwp.Open("C:\\Users\\user\\Desktop\\문서1.hwpx") 여기까지 진행하면 아래와 같은 경고 팝업이 뜹니다. C:\Users\user\Desktop\문서1.hwpx 한글을 이용하여 위 파일에 적근하려는 시도(파일의 손상 또는 유출의 위험 등)가 있습니다. 정상적인 작업 과정에만 접근을 허용하십시오. 정확인 내용은 cmd 창에서 진행한 사항에 대한 스크린샷을 첨부드립니다. (위 기재한 내용과 동일합니다.) 질문이 너무 기초적인 내용일 수도 있는데, 코딩 배경지식이 없고 강의 듣기 시작한지 초반이라 쉬운 것에도 막히는 거 같습니다. 답변 부탁드립니다. 감사합니다.