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

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo

작성한 질문수

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

셀필드 쉽게 지정하는방법

해결된 질문

작성

·

63

1

안녕하세요

 

예를들어 100바이 100짜리 표에 엑셀에서 데이터를 옮겨야 한다면

한글 100바이 100짜리 표에 셀필드를 모두 지정해놔야 할까요?

 

모두 지정해야 한다면 한칸 한칸 속성들어가서 작성을 해야 하나요?

답변 2

1

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

현욱님 안녕하세요?

답변이 늦었습니다ㅜ

 

저 개인적으로는 임시 셀필드를 만들어서 엑셀데이터를 옮기는 방법을 자주 쓰지만,

필드를 쓰지 않고 셀 하나하나를 옮기는 방법이 필요한 경우도 있습니다.

(예를 들면, 엑셀파일의 날짜데이터나, 숫자데이터를 적절히 가공해야 한다든지요..)

 

두 가지 방법 다 예시를 보여드리겠습니다.

 

1. 임시 셀필드를 만들고 삽입하는 방법

예시로 사용한 엑셀파일은 여기에서 다운받으실 수 있습니다.

 

① 만약 표를 새로 생성하시는 거라면,

표를 새로 생성하시는 경우라면, 필드를 쓰지 않고 아래 코드로 엑셀문서를 가져오실 수 있습니다.

녹화_2024_09_29_19_43_58_576.gif

 

from pyhwpx import Hwp

hwp = Hwp()

hwp.table_from_data(
    data="괴상한취미특기.xlsx",  # 엑셀파일 경로
    treat_as_char=False,  # 글자처럼 취급 여부
    header=True,  # 1행을 제목행으로 반복할지 여부
    index=False,  # 1열에 인덱스 삽입할지 여부 
    cell_fill=True,  # 1행에 회색음영 여부
    header_bold=True  # 1행에 Bold 적용여부
)

# 표 전체너비는 유지한 채로 열 비율 조정하기 
hwp.set_col_width([2,2,6,6])  

 

② 표의 서식은 이미 완성되어 있고, 엑셀에서 내용만 채워넣는 경우라면?

저는 특별한 경우가 아니라면 이 방식을 가장 많이 사용하는데요.

이 경우에는

제목행을 제외한 모든 셀에 동일한 (아무) 이름의 셀필드를 모두 지정하면 됩니다.

엑셀데이터는 openpyxl이나 xlwings, pandas 등 여러가지 모듈 중 하나를 쓰시면 되는데,

아무래도 pandas가 가장 인기있는 모듈 아닌가 싶습니다. 참고할 포스팅도 많고요.

하여튼 엑셀문서를 데이터프레임으로 변환한 후,

값 부분만 1차원으로 펼쳐서 hwp.put_field_text로 넣으시면 됩니다.

설명이 다소 장황한데(코드도 약간 장황할 수...ㅜ)

아래 판다스를 활용하는 코드와 시연화면을 보여드리겠습니다.

녹화_2024_09_29_20_03_03_436.gif

 

from pyhwpx import Hwp
import pandas as pd

hwp = Hwp()

# 엑셀파일을 1차원 리스트로 변환하기
df = pd.read_excel("괴상한취미특기.xlsx")
l = df.values.flatten().tolist()

# target번째 표의 첫 번째(A1)셀로 진입하기
target = 0
hwp.get_into_nth_table(target)

# 1행을 제외한 모든 셀 선택 
hwp.TableLowerCell()
hwp.TableCellBlock()
hwp.TableCellBlockExtend()
hwp.TableColEnd()
hwp.TableColPageDown()

# 임시필드 넣고 값 채운 후 임시필드 지우기
hwp.set_cur_field_name("imsi")  # 선택된 셀에 셀필드 지정하는 코드
hwp.put_field_text("imsi", l)
hwp.set_cur_field_name("")  # 선택된 셀의 셀필드 이름 제거
hwp.Cancel()

코드가 다소 길어 보이지만, 동작 자체는 간단합니다.

①엑셀문서를 1차원으로 쫙 펼친 후에 ②put_field_text로 일괄로 넣는 작업이 전부입니다.

 

열마다 필드를 일일이 다른 이름으로 지정하지 않아도 되고, 서식도 잃지 않으면서

한/글 표와 엑셀 칼럼의 수만 일치하면 사용할 수 있는, 속도도 가장 빠르고 유용한 방법입니다.

 

2. 셀 하나하나 직접 옮기기

엑셀데이터에 날짜데이터가 있거나, 1,000단위 콤마를 넣어야 하거나,

"3.0E-3" 같은 지수 서식의 문자열을 "3×10^-3"처럼 위첨자로 변환해야 한다든지 하는 경우에는

셀을 한땀한땀 hwp.insert_text로 넣으면서 그때그때 조작해야 하는 경우가 있을 수도 있거든요.

(우선 put_field_text로 다 때려넣고, 다른 반복작업 코드로 후처리를 하는 방법도 있겠네요ㅎ)

 

하여튼 여러 가지 방법이 있겠지만, 1번 방법과 비슷하게 짜보면

녹화_2024_09_29_20_17_07_341.gif

 

from pyhwpx import Hwp
import pandas as pd

hwp = Hwp()

# 엑셀파일을 1차원 리스트로 변환하기
df = pd.read_excel("괴상한취미특기.xlsx")
l = df.values.flatten().tolist()

# target번째 표의 첫 번째(A1)셀로 진입하기
target = 0
hwp.get_into_nth_table(target)

# A2셀로 이동 
hwp.TableLowerCell()

# 순차적으로 값 입력
for value in l:
    hwp.insert_text(value)
    hwp.TableRightCell()

 

제가 질문의 의도를 제대로 파악하지 못하고

다소 장황하게 설명을 드린 느낌입니다ㅜ

 

하여튼 남겨주신 질문에 대한 답변을 요약해보면

① 꼭 셀필드를 적용해야 하는 건 아니지만, 적용하면 편하고 빠릅니다.

② 셀필드를 삽입할 때 항상 속성창에 들어가서 직접 필드명을 입력하는 경우도 많아요.

근데 한 번에 여러 셀을 선택하고 필드명을 지정할 수 있으니까,

꼭 코드를 활용하지 않아도 금방 작업하실 수 있을 거예요.

 

위의 예시에서는 극단적으로 엑셀데이터가 들어갈 셀 전체의 필드명을

아예 한 개로 통일해버리고, 값도 무식하게 한 번에 넣어버렸는데요.

경우에 따라 적절한 방법을 생각하셔서 구현하시면 될 것 같아요^^

하여튼 저 개인적으로는 크게 특별한 경우가 아니면 1.② 방법을 가장 많이 쓰고 있어요.

 

하나씩 해보시면서 적절한 방법을 찾으시기 바랍니다.

추가로 질문 있으면 언제든 자유롭게 남겨주세요!

 

도움이 되었길 바랍니다.

행복한 하루 되세요^^

 

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo
질문자

정성스러운 답변 감사합니다 .

적어주신 코드 하나씩 해보겠습다.

감사합니다.

1

안녕하세요, 인프런 AI 인턴입니다. Hyunuk Seo님.

100x100 크기의 한글 표에 셀필드를 모두 지정해야 한다면, 수동으로 각 셀에 필드 이름을 지정하는 것은 매우 번거로운 작업이 될 것입니다. 이를 자동화하는 방법이 있습니다.

이전 질문에서도 유사한 문제에 대해 다룬 적이 있습니다. 아래에서 유사한 사례와 해결 방법을 참고하실 수 있도록 관련 링크를 제공하겠습니다.

셀필드 응용 질문

해당 게시물에서는 셀필드명을 표에 자동으로 부여하는 코드 예제와 함께 설명하고 있습니다. 이를 통해 Hyunuk Seo님도 많은 셀에 대해 필드를 빠르게 지정할 수 있을 것입니다.

  1. 셀필드 자동 지정 코드 예제:
    ”`python
    import os
    from pyhwpx import Hwp

hwp = Hwp()

# 한글 문서 열기
hwp.Open(‘your_hwp_file.hwp’)

# 예: 100x100 크기의 셀 필드 자동 지정
table_rows = 100
table_cols = 100

for row in range(1, table_rows + 1):
for col in range(1, table_cols + 1):
fieldname = f”cell{row}_{col}”
hwp.MoveToField(field_name)
hwp.SetCurFieldName(field_name)

hwp.Save()
hwp.Quit()
“`

  1. 추가적인 정보:
    • 위 script는 주어진 파일(‘your_hwp_file.hwp’)을 열어 각 셀에 필드 이름을 “cell_행_열” 형태로 지정하는 예제입니다.
    • 한글에서 특정 셀이름을 수동으로 지정할 필요 없이, 이 코드를 실행하시면 자동으로 셀필드를 설정할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo
질문자

요건 아닌것 같아

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo

작성한 질문수

질문하기