GetFieldList Number=2 hwpFieldCount 관련 문의

win32com 기준 - GetFieldList(Number=2) 를 실행하면

pywintypes.com_error: (-2147023170, ‘원격 프로시저를 호출하지 못했습니다.’, None, None)

와 같이 에러가 발생합니다.

혹시 이 옵션 값에 대한 것은 deprecated가 된 걸까요?

1개의 좋아요

안녕하세요

동작을 해야합니다.

특정 문서에서만 재현되거나 특정 코드에서 재현되는지 알려주시면 확인하겠습니다.

감사합니다

1개의 좋아요

다시 확인 결과 특정 문서에서 발생하는 것으로 보입니다.

해당 테스트 파일은

Number=0 와 Number=1는 정상 동작하나

Number=2 는 pywintypes.com_error: (-2147023170, ‘원격 프로시저를 호출하지 못했습니다.’, None, None) 이 발생하고 있습니다.

확인 가능하실 경우 부탁드리겠습니다.

test.hwp (26.5 KB)

1개의 좋아요

안녕하세요ㅎ

제 PC 2022, 2024에서 테스트해보았습니다.

그나마 실행은 되길래

녹화_2025_09_30_12_01_11_758

업데이트나 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)

1개의 좋아요