묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
음 Action에 없는 내용들은 어떻게 활용해야할지 질문드립니다.
현재 문제자동적으로 여러개의 선택상자를 입력하고어떤것이 체크되었는지 확인하여 리턴할 것을 정해야하는 함수를 구현하려 합니다. 1번, 3번이 선택 되었다면 1, 3을 리턴하는 방식을 구현하려 했습니다. 제가 질문드린 내용을 구현하려면[HwpAutomation.hwp 내부 사진]다음사진에서 IHwpObject - IXHwpDocuments - IXHwpFormCheckButtons의IXHwpFormCheckButton:양식 개체 체크 버튼 오브젝트에서caption값을 수정하는 방법value 값을 리턴하는 것 여기에서 사실 XHwpDocuments.XHwpFormCheckButtons를 해야한다고 생각했는데 안되는거 같아서 혹여 이 부분을 참고하여서 개발을 하려면 어떻게 이해를 해야할까요 ㅠㅠ
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
hwp.TableCellBlcok() 코드 미작동
안녕하세요 일코님더위에 건강 잘 챙기시기 바랍니다. 일코님께서 제공해주신 코드인데,, 어제까지는 잘 작동하는데 오늘 다시 실행해보니 >>> hwp = Hwp().hwp >>> hwp.MoveToField("3") True >>> hwp.TableCellBlock() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\samsung-user\anaconda3\Lib\site-packages\win32com\client\__init__.py", line 580, in __getattr__ raise AttributeError( AttributeError: '<win32com.gen_py.HwpObject 1.0 Type Library.IHwpObject instance at 0x1750723382032>' object has no attribute 'TableCellBlock' hwp.TableCellBlock() 코드가 작동하지를 않네요 ㅠㅠ왜이런 걸까요? hwp.TableCellBlock() hwp.TableCellBlockExtend() hwp.TableColEnd() hwp.MoveToField("3") 까지는 올바르게 작동을 하는데,, 위의 테이블 관련 코드가 다 작동하지 않네요.감사합니다 ^^
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
표에서 특정한 값 찾기 문제
순번 5번, 8번의 8번째 칸의 모습처럼, 줄나누기후 같은 숫자(12)와 O를 넣는 자동화를 하고 싶습니다.즉,1. 일정한 순번을 리스트를 통해 나열하면 EX) [5, 8, 10-2, 12 ....]2. 그 값이 있는 셀을 찾은 후 오른쪽으로 이동, 줄나누기, 셀에 값입력 이런 작업을 자동화 하고 싶은 것입니다. 2번 작업은 일상의 코딩님 강의와 블로그를 통해 해결할 수 있을 거 같긴한데,1번 작업을 어떻게 처리할지 도저히 감히 잡히지 않습니다.(블로그를 보면 찾기 명령어는 자동화에 사용하지 않는 것 같고,hwp.find()를 이용하는 것도 감이 잡히지 않습니다.) 저런식으로 단순히 1,2,3으로 진행되는 것이 아니고, 중간 중간 규칙성 없이 가지번호(10-1,10-2)가 등장합니다 ㅠ또한 숫자가 여러 열에 존재하고 있어서 1열(즉 순번열)에 있는 숫자만을 찾아야 한다는 문제도 있습니다. 자동화가 필요한 이유가 저런 식의 순번이 5천개가 넘어서 반드시 필요합니다.도와주세요!!!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
파이썬으로 작업하기 유리한 한글버젼/맥에서 사용
파이썬으로 작업하기 더 유리한 한글버젼이 있을까요? 작업 속도가 빠르다던지맥에서 파이썬으로 아래한글을 다룰 방법이 있을까요?미리 감사드립니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
셀필드 코드로 수정하기
안녕하세요 일코님. 늘 많은 도움 감사합니다.셀필드명을 표에 차례대로 부여하는데,매크로 녹화를 이용해서아래와 같이 코드를 짜보았습니다.hwp.move_to_field("답안") index = 1 while hwp.TableLowerCell(): hwp.HAction.Run("TableCellBlock"); hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet); hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.Name = f"{index}" hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet) hwp.Run("Cancle") index += 1 그런데 이렇게 실행하였을 때,AttributeError: '<win32com.gen_py.HwpObject 1.0 Type Library.HCtrlData instance at 0x2683750010768>' object has no attribute 'Name' 위와 같이 오류가 나는데요..매크로 스크립트를 잘 복붙한거 같은데 어떻게 수정할 수 있을까요?감사합니다!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
pyhwpx에서 한글 창을 최대로 키우는 코드가 무엇인가요
질문 남겨주셔서 감사합니다.막히면 언제든 무엇이든 자주 질문 던져주세요.수학/과학이나 알고리즘과는 달리업무자동화 코딩은 고민해서 풀리는 경우가 정말 드뭅니다.다시 말씀드리지만, 질문을 자주자주 남겨주세요.저도 최대한 빠르게 회신 드리겠습니다.당부드릴 두 가지가 있습니다.① 가급적 구체적으로 설명해주세요.② 특정 챕터 관련 질문 남겨주실 때는, 어느 챕터인지 알려주세요ㅜ====================================pyhwpx 라이브러리 사용 중 문의드립니다.win32라이브러리로 창을 키워뒀다가 pyhwpx로 텍스트를 삽입하기 위해 객체를 선언하면다시 창이 작아지는 문제가 있습니다.pyhwpx에서 한글 창을 최대로 키우는 코드가 무엇일까요?pyhwpx는 관련 정보를 찾을 수가 없어 문의드립니다.늘 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한PDF에서 PDF파일을 한글 파일로 변환시키는 부분을 파이썬 코드를 통해 자동화시킬 수 있을까요?
안녕하세요 일코님좋은 강의를 해주셔서 감사합니다. 제가 지금 하고 있는 작업은 한글파일이 pdf파일로 변환된 파일을 다시 한글파일로 변환하는 것입니다.이때, 한PDF를 사용하면 한글파일로 아주 나이스하게 변환되는 것을 보고이걸 파이썬으로 자동화할 수 없을까 고민하고 있습니다. pdf를 일반 파이썬 라이브러리로 읽어와서 text로 변환하는 코드말고한pdf의 기능을 이용하여 pdf를 한글파일로 바로 변경할 수 있는 라이브러리나 코드가 있을까요? 늘 감사드립니다
-
미해결직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 파일의 표에서 내용을 추출하여 다른 한글파일에 넣는 방법이 궁금합니다.
안녕하세요. 좋은 강의 잘 듣고 있습니다. 감사합니다. 이번에 실무에 적용해보려고 이 강의를 수강하였는데요,제가 하고 싶은 자동화는 한글파일로 된 신청서의 표에 적힌 정보를 가져와서다른 한글파일의 표에 넣는 것입니다. 강의를 듣던 중 한글 파일의 표를 생성하고 쓰는 것은 알게 되었는데한글 파일에 작성된 표에서 정보를 가져오는 방법은 알지 못해 질문드립니다. 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
hwp.Execute 의 True,False를 이용한 반복문
안녕하세요 일코님 강의 잘 듣고 있습니다. 한글 찾기를 이용해서 작업을 하고 있습니다. 다른 부분은 모두 잘 작동하는 데 while문 제어가 어려워서 문의 드립니다. 문서에서 직접 ctrl+f로 찾기를 해보면 마지막이 나오는데 파이썬 코드를 이용하면 False값을 뱉지 않고 무한루프에 빠집니다. 작업 내용은 "[1 " 를 찾아서 표 안에 있으면 표 전체를 저장하고, "[1"이 본문에 있으면 본문 내용을 저장해서 다른 문서에 저장하는 작업입니다. import os from tkinter import Tk from tkinter.filedialog import askopenfilename import win32com.client as win32 def 한글_열기(한글파일): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") hwp.Open(한글파일) return hwp def 한글_찾기(문자열): hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = 문자열 hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 hwp.HParameterSet.HFindReplace.FindType = 1 cond = hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) print(cond) return cond def 문서_처리(): if (hwp.GetPosBySet().Item("List") == 0) : hwp.HAction.Run("MoveParaBegin") spara = hwp.GetPosBySet().Item("Para") spos = hwp.GetPosBySet().Item("Pos") hwp.HAction.Run("MoveParaEnd") epara = hwp.GetPosBySet().Item("Para") epos = hwp.GetPosBySet().Item("Pos") blockSelect(spara, spos, epara, epos) textArr.append(hwp.GetTextFile("HWP", "saveblock")) hwp.HAction.Run("Cancel") else : hwp.HAction.Run("CloseEx") spara = hwp.GetPosBySet().Item("Para") spos = hwp.GetPosBySet().Item("Pos") hwp.HAction.Run("MoveParaEnd") epara = hwp.GetPosBySet().Item("Para") epos = hwp.GetPosBySet().Item("Pos") blockSelect(spara, spos, epara, epos) textArr.append(hwp.GetTextFile("HWP", "saveblock")) hwp.HAction.Run("MoveParaEnd") hwp.HAction.Run("Cancel") def blockSelect(spara, spos, epara, epos): hwp.SelectText(spara, spos, epara, epos) if __name__ == '__main__': os.chdir(os.path.join(os.environ["USERPROFILE"], "desktop")) BASE_DIR = os.getcwd() root = Tk() 한글파일 = askopenfilename(title=" HWPX 파일을 선택해 주세요.", initialdir=BASE_DIR, filetypes=[("아래아한글", "*.hwp *.hwpx")]) root.destroy() hwp = 한글_열기(한글파일) hwp.MovePos(2, 0, 0) textArr = [] while True: # for _ in range(8): if 한글_찾기("[1"): 문서_처리() else: break hwp.Run("FileNew") # 빈 문서 생성 for k in range(len(textArr)): hwp.SetTextFile(textArr[k], "HWP", "insertfile") hwp.HAction.Run("MoveParaEnd") hwp.HAction.Run("BreakPara") hwp.HAction.Run("BreakPara") hwp.HAction.Run("StyleShortcut1") hwp.HAction.Run("StyleShortcut1") hwp.SaveAs(os.path.join(os.getcwd(), "result2.hwpx")) # 현재 위치에 다른이름으로 저장 hwp.Quit() print('모두 완료')
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
단순한 파이썬 문법 질문인거 같긴 한데여 ㅠㅠ
감사합니다.!!!열심히 따라가며 공부하고 있는데,,아직은 파이썬 자체의 문법도 잘 모르고 있어서열심히 검색하며 공부하고 있습니다. ㅠㅠ필수보직기간 내 전보 사전승인통보서 자동화 프로젝트필수보직기간 내 전보 사전승인통보서 자동화 프로젝트그 중에서<필수보직기간 내 전보 사전승인통보서 자동화 프로젝트>for 행인덱스, 행데이터 in enumerate(엑셀데이터): 사전전보승인일, 직급, 전보대상자, 전보일, 기존부서, 전보부서, 근무시작일, 근무종료일, 근무기간, 전보유형 = 행데이터요 부분이 이해가 안갑니다...사전전보승인일, 직급, 전보대상자, 전보일, 기존부서, 전보부서, 근무시작일, 근무종료일, 근무기간, 전보유형 = 행데이터이 과정이 어떤 과정을 처리하는건가요?a,b,c,d = e 구조인데 이것이 무엇을 의미하는지 모르겠습니다. 인덱스(??)를 붙이는건가여?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
hwp&표를 데이터베이스로 활용하기 위해서
안녕하세요.일코님 강의 들으면서, hwp를 데이터베이스로 활용하는 방법을 많이 고심하고있는데요. 예를들어 영어 구문 1000문장이 데이터베이스로 아래와같이 hwp상의 표로 존재한다고 할때,위와 같이 번호별로 영어구문의 답지를 데이터베이스로 삼고, 학생별로 틀린 문장을 기록한뒤에 함수를 작동시키면 학생별로 틀린 문항번호의 답지만 hwp로 출력할 수 있게 해주고자 합니다. 그런데 문제는, 학생별로 틀린문장이 다 다르기 때문에,학생별로 뽑아줄 hwp의 표의 행 수를 미리 정해놓을 수 없다는 점입니다. 그렇다고 표의 행수를 무작정 많이 만들어놓으면, 표의 행이 너무 많이 비게 되어 종이 낭비가 발생하구요..논리적으로 이 문제를 어떻게 해결할 수 있을까요? 늘 감사합니다^^
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
파이썬으로 한글오피스에 저장한 매크로를 실행할 수 있나요?
안녕하세요. 궁금한 사항이 있어서 질문 드립니다.문서에서 모든 수식에 alt + 2( 한글오피스에 저장한 2번째 매크로)를 적용하고 싶습니다.챗 gpt는 pyautogui.hotkey('alt', '2') 를 이용하라고 하는데 적용이 되지 않아서 질문 드립니다. ctrl = hwp.HeadCtrl while ctrl: if ctrl.CtrlID == "eqed": eqedCtrls.append(ctrl) ctrl = ctrl.Next for ctrl in eqedCtrls: hwp.SetPosBySet(ctrl.GetAnchorPos(0)) hwp.FindCtrl() pyautogui.hotkey('alt', '2') hwp.Run("Cancel")
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
페이지 단설정 매크로스크립트 미작동
안녕하세요 일코님 페이지의 단을 1단으로 변경하기 위해서,한글에서 매크로 녹화를 하여 스크립트를 아래와 같이 땄습니다. HAction.GetDefault("MultiColumn", HParameterSet.HColDef.HSet); with (HParameterSet.HColDef) { Type = ColDefType("Newspaper"); CreateItemArray("WidthGap", 1); WidthGap.Item(0) = MiliToHwpUnit(115.6); LineType = HwpLineType("None"); HSet.SetItem("ApplyClass", 868); HSet.SetItem("ApplyTo", 2); } HAction.Execute("MultiColumn", HParameterSet.HColDef.HSet); 이 매크로를 사용하기 위해서 hwp.HAction.GetDefault("MultiColumn", hwp.HParameterSet.HColDef.HSet) hwp.HParameterSet.HColDef.Type = hwp.ColDefType("Newspaper") hwp.HParameterSet.HColDef.CreateItemArray("WidthGap", 1) hwp.HParameterSet.HColDef.WidthGap.Item(0) = hwp.MiliToHwpUnit(115.6) hwp.HParameterSet.HColDef.HSet.SetItem("ApplyClass", 868) hwp.HParameterSet.HColDef.HSet.SetItem("ApplyTo", 2) hwp.HAction.Execute("MultiColumn", hwp.HParameterSet.hwp.HColDef.HSet) 이렇게 코드를 작성했는데요. 문제는 두번째 줄인 hwp.HParameterSet.HColDef.Type 이부분과네번째 줄 hwp.HParameterSet.HColDef.WidthGap.Item(0) 입니다. 두번째 줄을 실행했을 때 AttributeError: '<win32com.gen_py.HwpObject 1.0 Type Library.HColDef instance at 0x1617095373456>' object has no attribute 'Type' 이러한 에러메시지가 뜨고 네번째 줄은 hwp.HParameterSet.HColDef.WidthGap.Item(0) = hwp.MiliToHwpUnit(115.6)IndentationError: unexpected indent 이렇게 나오는데요.. 뭐가문제일까요? 늘 친절하고 자세하게 답변해주셔서 정말 감사합니다!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
수식의 String을 변수에 저장
안녕하세요 일코님이번에 질문드릴 내용은선택된 영역의 수식의 String을 변수에 저장하고 싶어서 질문드립니다. 일전에 질문드린 내용에서hwp.get_selected_pos()를 사용하여 선택된 영역의 위치값을 알 수 있었는데요이 위치값 안에 위치한 수식의 String을 가져오고 싶어서 문의드립니다.123과 1/3은 수식으로 입력된 내용입니다.만약 선택된 내용을 hwp.get_selected_pos()로 받고math_string = '앞은 문자' + 123(123은 수식에서 가져온 'String')이런식으로 변수에 선언해주고 싶다면 어떻게 해야할까요..(문자와 수식이 혼합된 경우 동일한 순서로 값을 받는 방법이 있을지 궁금합니다.) selected_pos 안에 ctrl을 조회하는게 이전에 설명주신 내용에서는 전체 문서의 ctrl_list의 UserDesc를 조회를 하게되는 방식이였는데 선택된 내부의 ctrl만 조회하게 하는 방법은 없는지도 질문드립니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
현재 커서가 속한 페이지를 얻을 수 있는 방법
안녕하세요. 작업을 하다보니, 현재 커서가 속한 페이지를 얻어야 하는 경우가 있는데요. 관련강의로는 짝수페이지만 삭제하기 이쪽을 봤는데,전체페이지를 반환하는 것은 있는데,속한 페이지를 반환하게 하는 경우는 못찾겠습니다 ㅠ.ㅠ 관련 명령어가 있을까요 그리고 Hwp Ctrl API 도 자주 참조를 하시던데,제가 강의에서 받은 API는 ActionObjectHwpAutomationParameterSetObject이렇게 3개밖에 없어서요!혹시 다른 API파일들은 어디서 받을수있을까요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
폰트 설정 뒤 텍스트 입력이 안되는 문제
안녕하세요 일코님!글자속성 부분 강의를 들으면서, 매크로로도 확인해서 함수를 작성해보았는데요. 먼저 텍스트 입력 함수입니다.def 텍스트입력(text): hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet) hwp.HParameterSet.HInsertText.Text = text hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet) 그다음 폰트를 설정하는 함수입니다.def 폰트설정(글꼴,크기): hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HCharShape.HSet); hwp.HParameterSet.HCharShape.FaceNameUser = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeUser = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.FaceNameSymbol = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeSymbol = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.FaceNameOther = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeOther = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.FaceNameJapanese = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeJapanese = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.FaceNameHanja = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeHanja = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.FaceNameLatin = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeLatin = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.FaceNameHangul = f"{글꼴}" hwp.HParameterSet.HCharShape.FontTypeHangul = hwp.FontType("TTF") hwp.HParameterSet.HCharShape.Height = hwp.PointToHwpUnit(크기) hwp.HAction.Execute("CharShape", hwp.HParameterSet.HCharShape.HSet) 이렇게 하니까, 변경까지는 아주 잘 되는데, 변경후에 텍스트를 입력하면 커서만 깜빡이고 텍스트가 입력되질 않네요..매크로로 해서 그런가 싶어서, 다시 일코님이 작성해주신 코드를 복붙해서 사용해보았는데 charshape = hwp.XHwpDocuments.Item(0).XHwpCharacterShape charshape.Height = 5000 # 5000 HwpUnit = 50 pt charshape.Italic = True # 이탤릭 charshape.Bold = True # 진하게 charshape.ShapeNormal() # 글자크기와 서체를 제외한 모든 속성 초기화 이코드도 동일하게 적용까지는 되는데,, 텍스트가 입력이 되지 않네요.움짤로는 아래와 같습니다!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
갑작스런 경로 문제로 질문드립니다..
안녕하세요 일코님.저번에 visible설정을 잘 알려주셔서 무척 도움을 받았습니다!다름이 아니고 원래는 제가 mac에서만 작업을 했는데요.이번에 hwp 강의를 구매하면서 삼성 노트북을 구매하여 쓰고있습니다. 그런데 이 시스템 환경변수가 매번 말썽입니다.vscode + anaconda + bash터미널을 쓰고있는데요. bash 터미널에 which conda 명령어를 입력하면$ which conda /c/Users/samsung-user/anaconda3/Scripts/conda 이렇게 잘 인식을 하고 있는데요. conda 명령어를 입력하면$ conda bash: C:\Users\samsung-usernaconda3\Scripts: No such file or directory samsung-user/anaconda3 로 인식되어야 하는데,samsung-useraconda3 로 이렇게인식이 되고 있네요.GPT랑 아무리 씨름을 해보아도 답이 안나오더라구요.GPT가 시킨것은 ~/.bashrc 파일과 ~/.bash_profile 파일을 수정하라는 것인데,각 파일은 아래와 같이 수정했습니다. ~/.bashrc ~/.bash_profile 시스템 환경 변수 설정도 아래와 같이 했는데요... 혹시 뭐가 문제가 있는걸까요??부탁드립니다 ㅠㅠㅠ 늘감사합니다!!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
안녕하세요 일코님저번 답변으로 큰 도움을 얻었습니다. 감사합니다. 현재 제가 코드를 실행하면 아래와같은 경고메시지가 뜨는데..하나씩 실행해가면서 봤을떄는 문제가 없었는데 아래와 같은 문제가 왜 발생하는지 모르겠습니다. 어떨땐 뜨고, 어떨땐 안뜨는데, 도무지 알수가 없네요... 전체 코드를 첨부드립니다. import os from tkinter.filedialog import askopenfilename, askopenfilenames from pyhwpx import Hwp def 타겟인덱스찾기(target,학년): # FindReplace 설정 초기화 hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = f"{target[0]}년도 {target[1]:02}월 {학년} 학평 {target[2]:02}번" hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.FindType = 1 hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 # 메시지 무시 설정 output = hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) if output == False: hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = f"{target[0]}년 {target[1]:02}월 {학년} 학평 {target[2]:02}번" hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.FindType = 1 hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 # 메시지 무시 설정 return hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) else : return True def 워크북복수선택(): """ 선택한 모든 파일들의 전체경로를 가져오는 함수 """ filelist = askopenfilenames(title="문제를 추출할 아래아한글 문서를 모두 선택해주세요.", initialdir=os.getcwd(), filetypes=[("아래아한글파일", "*.hwp *.hwpx")]) return filelist # hwp = Hwp().hwp # 현재 열린 한글 실행 if __name__ == '__main__': hwp = Hwp(visible=True) 학년 = "고2" 타겟리스트 = [(21,11,30), (21,9,30), (20,6,3), (23,6,31), (22,11,31), (23,6,34) , (22,3,33), (21,6,33), (22,11,35), (22,6,35), (23,6,36) , (21,3,37), (20,9,38), (23,6,38), (21,9,39), (20,11,38), (22,9,40), (20,6,40), (23,9,30), (20,11,30) ] doc_1 = hwp.XHwpDocuments.Item(0) # output 문서 hwp.SetMessageBoxMode(0x20000) # 예,아니오 경고창은 노로 대답하기 워크북리스트 = 워크북복수선택() for 파일인덱스, 워크북 in enumerate(워크북리스트, start=1): doc_2 = hwp.XHwpDocuments.Add(False) # input문서 새로운 hwp열고 할당 (False=새로운창 / True = 기존hwp의 탭으로) hwp.Open(워크북) hwp.SetMessageBoxMode(0x20000) # 예,아니오 경고창은 노로 대답하기 doc_2.SetActive_XHwpDocument() # input문서 # Unit 추출하기 # '게시금지 ' 로 검색 hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = "게시금지 " hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.FindType = 1 hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 # 메시지 무시 설정 hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HAction.Run("Cancel") # Unit 칸으로 이동하여 복사하기 hwp.HAction.Run("MoveParaEnd") hwp.HAction.Run("MoveRight") hwp.HAction.Run("MoveSelParaEnd") # 현재 문단의 끝까지 블록 설정 hwp.HAction.Run("Copy") # 블록 설정된 텍스트를 클립보드로 복사 hwp.HAction.Run("Cancel") doc_1.SetActive_XHwpDocument() # output 문서 활성화 # 복사한 텍스트를 문서에 입력 if 파일인덱스 != 1 : hwp.HAction.Run("MoveDocEnd") hwp.HAction.Run("BreakPage") hwp.HAction.Run("Paste") hwp.HAction.Run("MoveSelLineBegin") for _ in range(10): hwp.HAction.Run("CharShapeHeightIncrease") # 텍스트 크기 증가 hwp.HAction.Run("Cancel") hwp.HAction.Run("MoveParaEnd") hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet) hwp.HParameterSet.HSecDef.PageDef.Landscape = 1 hwp.HParameterSet.HSecDef.PageDef.BottomMargin = 0 hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyClass", 28) hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyTo", 2) hwp.HAction.Execute("PageSetup", hwp.HParameterSet.HSecDef.HSet) doc_2.SetActive_XHwpDocument() # input 활성화 for 인덱스,타겟튜플 in enumerate(타겟리스트, start=1) : hwp.HAction.Run("MoveDocBegin") # 타겟 찾아서 쪽 복사하기 if 타겟인덱스찾기(타겟튜플,학년): hwp.HAction.Run("CopyPage") # 두번째 문서 활성화 하고 쪽 붙여넣기 doc_1.SetActive_XHwpDocument() # output 문서 활성화 hwp.HAction.Run("MoveDocEnd") hwp.HAction.Run("BreakPage") hwp.HAction.Run("PastePage") if 인덱스 > 1: hwp.SetMessageBoxMode(0x20) hwp.HAction.Run("MovePrevParaEnd") hwp.HAction.Run("Delete") hwp.HAction.Run("Delete") hwp.HAction.Run("MoveDocEnd") doc_2.SetActive_XHwpDocument() # input 문서 활성화 현재경로 = doc_2.FullName doc_2.Close(False) #TRUE : 내용이 변경된 경우 닫지 않음, FALSE : 강제로 닫음 hwp.SetMessageBoxMode(0xF0000) # 경고창이 기본모드로 바뀜 hwp.SetMessageBoxMode(0xF0) 현재디렉토리 = os.path.dirname(현재경로) 파일이름 = "상세분석_작업완료.hwp" 저장경로 = os.path.join(현재디렉토리, 파일이름) doc_1.SaveAs(저장경로) hwp.Quit() 한두개를 작업할떄는 문제가 없었는데 여러개를 작업하니까 문제가 생기네요..ㅠㅠ너무 큰 질문을 드리는것 같아 죄송하고 감사한 마음입니다..늘 강의 잘 보고있고 업무에 큰도움 받고있습니다 정말 감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
페이지 가로로 돌리기 매크로녹화 스크립트 미작동
문서 두개를 띄워서 작업을 하려고 하는데요. 먼저 한글시작을 하구 hwp = 한글시작(True) def 한글시작(TF): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = TF hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") return hwp 그다음 아래와같이 코드를 작성했는데요. hwp = 한글시작(True) doc_2 = hwp.XHwpDocuments.Add(False) # 새로운 hwp열고 할당 (False=새로운창 / True = 기존hwp의 탭으로) doc_2.SetActive_XHwpDocument() # 두 번째 문서 활성화 hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet) hwp.HParameterSet.HSecDef.PageDef.Landscape = 1 hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyClass", 24) hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyTo", 3) hwp.HAction.Execute("PageSetup", hwp.HParameterSet.HSecDef.HSet)XHwpDocumnets.Add 를 통해서 새로운 hwp를 열었고, 활성화도 했습니다.그이후에 한글을 직접 작동하여, 페이지를 가로로 돌리는것(편집용지->가로)을 매크로 녹화했는데요아래 부분을 입력하고 실행했을 때, hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet) FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\SAMSUN~1\\AppData\\Local\\Temp\\gen_py\\3.12\\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\\HSecDef.py.18740.temp' 이런 오류 메시지가 터미널에 뜨게됩니다.반면에, hwp.HAction.Run("MoveParaEnd")등을 실행했을 떄는 모두 정상적으로 작동합니다. 왜 한글매크로를 녹화한것이 제대로 작동하지 않는걸까요? 잘 알려주셔서 정말 감사합니다
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
탭 선택 관련 문의 입니다.
특정 탭에 진입할 수 있어야 합니다.이렇게 초반에 탭이 3개가 있는 프로세스가 있는 경우현재는 test2라는 탭이 활성화 되어있습니다.저는 test라는 탭을 편집하여야하는데test2를 종료 하더라도 test 탭으로 정확히 이동이 안되는데혹여 특정 탭에 접근이 가능한 방법이 있을까요?우선 현재 띄워져 있는 창의 탭 이름을 가져오는 것에는 성공을 하였습니다. from pyhwpx import Hwp hwp = Hwp() documents = hwp.XHwpDocuments for i in range(documents.Count): doc = documents.Item(i) doc_name = doc.FullName if doc.FullName else "저장되지 않은 문서" print(f"문서 {i}: {doc_name}") if 'test.hwpx' in doc_name: selected_doc = doc selected_num = i break if 'selected_doc' in locals(): # 해당하는 문서가 탭에 존재하면 해당 문서를 편집할 수 있게 선택 만약 탭이름을 활용해서 선택하는 방법이 없다면hwp.Run("WindowNextTab")을 통하여 현재 탭의 이름과 하나하나 비교하여 일치하는 경우까지 이동하게 하는 방식이 나을지 아니면 탭에 접근하는 방법이 있을지 질문드립니다.