데이터를 처리해줄때마다 한 줄 씩, 한 셀 씩 입력해야한다.

한번에 쓰려고 했었는데 그러면 중간에 어떤 데이터가 누락되었는지 알 수 없기 때문이다.

번거로워도 한 줄 씩 입력해줘야한다.

Write cell이나 Write Range는 세로 방향으로 써내려가기 때문에 못쓰고...

결국 가로로 한 셀씩 이동하면서 쓰는 것을 직접 짜게 되었다.

그러기 위해서는 컬럼의 인덱스, 즉 A B C D E... 같은 것들을 구해야하는데

그러기 위해서는 아스키코드를 활용해야한다.

 

출처 https://enter.tistory.com/49

 

보다시피 내가 사용해야하는 알파벳 대문자는 A 65부터 Z 90까지의 숫자이다.

포럼을 돌아다니다가 엄청난 플로우를 발견했다.

https://forum.uipath.com/t/write-data-horizontaly-in-excel/19413

 

Write data horizontaly in excel

Hu guys, can anybody solve my problem. I use extract data to extract a structured data of single column with 3 values. when i normally use write range it writes the data to A1 column What i want to do is to write that three entries in cell A1 B1 C1. i.e. h

forum.uipath.com

답변해주신 분이 쿨하게 플로우만 남기고 사라지셨다...

설명을 요구하는 질문자의 답글을 보면서 아 그러게 왜 이걸 답 안해주지 했는데 ㅋㅋ 결국 내가 이해함..

 

 

이 플로우는 결국 컬럼의 인덱스 문자를 얻기 위한 플로우이다.

ColumnName은 나중에 WriteCell에서 다음과 같이 응용될 수 있다.

ColumnName.Trim + "1".toString A1, B1, C1 ···
ColumnName.Trim + (oldDT.Rows.Count+1).toString 이 두가지 표현식은 내가 읽어온 DT의 마지막줄 다음부터 입력하는 표현식이다.
(Read 할때, Haeder가 있으면 +2, 없으면 +1)
ColumnName.Trim + (oldDT.Rows.Count+2).toString

 

1) modulo = (columnNumber-1) mod 26

modulo 는 아스키 코드로 표현하기위해 65에 더할 숫자를 의미한다.

"/26" 을 해준 이유는, 알파벳이 26개라서 그렇다.

A는 아스키코드 10진수로서 표현하면 65인데 65부터 1씩 더할수록 B, C, D, E ··· 점차 진행된다.

그 1씩 더하는 것을 표현한 것이 modulo 이다.

columnNumber가 3이면 65+2 이니까 C가 된다. 이처럼 알파벳 26가지의 숫자를 표현할 수 있는 조건을 생성한다.

 

2) columnName = Conver.ToChar(65+modulo).toString 

이런 식으로 표현해주면 숫자를 아스키코드로 인식하기 때문에 알파벳 대문자로 반환한다.

궁금해서 그냥 CChar(65+1) 을 해봤는데 그럼 오류가 난다.

아스키코드로 할건지, 아님 정말 문자열로 표현할건지 명확하게 해달라고 에러문이 뜬다.

 

3) Convert.ToInt32((columnNumber - modulo) / 26)

columnNumber를 0으로 초기화해주는 표현식이다.

 

 

뭐 이런 식으로 하면... 컬럼 인덱스를 VB 코드 없이 구할 수 있다.

포럼에 검색해보니 컬럼 인덱스를 구하기 위해서 VB 코드만 주는걸 보았는데...

꼭 그런 방법이 아니더라도 플로우로 구현할수도 있었다.

invoke Code나 Invoke VBA는 오류가 있을 수 있으니 ㅎㅎ

+ Recent posts