안녕하세요! 기존에 아나콘다로 32비트 가상환경을 만들어서 win32사용했을때는 오류가 안났는데 최근 아나콘다 자체를 64비트로 변경하고 64비트 가상환경을 만들어 사용하려하니 아래와 같은 오류가 납니다. 찾아보니 32비트 가상환경으로 변경해야한다고 해서 32비트 환경구성 후 진행해도 동일한 에러가 나는데 어떻게 해야하는지 알 수 있을까요? (D:\Anaconda3_envs\dask_3.8.10) C:\Users\user>python Python 3.8.10 (default, May 19 2021, 13:12:57) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import win32com.client as win32 >>> hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject") Traceback (most recent call last): File "D:\Anaconda3_envs\dask_3.8.10\lib\site-packages\win32com\client\dynamic.py", line 84, in _GetGoodDispatch IDispatch = pythoncom.connect(IDispatch) pywintypes.com _error: (-2147221021, '작업을 사용할 수 없습니다.', None, None) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Anaconda3_envs\dask_3.8.10\lib\site-packages\win32com\client\gencache.py", line 621, in EnsureDispatch disp = win32com.client.Dispatch(prog_id) File "D:\Anaconda3_envs\dask_3.8.10\lib\site-packages\win32com\client\__init__.py", line 118, in Dispatch dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx) File "D:\Anaconda3_envs\dask_3.8.10\lib\site-packages\win32com\client\dynamic.py", line 104, in _GetGoodDispatchAndUserName return (_GetGoodDispatch(IDispatch, clsctx), userName) File "D:\Anaconda3_envs\dask_3.8.10\lib\site-packages\win32com\client\dynamic.py", line 86, in _GetGoodDispatch IDispatch = pythoncom.CoCreateInstance( pywintypes.com _error: (-2147221164, '클래스가 등록되지 않았습니다.', None, None)
여기서 필드위치로 가서 사진을 붙여놓는데요. 그런데 일반적으로 표의 셀이 많을경우 일일이 필드이름을 지정하기 어려울텐데 표를 불러와서 나무사진4라는 이름과 어떠한 폴더안에 나무사진4.JPG가 일치할 경우 나무사진4의 셀 위에 사진을 크기에 맞추어 붙여넣기 하는방법은 없나요?? 강의를 진행하다보면 저절로 알 수 있는 부분일까요?
한 문서 안에 표가 여러개 있을 때 하나씩 접근해서 표의 행과 열, 그리고 셀로 접근해서 셀의 데이터를 읽어 오고 싶습니다. "한/글 표에 데이터프레임 채우기" 강의에서 특정 표로 접근하는 부분은 확인하고 잘 되고 있습니다. 여기서 각 셀을 순환하면서 접근하여 각 셀 내에 있는 텍스트를 읽어 오고 싶습니다. 답변 부탁 드립니다. 감사합니다.
import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") 단순하게 이 코드를 실행하는데 아래와 같은 에러가 발생합니다 pip install도 안되고 pip install --upgrade도 안됩니다 ㅜㅜ --------------------------------------------------------------------------- ImportError Traceback (most recent call last) Cell In[1], line 1 ----> 1 import win32com.client as win32 3 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") 5 hwp.XHwpWindows.Item(0).Visible = True File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32com\__init__.py:8 5 import os 6 import sys ----> 8 import pythoncom 9 import win32api 11 # flag if we are in a "frozen" build. File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pythoncom.py:2 1 # Magic utility that "redirects" to pythoncomxx.dll ----> 2 import pywintypes 4 pywintypes.__import_pywin32_system_module__("pythoncom", globals()) File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32\lib\pywintypes.py:126 122 sys.modules[modname] = old_mod 123 globs.update(mod.__dict__) --> 126 __import_pywin32_system_module__("pywintypes", globals()) File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32\lib\pywintypes.py:52, in __import_pywin32_system_module__(modname, globs) 47 raise ImportError( 48 "Module '%s' isn't in frozen sys.path %s" % (modname, sys.path) 49 ) 50 else: 51 # First see if it already in our process - if so, we must use that. ---> 52 import _win32sysloader 54 found = _win32sysloader.GetModuleFilename(filename) 55 if found is None: 56 # We ask Windows to load it next. This is in an attempt to 57 # get the exact same module loaded should pywintypes be imported (...) 66 # That shouldn't really matter though, so long as we only ever 67 # get one loaded. ImportError: DLL load failed while importing _win32sysloader: 지정된 모듈을 찾을 수 없습니다.
안녕하세요 해당 수업 덕분에 한글을 좀 더 잘 쓸수 있게 되었습니다. 여러문서를 이리저리 합치다 보니 스타일이 막 뒤죽박죽으로 섞여서 예를 들어 바탕체, 바탕체사본1, 바탕체사본2 이렇게 섞여있어서 스타일을 좀 정리하고 싶은데 기존에 보니 모든 스타일을 바탕글로 바꾸는 코드는 있던데 표 안에는 적용이 안되고 서식복사기능을 사용하다보니 글씨 모양(볼드체나 색등)이 바뀌게 되던데 본문에 모든 글씨의 글씨모양이나 문단모양, 자간은 그대로 하고 스타일 정보만 바꾸고 싶은데 방법이 있을까요? 생각중인건 한 글자씩 글씨의 모든 정보 조회-> 각 정보를 변수에 저장 -> 원하는 스타일 변경 -> 복사한 변수정보로 대치 하면 될 꺼 같긴 한데, 보통 액션 자체에 변수초기화가 디폴트로 들어가다보니 이렇게 코드를 만드는게 맞는지 궁금합니다. 아니면 스타일값만 바꾸는(글자는 현재보이는 그대로) 다른 액션이나 파라미터셋이 있는지 궁금합니다. 내용이 복잡하긴하지만 조금 힌트라도 주시면 감사하겠습니다
import os import datetime as dt from time import sleep import win32com.client as win32 def init_hwp(): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule") return hwp hwp = init_hwp() #hwp.Open(r"D:\\SHW\\PROGRAM\\PYTHON\\hwp\\data\\실작업공정표.hwpx") hwp.Open(os.path.join(os.getcwd(), r"D:\\SHW\\PROGRAM\\PYTHON\\hwp\\data\\실작업공정표.hwpx")) def get_value(): hwp.InitScan(Range=0xff) # 추출범위를 "선택영역"으로 지정 text = hwp.GetText()[1] # 선택범위 문자열값 추출 hwp.ReleaseScan() # 검색종료 return text # 추출값 리턴 def get_weekday(text): week_list = ["월", "화", "수", "목", "금", "토", "일"] month, day = [int(i) for i in text.split(".")[:2]] week_num = dt.date(2022, month, day).weekday() week_day = week_list[week_num] return f"({week_day})" def insert_text(text): act = hwp.CreateAction("InsertText") pset = act.CreateSet() pset.SetItem("Text", text) act.Execute(pset) if __name__ == '__main__': hwp.FindCtrl() # 표 선택 hwp.Run("ShapeObjTableSelCell") # 첫 번째 셀로 진입(셀선택상태) while True: # 무한반복 text = get_value() # 셀의 텍스트 추출 if text.endswith("."): # 셀 안의 텍스트가 "."으로 끝나면(날짜셀을 구분하는 임의의 방법) weekday = get_weekday(text) # 요일 파악 hwp.Run("Cancel") # 셀선택 취소 hwp.Run("MoveLineEnd") # 문자열 끝으로 이동 insert_text(weekday) # 요일 삽입 hwp.Run("TableCellBlock") # 다시 셀선택 if not hwp.HAction.Run("TableRightCell"): # 우측으로 이동하다 break # 끝에 도달하면 while문 종료 아무리 해도 문서에서 변경이 안일어나는데 뭐가 문제인지 모르겠습니다. 그리고 마지막 if 문에서 if __name__ == '__main__': 이게 무슨 의미인지 설명 부탁 드립니다.
본 강의 덕분에 업무의 자동화가 목전에 왔습니다. 좋은 강의 열어주심에 감사드립니다. 또 여쭤봅니다. 파이썬에서 돌리는 와중에 표의 셀을 삭제할 때 한글에서 확인하는 창이 뜹니다. "선택된 셀들을 지웁니다. 내용만 지우고 셀 모양은 남겨둘까요? 남김(Y)/지우기(N)/취소(C)" 이 경우 자동화는 어떻게 하는지요? 현재는 한글내 마크로를 정의해서 활용하고 있습니다만..다른 방법이 있는지요?
표 혹은 그림이든 개체 여백조정을 하고자 합니다. 매크로정의하고 코드편집에 따라서 해보았는데요 잘 동작하지 않네요..ㅠㅠ 아래는 개체 바깥 여백조정을 위한 함수를 만들어 본 예제입니다. 바깥 윗여백만 조정하는 것으로 했습니다. def Change_Object_Blank(): hwp.HAction.GetDefault("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet) hwp.HParameterSet.HCellBorderFill.Hset.SetItem("ApplyTo", 1) hwp.HAction.Execute("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet) hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet) hwp.HParameterSet.HShapeObject.OutsideMarginTop = hwp.MiliToHwpUnit(0.0) hwp.HParameterSet.HShapeObject.Hset.SetItem("ShapeType", 6) hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet) return