본문 바로가기
_PM•PO/[RPA] [UiPath]

[RPA] [UiPath] UiPath에서 엑셀 다루기 - 엑셀 표를 이메일 본문에 그대로 보이게 하는 방법

by Jiji_지지 2023. 11. 17.

한 3시간 정도의 삽질을 통해 발견해 낸 귀한 꿀팁입니다!

많은 분들이 참고하시어 도움이 듬뿍듬뿍 되었으면 좋겠어요!

☃️🍯


 

UiPath로 이메일을 작성하고, 엑셀 파일을 첨부하는 등의 작업을 진행하던 중, 엑셀 파일 내용의 일부를 이메일 본문에 추가해야 하는 mission이 있었다.

 

문제는 엑셀 파일을 datatable로 가져올 때, 포맷을 가져오지는 않는다는 점이었다. row와 column에 따라 내용을 충실하게 가져올 뿐.... 그렇지만 엑셀 파일을 열어보면 정렬부터 색상 등 예쁘게 작성되어 있다. 이 내용을 어떻게 하면 이메일에서도 "최대한" 동일하게 보여줄 수 있을까? 를 고민해 보았다.

 

그리고 찾아낸 몇 가지 방법! ✅

 


1. Read Range 속성의 'PreserveFormat' 이용하기

저 옵션 한 가지만 선택을 해 주면, 정렬과 어느 정도의 형식 정도는 가져온다.

엑셀을 다루다 보면 날짜나 숫자는 형식을 가지기 마련이다. 예를 들면 날짜의 경우, 엑셀에 보이는 형태로는 '2023-11-17'로 되어 있어도 형식 때문에 해당 값은 '20231117 00:00:00' 과 같이 시간 정보까지 같이 들어가있거나 할 수 있다. 그런데 이렇게 형식이 들어가 있는 경우, read range했을 때 '20231117 00:00:00'로 값을 가져오게 된다. 

이때 PreserveFormat을 써주면 내가 원하는 형태인 '2023-11-17'로 값을 가져오게 된다. 이와 같이 간단한 형식을 유지해서 가져오도록 하는 기능이다. (아직 디테일하게 확인은 못해봤는데 일단 좌우 정렬, 내용 형식은 가져오는데 그 외에 어떤 내용들까지 커버하는지는 확인해봐야할 듯 하다.)

 

근데 이 방법이 가지는 단점은, '스타일'이라고 불리울 만한 색상과 같은 정보는 가져오지 않는다는 점이다. 그래서 이를 해결하기 위해 이렇게 저렇게 생각해보며 다른 방법을 찾아냈다 !

 


 

 

 

2. 엑셀을 HTML로 먼저 저장하고, 그 텍스트 파일을 가져와 사용하기

-> 인코딩 이슈가 있어서 여러가지 테스트 중 .. !

이 작업을 하기 위해서는 사전에 작업해야할 사항이 조금 있다. 복잡할 수도 있으니 찬찬히 따라와보기!

(1) Invoke VBA 를 사용하기 때문에 미리 파일 만들기

 

🥲 발생하는 인코딩 이슈 정리🥲

: 위의 invoke VBA 를 사용해서 엑셀을 html 로 저장하면 인코딩이 이상하게(?) 된다. 언어가 uipath가 받을 수 없는 형태로 나온다. 정확히는 한글을 인식하지 못하는 이슈인 듯 하다. html로 저장된 파일을 보면 "charset=ks_c_5601-1987"로 저장된다.

(참고: 인코딩이 어떤 것으로 되었는지 확인하려면 <meta> 부분에서 확인하면 된다고 한다!)

 

🤨 시도해 본 방법🤨

1) 엑셀 파일을 html로 저장할 때 인코딩을 특정 코드로 하게 하기. 일단 이건 몇 번의 시도 끝에 결국 가능하지 않은 방법으로 밝혀졌다. ActiveSheet.SaveAs filePath, xlHtml, encoding:=650001 이런 식으로 넣어봤는데 encoding 뭐시기는 아예 받지 않는다고 한다.

2) read text file 할 때 encoding 코드를 넣어준다. -> 사실 이게 왜 안 되는지 아직도 모르겠는데.. 인코딩 코드를 "650001"로도 넣어보고 "utf-8"로도 넣어봤는데 작동하지 않는다... 그래서 아예 그냥 한국어를 인식해라! 하는 마음으로 " euc-kr'도 넣어봤는데 얘도 안된다. 심지어 euc-kr을 넣었을 때는, 파라미터에 name값을 제대로 써 주라고 한다... 근데.... euc-kr 은.... 너네들이 넣으라고 알려 준 이름이잖아 ㅠㅠㅠ 왜 안 되는 걸까..

 

(참고: 인코딩 코드는 링크에서 확인 가능하다. Read Text File / Write Text File / Append Line / Read CSV / Write CSV / Append to CSV 에서 사용 가능하다고 한다.)

 https://docs.uipath.com/activities/other/latest/workflow/supported-character-encoding )

 

 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)

이걸 사용해서 뭔가를 해볼 수도 있을 것 같긴 하다 ..? 

(요 글은 ANSI, UNICODE 등을 잘 설명해놓은 글이라서 참고할 것 !  https://blog.naver.com/yhol98/221572974587 )

 

아니면 파일 자체가 인코딩될 때, 다른 코드로 되어 있어서 그런 걸까? ....

댓글