딱 순서만 바꾸면 해결될 수 있는 상황에 있다...

구글에 "uipath move column" 을 검색했는데, 정확한 용어는 "reorder column" 이었나보다..ㅎㅎ

 

* 참고 URL

- https://excelcult.com/2019/06/07/how-to-reorder-columns-in-datatable-in-uipath/

 

How To Reorder Columns In DataTable - In UiPath - ExcelCult

Sometimes we might be asked to change the order of the columns in the excel…

excelcult.com

- https://forum.uipath.com/t/how-to-reorder-columns-in-datatable/52945/5

 

How to reorder columns in datatable

What parameters do I need to set?

forum.uipath.com

- https://forum.uipath.com/t/how-to-change-the-datatable-column-sequence/2109

 

How to change the datatable column sequence

I read excel by using read excel and stored data in datatable, now i want to change the datatable column sequence. Please give solution.

forum.uipath.com

 

**** 정리

1. 이 방법은 컬럼 이름만 바꾸는 경우 같다... DT 내의 정보 이동은 불가한 것 같아 보인다...

Assign Value as DT.Columns(0).ColumnName = "New Column Name"
Assign Value as DT.Columns("바꾸기 이전 컬럼 네임").ColumnName = "New Column Name"

 

2. Invoke Method 사용.

- 이걸 사용하려면 컬럼네임을 알고 있어야한다.

TargetType null
TargetObject (메소드를 적용할 타겟 지정) DT.Columns("컬럼이름")
MethodName (사용할 메소드 이름)
SetOrdinal

Direction (데이터 방향) Type (value에 대한 타입) Value
In Int32 이동할 컬럼 값

 

invoke method 사용 예시)

1. 2번째 컬럼을 4번째로 옮기면?

첫번째 컬럼 두번째 컬럼 세번째 컬럼 네번째 컬럼 다섯번째 컬럼
0 1 2 3 4
번호 제목 담당부서 첨부 게시일
번호 담당부서 첨부 제목 게시일

 

2. 4번쩨 컬럼을 2번째로 옮기면?

첫번째 컬럼 두번째 컬럼 세번째 컬럼 네번째 컬럼 다섯번째 컬럼
0 1 2 3 4
번호 제목 담당부서 첨부 게시일
번호 첨부 제목 담당부서 게시일

 

 

보니까 컬럼의 이동이 맞다.. 서로 자리만 바꿔주는걸 찾아야하는데ㅠ

컬럼이 이동하면 한칸씩 뒤로 밀린다.

컬럼 하나가 이동하면 다른 컬럼이 뒤로나 앞으로 밀리는게 아니라, 서로의 자리를 바꿔주는 방법을 찾아보자..!

 

** SetOrdinal 의 정보 (출처 닷넷)

https://docs.microsoft.com/en-us/dotnet/api/system.data.datacolumn.setordinal?view=netframework-4.8

 

DataColumn.SetOrdinal(Int32) Method (System.Data)

 

Changes the ordinal or position of the to the specified ordinal o

docs.microsoft.com

 

Kill Process 정말 유용하다.

그런데 이런 식으로 강제종료하는 플로우는, 다시 똑같은 어플리케이션을 실행했을때 이전에 강제종료한 파일을 복구할거냐는 알림창이 뜨기 때문에 셀렉터 잡는데 시간이 더 오래걸릴수도 있다...

그래서 되도록이면 close 어플리케이션으로 끝내는게 좋다.

그리고 이런 Kill의 Process Name을 정리해주는 곳이 분명 어딘가에는 있을 것 같은데.. 찾기 어렵다 ㅠㅠ

 

 

 

1. Excel

 

2. Internet Explor

 

3. Chrome

 

 

 

 

하 정말 DataTable과 DataRow 요것들은 엄청 엄청 엄청 자주 사용하지만, 제대로 이해해두거나 공부해두지 않으면 잘 못쓰겠어서 이상한 편법만 늘어난다...  실제로 Studio에서 DataTable과 관련된 엄청나게 많은 Activity들이 있지만 나는 사용할줄 아는게 Build DataTable 밖에 없고..ㅋㅋㅋㅋ.... 하.... 그래서 이상한 VBA를 겁나 찾아서 떼었다가 붙였다가 하는데, 나의 사수들은 액티비티 써서 플로우를 스크롤 없이 깔끔하게 만들어버린다..

다들 RPA는 개발자 아니라고 개무시 하지만, 막상 이걸 해보면 말이 다들 달라질거다ㅠㅠ 플로우를 체계적으로 짜는 것과 남들이 한눈에 볼 수 있도록 쉽게 짜고 정리하는 것. 많은 액티비티를 능통하게 사용하고, 또 VB를 능숙하게 다룰 줄 안다면 진짜 리얼 베스트다...

 

** 간략한 그림설명 (내가 만듬 ㅎㅋㅎㅋ)

 

만약 이 DataTable이 REFramwork로 들어가서 Transaction Data가 된다면, 각 Row는 Transaction Item이 된다..!

 

** DataTable

- 3번의 데이터로우를 뽑고싶을때

 DT.Rows.item(3)

 

- 마지막 데이터로우를 찾고싶을때 (참고URL: https://forum.uipath.com/t/get-last-row-of-datatable/91391)

 

Get last row of DataTable

Hello everyone, I’m having a datatable like this: Column A Column B Column C marc male m Ellen female v Bart male m I want to get the last row of my datatable into a new datatable. So that my new datatable gives: Column A Column B Column C Bart male m How

forum.uipath.com

 // DT를 뒤집어서 첫번째 값 가져오기.
 // DT의 마지막 DataRow 한개만 찾고싶은 것 뿐인데, 굳이 DT로 다시 변환해야할 이유가 있을까.. 
 Assign value as newDT = DT.asenumerable.reverse().take(1).copytodatatable

 // copytodatatable을 사용하지 않으면 datarow 값으로 나온다.
 Assign value as newDR = DT.asenumerable.reverse().take(1)
 // 만약에 두개 이상의 assign을 만들지 않고 한번에 하고싶다면?
 // 나라면, DT의 Row 갯수-1의 아이템을 불러오는 방법으로 했을 것 같다.. 
 DT.Rows.Item(DT.Rows.Count-1)

 // 마지막 Row의 첫번째 컬럼값을 얻는다면 이렇게 하면 된다
 DT.Rows.Item(DT.Rows.Count-1)(0)

 

** DataRow

- 3번의 데이터로우에서 첫번째 컬럼 값을 뽑고 싶을때

 DT.Rows.item(3)(0)

 Assign value as DR = DT.Rows.item(0) ▶ DR.item(0)

 

 

 

 

딱 이틀 공부했던 것 같다..

사실 Academy 강의 양도 그렇고.. 반나절이면 다 들을 수 있고, 습득도 빠르게 할 수 있다.

 

나의 간략한 느낀점은...

1. 기존의 Studio에서 다수의 액티비티가 빠지고, 가벼운듯 보이지만 사실 개발 중인 프로그램이기 때문에 에러가 많다

2. 공부하는 사람이 적기 때문에 포럼에 글을 오려도 답을 받기 어렵다. 결국 에러를 어떻게 해결했냐면, 지인을 통해 RPA 본사의 StudioX 개발자에게 메일을 보내는 등 했다.

3. 확실히 Auto fill 같이 새로 보는 액티비티도 많았고, 엄청 유용해서 Studio에 가져가고 싶다는 생각이 들었다. 그래서 StudioX에서 작업한 파일을 Studio에서 열어보니까 수정과 실행이 가능했고, 거기서 사용했던 액티비티들도 패키지로 따라오기 떄문에 오 괜찮겠다 싶었다. 그런데 프로젝트를 새로 생성해서 StudioX의 패키지를 다운받으려고 찾아봤는데 아무리 검색해도 나오지 않았다. 아마 기존의 Studio와 StudioX 간의 차별성을 두기 위해서 패키지를 막아둔 것이 아닐까..?! 싶었다. 결론은, Studio에서 StudioX에서 작업한 파일을 불러오고 액티비티를 사용하여 수정도 할 수 있지만 액티비티를 자체적으로 가져오는 것이 어렵다.

4. Academy에서 StudioX는 처음 사용하는 사람들도 쉽게 사용할 수 있도록 만든 프로그램이라고 했는데... 도대체 이렇게 에러가 많고, 복잡해서 어떻게 배울 수 있을까 하는 생각이 들었지만 Studio와 찬찬히 비교해보면 뭐 그럴수도 있겠다는 생각이 들었다. 액티비티의 수와 동작할 수 있는 범위가 좁고, 한정적이다. 패키지를 다운받으면 그 부분은 해결될 것 같다. 주로 비니지스에서 이용되는 엑셀, 이메일, 파일 등을 주로 다룬다. 

 

아래는 내가 그냥 실습한 파일들... 에러가 있을수도 있다..ㅋ

 

AutomateFilesandFolders.zip
0.15MB
decisions-for-each.zip
0.10MB
DownlodaEmailReceipts.zip
0.25MB
EventOrganizer.zip
0.43MB
excelAutumation.zip
0.08MB
Hello_World.zip
0.05MB
ui-automation.zip
0.39MB

 

 

** 참고 URL : https://forum.uipath.com/c/dev/studiox

 

StudioX

Dedicated category for our new product UiPath StudioX.

forum.uipath.com

 

 

* 이번주 월요일 날짜 구하기 (오늘이 3월 18일 수요일이면, 3월 16일 월요일을 출력함.)

- 참고 주소 : https://forum.uipath.com/t/date-of-monday-in-the-current-week/27309/2

Assign the value as DateTime.Now.AddDays(-1*(7 + (DateTime.Now.DayOfWeek - DayOfWeek .Monday)) mod 7).Date.ToString

 

* 지난주 오늘 요일 날짜 구하기 (오늘이 3월 18일 수요일이면, 3월 11일 수요일을 출력함.)

- 참고 주소 : https://forum.uipath.com/t/get-date-from-last-week/179260

Assign the value as DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd")

 

* 지난주 화요일 날짜 구하기 (오늘이 3월 18일 수요일이면, 3월 10일 화요일을 출력함.)

- 참고 주소 : https://forum.uipath.com/t/date-of-monday-in-the-current-week/27309/5

Assign the value as DateTime.Now.AddDays(-7).AddDays(-1*(7 + (DateTime.Now.DayOfWeek - DayOfWeek.Tuesday)) mod 7).ToString("yyyy-MM-dd")
오늘 날짜 - 7 - 1*((7+(오늘요일-구하는요일))을 7로 나눈 나머지 값)

 

* 전월 1일 구하기 (오늘이 9월 17일이면, 8월 1일을 출력함.)

Assign the value as  New DateTime(DateTime.Now.Year, DateTime.Now.Month-1, 1)

 

* 전월 말일 구하기 (오늘이 9월 17일이면, 8월 31일을 출력함.)

Assign the value as  New DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)

 

 

* Larger pivture of business Processes. (예시)

- Step : 이메일에서 첨부된 엑셀 파일을 다운로드 받는다.

- Task : 두개의 서로 다른 엑셀 파일에서 데이터를 병합하고 로컬 폴더의 최종 파일에 저장한다.

- Process : 멀티플 시스템이 필요하며 사용자의 결과파일 확인이 필요하다.

 

** Human Path and Robots Path

- Human Path : 내가 그린 플로우의 가장 최상위의 task의 steps. 내 입장에서 해야 할 일만 적어놓은 것

1. 다운받을 이메일로 로그인해서 들어간다

2. 이메일 첨부 파일을 다운로드 한다

3. 프로세스 트랜잭션

4. 겟 트랜잭션

5. 파일을 보낸다.

- Robots Path : 내가 그린 플로우의 디테일한 작업. 디테일하게 어떤 액티비티와 어떤 트랜잭션 과정을 통해 플로우를 만들 것인지 명시하는 것

1. 트랜잭션 타입을 지정해서 이메일 프로세스를 연다

2. "파일명.xlsx"를 다운받고 작업하는 파일경로에 저장한다

3. CRM app 을 작동한다.

4. 트랜잭션 엑셀파일을 연다

5. 트랜잭션 엑셀 파일을 열 갯수만큼 CRM app 시트에 삽입한다

- 엑셀로부터 값을 카피한다

- 카피한 값을 CRM app 에 기입한다

- 그 결과 값을 카피해 기존의 엑셀파일에 적는다

- 결과 값이 나오지 않는다면, 엑셀 파일에도 적지 않는다.

- get Transaction 으로 다시 넘어간다.

6. 모든 데이터를 처리했으면 처리한 엑셀 파일을 매니저 이메일로 보낸다 

 

* The benefits of creating a Robot Path before jumping into automation are:

- Better understanding of the task

- Serves as a guide while you build a Robot

- Decreased development time

 

 

 

 

배열은 컬렉션과 다르다!

배열은 정해진 메모리 크기에 불가변한 데이터를 넣는다. 삭제와 추가가 불가능하다. 데이터는 순서대로 처리한다.

그런데 컬렉션은 각 메모리에 주소가 있어서 주소를 이동하면서 데이터를 처리한다. 가변하기 때문에 데이터의 삭제와 추가 및 변경이 가능하다. 그래서 변하지 않는 데이터를 이용할때는 배열에 넣고, 가변하는 데이터는 컬렉션에 넣는다.

 

 

변수의 초기화

먼저, 컬렉션과 배열은 가급적 초반에 초기화해주는 것이 정신건강에 좋다. 왜냐하면 이것저것 작업하고나서 실행하려니까 안된다고 하는데, 대부분의 이유가 지정 범위를 벗어났던가 아님 초기화를 안해줘서 그렇다.

collection과 관련된 액티비티

 

다음 액티비티들은 UiPath에서 쉽게 찾아볼 수 있는 컬렉션 관련 액티비티들이다.

이러한 액티비티들을 사용하기 위해서는 초기화가 반드시!! 필요하다. 

(흔히 사용하는 DT 의 액티비티들도 초기화가 필수이다 !! )

변수타입 초기화 예시
 List  new List(Of 타입) from {값} new List(Of String) from {"가"}
 Array  new 타입(item개수) {값} new String(2) from {"가", "나"}
 Dictionary  new Dictionary(Of 타입, Of 타입) from {{값, 값}} new Dictionary(Of String, String)
                         from {{"가", "나"}, {"다", "라"}}

 

 

 

* 참고 주소

- https://www.edureka.co/community/41105/how-to-loop-through-a-dictionary-in-uipath

 

How to loop through a dictionary in UiPath?

I want to know how can I loop through a dictionary in UiPath?

www.edureka.co

- https://excelcult.com/2019/07/19/how-to-define-dictionary-add-items-to-dictionary-and-access-items-from-dictionary-in-uipath/

 

How To Define Dictionary, Add Items To Dictionary and Access Items From Dictionary - In UiPath - ExcelCult

What is a Dictionary? In general, a Dictionary is a collection of words and their…

excelcult.com

- https://forum.uipath.com/t/how-to-loop-through-dictionary/12243

 

How to loop through Dictionary?

how to Read data from dictionary which I have initialized like variable1= new Dictionary(Of String, String)From {{“0”, “string”}, {“1”, “string2”}}

forum.uipath.com

- https://forum.uipath.com/t/initialize-array-of-list/110770

 

Initialize Array of List

Hello, I have 4 lists and I want to put them into an Array. I am curious how can I initialize this new Array of Lists? I have assigned the lists to the array but what is the syntax to a new array of list? For Array, new String(4){} For List, new List(Of St

forum.uipath.com

 

 

+ Recent posts