작업을 하면서 도움이 많이 되었던 회사원블로그의 주인장님께서 친절히 알려주신 바에 의하면 \n은 한글에서는 \r\n으로 치환하여 넣으면 줄바꿈이 잘 됩니다... ㅠㅠ;;;(넣을텍스트.replace('\n', '\r\n') 를 이용하면 됩니다.)
아래는 이 간단한 사실을 모르고 삽질을 한 기록입니다 ㅎㅎ 참고하세요 ^^
최근 알게된 한글도 자동화가 가능하다는 사실과 이를 다루는 그리 많지는 않은? 블로그들을 참고하여서 TC작업을 한글로 바로 하기보다는 엑셀로 TC문서 구성후 이를 한글문서로 자동화하여 만들어내는 소소한 개인 프로젝트를 진행중이다.
지난번 글에 언급했던 회사원코딩 블로그를 운영하시는 분의 글을 참고하여 기본적은 틀은 만들어놓았고...
작업을 하다보니 특정필드에 텍스트를 넣을때 엑셀에 여러줄로 구성된 항목을 넣다보니 줄바꿈문자가 누락되는 것을 발견하였다 ㅠㅠ
엑셀로부터 들고온 스트링을 보면 줄바꿈문자는 \n 으로 구분이 되어있으나 이를 그대로 PutFieldText로 넣게 되면 줄바꿈문자는 적용이 되질 않는다.
하여 python string의 특정문자를 변경하여주는 replace로 여러가지를 시도하였으나 역시 불발...ㅋㅋ
이런저런 고민을 하다보니 해당문자위치로 직접 이동하여 엔터를 넣어주기로 구상을 하였다.
PutFieldText후 해당필드의 위치로 이동하여 해당위치를 얻어내고 넣으려하는 텍스트에서 \n의 위치를 알아낸 다음 해당위치로 다시 이동하여 해당위치에 엔터를 넣어주면 되는 작업이다.
이런저런 삽질과 우여곡절 끝에 성공하였다.
아래는 이에 대한 간단한 코드이며(넣으려 하는 텍스트에 여러개의 줄바꿈문자가 있는 경우도 고려) 핵심은 원하는 필드위치로 이동하는 메소드(MoveToField)와 해당위치를 얻어오는 메소드(GetPosBySet 그냥 GetPos메소드도 있으나 이는 포인터를 인자로 취하기에 파이썬에는 적합하지 않고 ParameterSet을 리턴해주는 GetPosBySet을 이용하여야 한다..)를 이용하여 적당히 위치를 가공한 후 다시 이동하는 메소드를(SetPos) 이용하는 것이 핵심이다.
참고로 엔터를 아래 코드에서는 BreakPara를 이용하였기 때문에... SetPos에서 두번째 인자를 적절히 조정하였으나 BreakLine으로 줄바꿈을 하면 조정할 필요가 없어진다..(귀차니즘으로 인해 그냥 놓아둠..ㅎㅎ...)
#입력한 필드텍스트에 줄바꿈문자(\n)가 있는 경우 그대로 넣으면 줄바꿈이 되지 않는다...
#따라서 줄바꿈 문자가 있는지 판단한후 해당필드로 이동하여 위치를 알아낸 후(GetPosBySet) 다시 그 위치로 이동하여 줄바꿈문자가 있는
#위치까지 이동후(SetPos) 해당위치에 줄바꿈문자를 넣어준다.
#문제는 줄바꿈문자를 넣으면 paraid가 변경이 되고(+1) 또한 다음줄에서의 줄바꿈문자가 들어갈 위치가 바뀌므로 그만큼을 계산하여 이동한다.
if '\n' in text_list[index]:
hwp.MoveToField(field+f"{{{{{row-2}}}}}")
posset = hwp.GetPosBySet()
listid = posset.Item("List")
paraid = posset.Item("Para")
pos = posset.Item("Pos")
#print("ListID : " + str(listid) + " ParaID : " + str(paraid) + " Pos : " + str(pos))
crindex = 0
crindex_pre = 0
crcount = 0
while crindex > -1:
crindex = text_list[index].find('\n', crindex)
#print("CRIndex : " + str(crindex))
if crindex > -1:
hwp.SetPos(listid, paraid+crcount, pos+crindex-crindex_pre)
hwp.HAction.Run("BreakPara") #여기서는 BreakPara 를 이용하였는데... BreakLine을 이용하면... 위의 SetPos에서.. paraid에 수정을 가할 필요가 없다... 그런데 수정하기 귀찮음...ㅠㅠ
crindex_pre = pos+crindex-crindex_pre+1
crindex += 2
crcount += 1
'STUDY' 카테고리의 다른 글
RestAssured Junit test결과중 http request/response 데이터를 Extent Report에 추가하기 (0) | 2022.04.28 |
---|---|
pypy 로 json decode 수행시 수행시간 변화 (0) | 2022.03.04 |
Python / 파이썬 coding시 기억해둘만한 것들 (2) | 2021.10.06 |
폰FOTA Update이후 Tethering 안됨현상. (0) | 2021.08.02 |
Excel VBA macro 에서 cmd 실행 (0) | 2021.07.22 |
댓글