win32com 기준 - GetFieldList(Number=2) 를 실행하면
pywintypes.com_error: (-2147023170, ‘원격 프로시저를 호출하지 못했습니다.’, None, None)
와 같이 에러가 발생합니다.
혹시 이 옵션 값에 대한 것은 deprecated가 된 걸까요?
win32com 기준 - GetFieldList(Number=2) 를 실행하면
pywintypes.com_error: (-2147023170, ‘원격 프로시저를 호출하지 못했습니다.’, None, None)
와 같이 에러가 발생합니다.
혹시 이 옵션 값에 대한 것은 deprecated가 된 걸까요?
안녕하세요
동작을 해야합니다.
특정 문서에서만 재현되거나 특정 코드에서 재현되는지 알려주시면 확인하겠습니다.
감사합니다
다시 확인 결과 특정 문서에서 발생하는 것으로 보입니다.
해당 테스트 파일은
Number=0 와 Number=1는 정상 동작하나
Number=2 는 pywintypes.com_error: (-2147023170, ‘원격 프로시저를 호출하지 못했습니다.’, None, None) 이 발생하고 있습니다.
확인 가능하실 경우 부탁드리겠습니다.
test.hwp (26.5 KB)
안녕하세요ㅎ
제 PC 2022, 2024에서 테스트해보았습니다.
그나마 실행은 되길래
업데이트나 PC환경 문제가 아닐까 추측해봤는데,
자세히 보니 결과도 조금 이상하네요.
>>> hwp.GetFieldList(Number=2).split("\x02")
['머리표제{{1}}',
'로고{{1}}',
'소속기관{{1}}',
'심볼{{1}}',
'수신부서{{1}}',
'참조{{1}}',
'제목{{1}}',
'본문{{1}}',
'첨언목록{{2}}',
'결재자목록18}}', # <---
'결재직위{{20}}',
'최종결재일자{{2}}',
'협조자목록16}}', # <---
'협조직위{{16}}',
'기획통제{{2}}',
'보안통제{{2}}',
'일상감사{{2}}',
'ChkFormCell{{2}}',
'시행제목2}1}', # <---
'접수제목2}1}', # <---
'우편번호{{2}}',
'주소{{2}}',
'홈페이지{{2}}',
'개인정보{{2}}',
'전화번호{{2}}',
'팩스번호{{2}}',
'전자우편{{2}}',
'공개구분{{2}}',
'양식끝{{2}}',
'결재자목록헤드{{1}}',
'협조자목록헤드{{1}}']
우선 Number=1
로 실행된다고 하시니,
잠시 아래 같은 함수로 대체하시면 어떨까요?
"""feat. Gemini"""
import collections
import re
def reformat_and_count_list(string_list: list[str]) -> list[str]:
"""
주어진 리스트의 각 문자열에서 '{{n}}' 패턴을 제거하고,
고유한 문자열의 개수를 세어 "{{개수}}" 형태로 다시 붙여 반환합니다.
Args:
string_list: 처리할 문자열 리스트. 예: ['이름{{0}}', '이름{{1}}']
Returns:
재구성된 문자열 리스트. 예: ['이름{{2}}']
"""
# 1. 각 문자열에서 '{{n}}' 부분을 정규표현식을 사용해 제거합니다.
# 예: '결재자{{10}}' -> '결재자'
cleaned_list = [re.sub(r'\{\{\d+\}\}', '', s) for s in string_list]
# 2. collections.Counter를 사용해 정리된 리스트에 있는 각 문자열의 개수를 셉니다.
# 결과: {'머리표제': 1, '로고': 1, '소속기관': 1, '결재직위': 20, ...}
counts = collections.Counter(cleaned_list)
# 3. 개수가 계산된 딕셔너리를 기반으로 최종 출력 리스트를 만듭니다.
# f-string에서 중괄호 '{'를 표현하려면 '{{'로 두 번 써야 합니다.
# 따라서 '{{'와 '}}'를 만들기 위해 각각 '{{{{'와 '}}}}'를 사용합니다.
result_list = [f"{key}{{{{{value}}}}}" for key, value in counts.items()]
return result_list
# 사용자께서 제공한 원본 리스트
original_list = hwp.GetFieldList(Number=1).split("\x02")
# 함수 실행 및 결과 출력
result = reformat_and_count_list(original_list)
print(result)
# 실행결과
['머리표제{{1}}', '로고{{1}}', '소속기관{{1}}', '심볼{{1}}', '수신부서{{1}}', '참조{{1}}', '제목{{1}}', '본문{{1}}', '첨언목록{{2}}', '결재자목록헤드{{2}}', '결재직위{{20}}', '결재자{{18}}', '최종결재일자{{2}}', '협조자목록헤드{{2}}', '협조직위{{16}}', '협조자{{16}}', '기획통제{{2}}', '보안통제{{2}}', '일상감사{{2}}', 'ChkFormCell{{2}}', '시행제목{{2}}', '시행{{2}}', '접수제목{{2}}', '접수{{2}}', '우편번호{{2}}', '주소{{2}}', '홈페이지{{2}}', '개인정보{{2}}', '전화번호{{2}}', '팩스번호{{2}}', '전자우편{{2}}', '공개구분{{2}}', '양식끝{{2}}']
아마 HAction 클래스 부분에서 에러가 발생했긴 했는데.. 이게 파이썬 버전 문제인지, 클래스문제인지, PC문제인지 제가 접근할 수 있는 영역까지는 아닌 거 같아 작성해주신 임시대안으로 원하는 방향성 코드를 작성해보겠습니다. 감사합니다.
{MY_PATH}\AppData\Local\Temp\gen_py\3.12\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0.py", line 9840, in GetFieldList
return self.oleobj.InvokeTypes(10015, LCID, 1, (8, 0), ((12, 1), (12, 1)),Number
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pywintypes.com_error: (-2147023170, ‘원격 프로시저를 호출하지 못했습니다.’, None, None)