엑셀 컬럼 추가하고 데이터 넣는데 1행씩 처리해야 되나요?

UiPath 테스트 중인데 엑셀 조작에서 막혔습니다.

DRM 보안이 있어서 엑셀을 실제 실행시켜서 열어야 되는 상황이고요.

하고 싶은 작업은 아래와 같습니다.

  1. A,B라는 컬럼이 있으면 C 컬럼을 추가 (read range → datatable로 저장하여 진행)
  2. C 컬럼에 A+B를 합쳐서 저장 (A와 B는 줄바꿈이 포함된 꽤 긴 문장 입니다)
  3. 합쳐진 C 컬럼을 기준으로 중복 제거

파이썬의 pandas를 쓸때는 한번에 다 처리가 되었는데, UiPath에서는 for each로 한행씩 읽어서
C 컬럼에 넣는 방법밖에 못찾았습니다.

엑셀 데이터의 행수가 몇십만건이 되는데 테스트용으로 2천건도 안되는거 돌려보는데도 너무느리네요.
엑셀 수식으로 해도 간단하게 =A&B로만 처리해도 되는데… 이 상태면 쓸 수가 없네요.

UiPath에서 더 빠르게 이런 작업에 사용 가능한 방법이 있는지, UiPath에서 읽은 DataTable을 Python Pandas의 DataFrame으로 넘겨서 작업할 수 있는 방법이 있는지 궁금합니다.

1 Like

안녕하세요

UiPath에 있는 Invoke Code 액티비티를 사용해보시는 것은 어떨까요?
이 코드에서는 VB.NET 사용해서 컬럼을 추가하고 A,B 컬럼의 값을 C에 반영하고
C 컬럼 기준으로 중복제거를 Activity가 아닌 VB 코드로 처리할 수 있어 수행 속도 측면에서 향상할수 있어 보입니다.

1 Like

안녕하세요, @applys 님.

  1. A,B 다음에 C 컬럼을 넣고 싶다면 Add Data Column 이라는 액티비티를 이용해 쉽게 추가할 수 있습니다.

image

다음과 같은 속성을 지정해주면 될 것 같습니다…
TypeArgument는 컬럼에 들어갈 데이터의 데이터 타입을 지정해주면 됩니다.

  1. 다음으로, C 컬럼에 A+B를 넣는 방법은 For Each Row 액티비티를 사용하면 될 것 같습니다.

  2. 중복 제거 하는 코드는 일반적으로 다음과 같습니다.

DataTable new_dt = old_dt.AsEnumerable().GroupBy(Function(i) i.Field(Of String)(“중복값이 있는 컬럼”)).Select(Function(g) g.First).CopyToDataTable

2 Likes

DataColumn의 Expression을 이용하면 원하는 답을 얻을수 있을것 같습니다,.

DataColumn 생성후 Expression 속성을 “ColumnName1 + ColumnName2” 이런 형식으로 하면 두컬럼의 값을 계산하여 각 Row의 해당 컬럼의 값을 채워 줍니다.

GitHub - mrbkdad/UiPathLib: My Library for UiPath 여기가셔서 DataTableExpressionAndDistinct.xaml 파일 받아 테스트 해보시면 알수 있을 겁니다. 아니면 온라인에서 DataColumn Expression을 찾아보세요.
혹시 도움 필요하시면 연락주세요(park363@daum.net)