본문 바로가기
업무자동화/파이썬-아래아한글 자동화 기초

[QnA] 엑셀에서 줄바꿈된 텍스트를 한/글로 옮길 때 줄바꿈 유지하기

by 회사원코딩 2022. 8. 4.
반응형
안녕하세요. 엑셀의 데이터를 한글로 옮기는 자동화 방법을 찾다가 유튜브에서 상장 만들기 컨텐츠를 보고 신세계를 경험했습니다. ^^ 그런데 그 과정 중에 엑셀에서 자동줄바꿈을 통해서 줄이 띄어져 있는 텍스트가 한글 (누름틀)로 입력이 되면 줄바꿈이 적용이 되지 않고 붙어서 입력이 되어서요. 혹시 엑셀의 줄 바꿈 편집이 그대로 한글에 엔터로 줄을 바꾼 것으로 적용되게 하는 방법이 없을까요? 번거로우시겠지만 답변 부탁드립니다.

 

안녕하세요?

이스케이프 문자열 차이 때문에 발생하는 간단한 문제이지만,

처음 겪을 때는 알쏭달쏭하기도 합니다.

 

해결방법을 먼저 알려드리면,

엑셀에서는 줄바꿈을 "\n"이라는 이스케이프 문자열로 처리합니다.

한/글에서는 줄바꿈을 "\n"이 아닌, "\r\n"으로만 인식합니다.

(그 외에도 리눅스 등 유닉스계열의 OS는 줄바꿈으로 "\n"을 사용하고, 윈도우는 "\r\n"을 사용하고 있습니다.)

 

결론을 먼저 알려드림 : 문자열.replace("\n", "\r\n")

그래서 엑셀의 줄바꿈인 "\n"을 모두 "\r\n"으로 바꾸어주어야 합니다.

바꾸는 방법은 간단한데,

아래처럼 replace 메서드를 추가하시면 됩니다.

a = "hello\nworld"
a = a.replace("\n", "\r\n")

예를 들어 설명해드리겠습니다.

1. 우측아래 엑셀파일의 A1 셀에 줄바꿈을 넣은 "Hello\nWorld"를 입력했습니다.

2. 우측 위 한/글파일에는 "a1"이라는 누름틀을 만들어 두었습니다.

3. hwp.PutFieldText("a1", ws.Cells(1,1).Value)를 실행하면?

(예상한 대로) 줄바꿈이 없어지고 한 줄로 입력이 되어버렸습니다.

 

이제, 코드를 아래와 같이 실행해봅니다.

우리가 원하는대로 줄바꿈이 적용되었습니다.

엑셀과 한글간 데이터교환을 할 때에는 꼭 필요한 절차이므로

항상 유념해 주시기 바랍니다.

 

행복한 하루 되세요!

반응형

댓글4

  • 이크에크요 2022.08.08 14:57 신고

    답변 감사합니다. 아래와 같은 코드에서 replace 함수를 실행하려면 replace가 어디로 어떻게 들어가야 할까요? ^^ 초보자의 질문에도 항상 친절히 답변해 주셔서 감사합니다.
    ___________________________________
    excel = pd.read_excel(filename2)

    #6. 한글 누름틀 목록 불러오기
    field_list = [i for i in hwp.GetFieldList().split("\x02")]
    for page in range(len(excel)):
    for field in field_list:
    hwp.PutFieldText(f'{field}{{{{{page}}}}}', excel[field].iloc[page])

    답글

    • 회사원코딩 2022.08.08 19:19 신고

      제일 오른쪽 아래

      excel[field].iloc[page] 뒤에다가 .repace를 붙이시면 됩니다.

      excel[field].iloc[page].replace("\\n", "\\r\\n"))

      으로 바꾸시면 됩니다. 테스트해보시고 안 되면 댓글로 알려주세요.

  • 이크에크요 2022.08.09 15:12 신고

    답변 감사드립니다. 무슨 이유인지 댓글 작성을 위해 로그인을 하는데 계속 로그인이 되어도 댓글을 작성하려면 다시 로그인 알림이 뜨네요...ㅠㅠ 너무 감사해서 빨리 답변을 드리고 싶었는데 늦었습니다... ^^
    말씀하신대로 적용하니 제대로 작동을 합니다. 아시겠지만 엑셀 데이터에 숫자 데이터가 있으면 Attribute 에러가 발생을 합니다. 그 외에는 다른 불편함 없이 원하는대로 작동이 됩니다. 답변 감사합니다. 좀 더 수정하고 싶은 부분들이 있는데 아직 내공이 부족하여 더 열공해야 할 것 같습니다.
    답글