인프런 커뮤니티 질문&답변

최인식님의 프로필 이미지
최인식

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

[응용] 엑셀문서 값을 필드에 입력하기

PutFieldText 함수 사용 관련 질문

해결된 질문

작성

·

347

1

def 필드삽입(index, value):
    field_list = ["이름", "성별", "생일", "취미"]
    for idx, field in enumerate(field_list):
        hwp.PutFieldText(f"{field}{{{{{index}}}}}", value[idx])

이 코드에서 다음과 같이 필드 이름을 넣어야 하는 이유를 알려 주시면 감사하겠습니다. 결국 필드 이름만 필요한 것 같은데 index가 왜 필요하며 괄호의 갯수는 왜 여러개인지 잘 모르겠습니다.

{field}{{{{{index}}}}}

답변 2

2

일코님의 프로필 이미지
일코
지식공유자

인식님 안녕하세요?^^

말씀하신 중괄호 부분은 추가로 인덱스정보가 필요한 경우입니다.
쉽게 예를 들자면 아래와 같은 경우에 쓰이는 문법입니다.

"이름"이라는 필드가 문서 내에 10개가 있을 때, 각각 10개의 다른 이름을 넣어야 할 때

"번호"라는 필드가 문서 내에 100개가 있고 각각 1~100씩 다른 값을 주어야 할 때

 

이런 경우에 필드이름을 굳이 "이름1", "이름2", "이름3"이라고 지정하지 않고
"이름"이라는 중복된 이름으로 10개를 지정한 후에
첫 번째 "이름" 필드에만 값을 채우고 싶으면?

hwp.PutFieldText("이름{{0}}", "최인식")

라고 넣으면 "이름"이라는 여러 필드 중 첫 번째 필드에만 값이 채워집니다.

인덱스번호 좌우로 중괄호 두 겹이 쓰이는데, (이건 이해 되시죠?^^)

여기서 문제가 하나 발생합니다.

 

왜냐면 f스트링이 중괄호를 잡아먹어버리기 때문입니다.
그래서 아래 코드 예시 마지막처럼 다섯겹을 넣어야만 그 결과가 "이름{{1}}"이 되기 때문에
결과적으로 중괄호 다섯 겹을 넣는 것입니다.
아래 각 print문의 결과를 한 번 검토해 보시기 바랍니다^^

 

>>> n = 1
>>> print(f"이름{n}")  # 1겹 : 일반 치환기능
이름1

>>> print(f"이름{{n}}")  # 2겹. f-스트링 안에서 중괄호 두 겹은 문자그대로의 중괄호 한겹임.
이름{n}

>>> print(f"이름{{{n}}}")  # 3겹 : 제일 안쪽 중괄호가 치환에 쓰이고 남은 두겹이 {}이 됨. 
이름{1}

>>> print(f"이름{{{{n}}}}")  # 4겹 : 치환되지 않고 리터럴한 문자열 중괄호 두 겹이 됨.
이름{{n}}

>>> print(f"이름{{{{{n}}}}}")  # 5겹 : 안쪽 한겹은 치환되고, 바깥 네겹이 두겹의 리터럴중괄호가 됨.
이름{{1}}  # 우리가 원한 결과! 그래서 다섯 겹이나 감싸야 함ㅜ

 

이 개떡같은 설명으로라도ㅜㅜㅜ
인식님의 이해에 도움이 되길 간절히 바랍니다.

행복한 하루 되세요^^

1

최인식님의 프로필 이미지
최인식
질문자

일코님~

친절하고 상세한 설명 감사드립니다.

잘 이해되었습니다.

앞으로도 막히는 부분 있으면 질문 드릴께요~

좋은 하루 되세요^^

최인식님의 프로필 이미지
최인식

작성한 질문수

질문하기