본문 바로가기

RPA

[UiPath] DataTable에서 Empty Value만 지우기

제목만 보면.. 무슨 소린가 하겠는데요

아래 예시와 같이 중간중간 섞여있는 Empty Value만 지우고 값을 당겨서 쓰고 싶습니다

생각나는 방법으로는 VBA로 해결하기와 DT조작해서 해결하기...
그 중에서 DT조작으로 해결해봤습니다.

 

(좌) 정제 전 / (우) 정제 후

 

전체 흐름

작업은 For Each 안에서 하게 되는데요.
나중에 어떤 열에대한 작업을 하는 지 확인하는 지 편하도록 collection을 Excel Column Letter로 설정해주었습니다.
아래 소스를 사용하면 Z열 이후의 Column Letter도 Index로 쉽게 변환 가능합니다.
intIdx = UiPath.Excel.Helpers.ExcelUtilities.ConvertColumnLetterToColumnIndex(i.ToString) - 1

다음으론 DT에서 작업할 열만 뽑아서 Array로 만들어줍니다.
null이 아니거나 empty가 아닌 값만 뽑아왔습니다.
arrCol = dtData.Select("["+strColName+"] is not null OR ["+strColName+"] <>''").Select(Function(a) a(intIdx).ToString).ToArray()

그런 뒤 기존 Column을 지우고 (Remove Data Column), 새로운 Column을 생성해주고 원래 위치로 Column을 옮겨주고,  값을 넣어주면 끝입니다.
For Each 안에 또 For Each를 넣으면 너무 깝깝해보여서 Invoke Code 사용하였는데,, 그냥 For Each 사용해도 무방할 듯 합니다~,,

 

더 좋아보이는 방법...

그리고 글을 쓰다가 .. 더 합리적인 방법이 생각났네요

다른 부분은 다 똑같고요. 값이 제대로 들어가있다고 판단되는 열이 있다면 (예시의 경우는 A컬럼("ID"))
그냥 값을 덮어써주고 마지막에 A컬럼 Is Not Empty로 Filter DT만 해주면 간단하게 해결됩니다.....

끝..

소스코드는 아래 github에서 받을 수 있습니다
https://github.com/hyelim1007/UiPathProjects/tree/main/RemoveEmptyValue