묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
서식 추출 및 스타일 교정
안녕하세요 빠른 답변 감사합니다. 아래 잠긴 문서 너무 궁굼합니다. ㅠㅠ[HDMI] 최종화 : 취합문서 스타일 교정 저번 질문에서 커서위치 스타일 추출이 없어서 고민 하고 있습니다. 그러면 내가 원하는 커서위치의 서식정보를 가지고 와서 스타일을 만들면 어떨까 고민하고 있는데요 저번에 어느 일코님 강이에서 스타일 만드는거는 어렵다고 이야기를 들어서 ^^& 서식정보 추출이 가능한가요!?스타일 폰트 크기 자간등 및 개요수전 1단계 이런거 가능할까요!? 질문이 많아 죄송합니다. 항상감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
개요 다루기 질문(2)
아래 질문한 사람입니다. ^^답변 감사드립니다.추가적으로 ctrl k + o 개요 번호모양 없음 지정하는 방법과 스타일의 커서 위치로 스타일 바꾸기가 가능할까요!?요렇게 해봤는데 제가 바꾸고자 하는 스타일을 지정하는 방법을 모르겠습니다. ㅠ hwp.open(hwpx_file, arg="suspendpassword:false; forceopen:true; versionwarning:false") print('---------------------') print(hwp.find(src=contents[1], direction='AllDoc'), hwp.current_page) print('---------------------') print(hwp.find(src=contents[1], direction='AllDoc'), hwp.current_page) print('---------------------') #hwp.HAction.Run("StyleShortcut3") hwp.hwp.HAction.GetDefault("StyleChangeToCurrentShape", hwp.hwp.HParameterSet.HStyleItem.HSet) hwp.hwp.HAction.Execute("StyleChangeToCurrentShape", hwp.hwp.HParameterSet.HStyleItem.HSet)
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
개요 스타일 없음지정
어떤문장을 찾아가서 개요 수준 1로 지정이가능할까요??개요스타일을. 없음으로 변경하는 방법이 있을까요? 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 글자지우는 명령이 궁금합니다
안녕하세요 일코님! 덕분에 요즘 사무실에서 시간이 잘 갑니다.이번에 궁금한 점은 SetPos로 커서를 이동한 다음 글자 입력 말고 글자를 지우는 명령도 가능한가요?백스페이스 입력을 찾고싶은데 어딜 찾아도 확인할 수 없네요.. \b도 작동하지 않아서 문의드립니다
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
페이지를 넘어가는 문제 깔끔하게 정리하기
안녕하세요 일코님날씨 많이 추워졌는데 건강 잘 챙기시기 바랍니다 ^^현재 문제가 텍스트로만 이루어졌을 경우 아래와 같이 BreakPage메소드를 통해 페이지에 걸친 문제가 없도록 정리하고 있씁니다.while 찾기("#"): # 샵 "#"표시는 문제의 시작지점입니다. hwp.Run("MoveLineBegin") start_page = hwp.KeyIndicator()[3] start_pos = hwp.GetPos() # hwp.Run("MoveParaEnd") 둘중_빠른것_찾기("#", "<<<") 현재문단블록처리() if 블록내_텍스트_포함_여부("<<<"): hwp.Run("MovePageBegin") hwp.Run("MoveLeft") else: hwp.Run("MoveParaBegin") 위로_찾기_아무거나() # 다음문제로 넘어간뒤, 아무런 텍스트나 위로 찾기 하여 문제의 끝을 특정함 hwp.Run("MoveParaEnd") end_page = hwp.KeyIndicator()[3] endpos = hwp.GetPos() if end_page != start_page: # 문제 시작점과 끝점의 페이지가 다를 경우 BreakPage hwp.SetPos(*start_pos) hwp.Run("BreakPage") hwp.Run("MoveParaEnd") 문제는, 문제의 형식이 표로 되어 있을 때가 있다는 것인데요. 이런식으로 표가 존재하고, 이 표가 넘어갈경우에,, 현재 코드를 적용하면 저 "수정"으로 이동하여 endpos의 위치가 잡히게 되네요..문제가 표로 마무리 될경우에 문제의 끝을 올바르게 특정해서 문제를 깔끔하게 정리할 방법이 없을까요? 감사합니다 !
-
해결됨문서 작성의 기초부터 심화까지! 한글 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 콘솔로도 이 실습이 가능합니다 또는 불가합니다.요 정도의 설명 추가만으로도 초보자도 헤매지 않을 거 같습니다. 동영상을 정말 엄청 많이 돌려보고 나서야, 움짤에서 일코님이 하셨던 거 비슷하게 제 파이참에서도 진행하는 것을 성공하긴 했는데, 알고보면 너무 쉬운 난이도에 비해서 불필요하게 헤맸던 과정이었던 거 같습니다.왕초보여서 그런 점도 있겠지만, 핵심만 간단히 라도 짚어주시면 수강생의 이해에 매우 도움이 될 거 같아서요. 그럼 답변 부탁드릴게요. 감사합니다.