현재 마우스 커서의 상태를 구하는 방법에 대하여 알아보겠습니다. Autoit 편집기의 도움말에서 MouseGetCursor 의 Example 를 가져오면 다음과 같은 내용을 확인 할 수 있습니다.

 

#include <MsgBoxConstants.au3>

Sleep(1000) ; Allow time for the cursor to change its state.

; Create an array of possible cursor states using StringSplit.
Local $aArray = StringSplit("Hand|AppStarting|Arrow|Cross|Help|IBeam|Icon (obsolete)|No|" & _
        "Size (obsolete)|SizeAll|SizeNESW|SizeNS|SizeNWSE|SizeWE|UpArrow|Wait|Empty", "|", 2) ; The flag parameter is set to flag = 2 as we don't require the total count of the array.
#cs
    The array returned will contain the following values:
    $aArray[0] = "Hand"
    $aArray[1] = "AppStarting"
    $aArray[2] = "Arrow"
    ...
    $aArray[16] = "Empty"
#ce

Local $iCursor = MouseGetCursor()
MsgBox($MB_SYSTEMMODAL, "CursorID = " & $iCursor, "Which means " & $aArray[$iCursor] & ".") ; Use the CursorID value as the index value of the array

 

이중 동작에 실질적으로 영향을 주는 스크립트는 다음과 같습니다.

#include <MsgBoxConstants.au3>
Local $aArray = StringSplit("Hand|AppStarting|Arrow|Cross|Help|IBeam|Icon (obsolete)|No|" & _
        "Size (obsolete)|SizeAll|SizeNESW|SizeNS|SizeNWSE|SizeWE|UpArrow|Wait|Empty", "|", 2) ; The flag parameter is set to flag = 2 as we don't require the total count of the array.
Local $iCursor = MouseGetCursor()
MsgBox($MB_SYSTEMMODAL, "CursorID = " & $iCursor, "Which means " & $aArray[$iCursor] & ".") ; Use the CursorID value as the index value of the array

 

 

먼저 첫번째 줄은 StringSplit 를 활용하여 배열을 만드는 방법입니다. 이 배열에 대하여 확인을 위해서는 다음과 같이 입력하면 확인 가능합니다.

#include <MsgBoxConstants.au3>
#include <Array.au3>
Local $aArray = StringSplit("Hand|AppStarting|Arrow|Cross|Help|IBeam|Icon (obsolete)|No|" & _
        "Size (obsolete)|SizeAll|SizeNESW|SizeNS|SizeNWSE|SizeWE|UpArrow|Wait|Empty", "|", 2) ; The flag parameter is set to flag = 2 as we don't require the total count of the array.
_ArrayDisplay($aArray)

 

 

이 배열 값은 마우스 상태의 번호값을 String으로 변환하여 보여주는 역활을 해주게 됩니다. 이제 현재 마우스 상태를 숫자값으로 가져오는 MouseGetCursor 으로 숫자값을 가져 옵니다. 

Local $iCursor = MouseGetCursor()

 

그후 가져온 마우스 상태 번호를 활용하여 배열의 값을 메세지 박스로 표시해줍니다.

 

RPA에서 해당값을 사용하는 방법으로는 제품위에 마우스를 위치 시킨 후 마우스가 로딩중으로 표시되는 것은 아닌지 확인하는 방식으로 활용 가능합니다.

기본적인 마우스의 움직임을 조절하기 위해서는 MouseMove를 이용합니다. 원하는 위치로 이동시키기 위해서는 좌측값과 상단 값을 지정하여 이동하면됩니다. 

MouseMove(  350 , 250 )

 

간단한 숫자를 입력 후 F5를 통해 동작을 확인하보면 모니터의 왼쪽 상단으로 마우스가 이동하는 것을 확인 할 수 있습니다.

 

마우스가 이동하는 시간을 절약하기 위해서는 뒤에 숫자를 1개 더 붙이면 됩니다. 

MouseMove(  350 , 250 , 0 )

 

3번째 숫자의 기본값은 10 이며 0으로 설정할 경우 마우스가 순간이동하여 지정 된 위치로 이동되는 것을 확인 할 수 있습니다. 

 

마우스 클릭을 위해서는 MouseClick 함수를 사용합니다. 이함수는 제일앞에 어떤 버튼을 클릭할지 입력한 후 MouseMove 함수와 동일하게 위치값을 입력하면 됩니다.

MouseClick("right", 350 , 250  )

클릭위치의 프로그램에서 마우스 우클릭을 통해 ContextMenu를 확인할때는 이렇게 입력하면 확인이 가능합니다.

 

 

당연히 마우스 움직임 속도를 설정하여 순간이동으로 클릭하도록 설정도 가능합니다. 하지만 마우스클릭의 경우 클릭수 를 먼저 설정해야 합니다. 1번 클릭할지 더블클릭할지 등 클릭수를 설정 후 마우스 이동속도를 설정할 수 있습니다. 더블클릭의 경우 우클릭보다는 좌클릭으로 대상을 선택하는 것이 좀더 효과를 확인하기 수월하므로 left 클릭으로 변경하고 편집기의 첫 명령어 위치를 클릭하도록 설정후 확인해 보겠습니다.

 

 

천천히 이동된 마우스가 MouseClick 함수를 더블클릭하여 편집기에서 해당함수가 선택 되는 것을 확인 할 수 있습니다. 이제 마우스 위치 치동 값을 0으로 설정하여 순간이동을 통해 함수가 선택되는 것을 확인해 보겠습니다.

 

자동화를 위해서는 사용하는 프로그램의 정보가 필수 적인 경우가 많은데요. 이 정보를 얻기위해 Autoit에서는 기본적인 프로그램을 제공하고 있습니다. 

기본 경로에 설치 하였다면 하단 경로에 해당 파일이 위치하고 있습니다.

 

  • 해당 프로그램을 실행하면 하단의 프로그램이 나타납니다.

  • 사용법은 FinderTool의 커서를 클릭으로 옮겨서 원하는 프로그램위에 올리면 됩니다.

 

  • 각 탭별로 표시되는 정보들은 모두  Autoit에서 기본적으로 제공하는 함수들을 통해 얻을 수 있는 정보들 입니다. 크기 / 위치 / 핸들 / 색 등 원하는 정보를 확인하고 활용할 수 있는 기본적인 범위를 확인 할 수 있습니다.

 

  • 또한 하단에 표시된 내용은 더블클릭을 통해 복사가 가능합니다. 만약 메모장의 핸들을 구하고 싶다면 Window 탭의 메모장 정보를 활용하여 구할 수 있습니다. 

 

  • 표시 된 정보를 통해 핸들 값을 구하고 하단에 표시 된 핸들과 비교하는 작업을 진행해 보겠습니다. 클래스를 기준으로 값을 구할 예정이므로 입력에 필요한 값을 미리 입력합니다.
Local $hWnd = WinGetHandle("[CLASS:]")
  • Au3Info 파일의 Class 항목을 더블클릭 합니다.

 

  • 그후 Script의 CLASS: 뒤에 커서를 넣고 붙여넣기 합니다.
Local $hWnd = WinGetHandle("[CLASS:Notepad]")

 

구해온 핸들을 메세지 박스로 출력하여 확인 합니다.

 

핸들은 프로그램 실행시 마다 변경되므로 추출방법은 다양하게 알아보시는게 좋습니다.

이번에는 Winmove를 활용하여 메모장을 원하는 위치에 크기로 이동 하는 방법을 알아보겠습니다. 

 

[ Autoit ] Send로 키보드 값 입력하기 #1 - 기본편

 

[ Autoit ] Send로 키보드 값 입력하기 #1 - 기본편

RPA 자동화를 위해 키 값을 입력하는데 활용하는 Send에 대하여 알아보겠습니다. Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.  도움말이 표시되��

smart-west.tistory.com

 

  • Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.
  •  도움말이 표시되면 좌측에 [ 내용 ] 항목 탭을 선택 후 WinMove를 선택합니다. 그럼 우측에 세부 내용이 표시됩니다.

  • 이번에도 역시 하단 Example 를 복제하여 편집기 빈 문서에 붙여 넣어 줍니다.
Example()

Func Example()
    ; Run Notepad
    Run("notepad.exe")

    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Retrieve the position as well as the height and width of the Notepad window. We will use this when we have to move the window back to the original position.
    Local $aPos = WinGetPos($hWnd)

    ; Move the Notepad to the x, y position of 0, 0 and set the height and width at 200, 200.
    WinMove($hWnd, "", 0, 0, 200, 200)

    ; Wait for 2 seconds to display the new position of the Notepad window.
    Sleep(2000)

    ; Move the Notepad window back to the original position by using the array returned by WinGetPos.
    WinMove($hWnd, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3])

    ; Wait for 2 seconds to display the original position of the Notepad window.
    Sleep(2000)

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
EndFunc   ;==>Example

 

  • 이제 한줄씩 동작에 대하여 알아보고자 합니다.   Run은 프로그램을 실행 할때 사용합니다. 메모장은 notepad.exe 를 Run으로 실행해 주면 됩니다.  이전에는  Send("#r")  을 이용한 실행을 했으나 이번에는 Run을 통해 메모장을 실행하고 있습니다. 다양한 실행 방법을 경험하시면 추후 사용의 선택범위가 늘어나므로 다양한 방식의 실행을 한번씩 해보시는걸 추천드립니다.
 Run("notepad.exe")

 

  • 두번째 줄은 메모장의 실행을 기다리는 명령어 입니다. 클래스를 기반으로 기다리므로 언어의 영향을 받지 않고 기다릴 수 있습니다. 맨 뒤에 10이란 숫자는 최대 10초를 기다린다는 의미 입니다. 해당 동작을 진행하기 전에 모든 메모장을 종료 한 상태에서 진행해야 올바른 결과를 확인 할 수 있습니다. 
  Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

 

  • 세번째 줄은 현재 실행된 메모장의 핸들을 이용하여 크기와 위치를 구해오는 명령어 입니다. 
    Local $aPos = WinGetPos($hWnd)

 

  • 네번째 줄은 메모장의 핸들을 이용해서 강제로 위치와 크기를 이동하는 명령어 입니다. 
WinMove($hWnd, "", 0, 0, 200, 200)

 

  • 다섯번째 줄은 2초간 대기하는 명령어 입니다. PC의 성능에 따라 명확한 2초가 아닐수도 있습니다. 대략 2초로 생각하시는게 좋습니다. sleep를 기준으로 시간을 기록하는 프로그램을 만드는 경우 (추후 부터는 Sleep는 설명에서 제외 할 예정입니다.)
Sleep(2000)

 

  • 여섯번째 줄은 최초 실행시 얻어온 위치와 크기로 다시 원복하는 코드 입니다. 2초 대기 시간은 덤 입니다.
WinMove($hWnd, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3])
Sleep(2000)

 

 

마지막 줄은 메모장의 핸들을 이용해서 메모장을 종료명령을 진행하는 코드 입니다.

 WinClose($hWnd)

 

동작 화면 : 실행 후 최초 크기를 좀더 보기 위해 Sleep(2000)을 메모장 실행 후 추가 하였습니다. 

 

 

결과 소스 파일 :

winmove.au3
0.00MB

 

 

결과 실행 파일 : - 주의사항 : 아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다.  인터넷에서 다운 받은 EXE의 경우 보안알림이 뜰 확률이 매우 높습니다. 관련 메세지가 불안하신 경우 위에 AU3 파일이나 아래 스크립트 소스를 이용해서 직접 빌드해서 사용하시면 됩니다. 

winmove.exe
0.83MB

 

  • RPA 자동화를 위해 키 값을 입력하는데 활용하는 Send에 대하여 알아보겠습니다.
  • Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.
  •  도움말이 표시되면 좌측에 [ 내용 ] 항목 탭을 선택 후 Send를 선택합니다. 그럼 우측에 세부 내용이 표시됩니다.

 

  • 이번에도 역시 하단 Example 를 복제하여 편집기 빈 문서에 붙여 넣어 줍니다. 이제 한줄씩 동작에 대하여 알아보고자 합니다. 첫번째 줄인 Send("#r")  는 윈도우 + R 키를 의미 합니다. 윈도우 + R 키를 누르시면 "실행" 창이 표시 됩니다.

 

 

실행 화면 : 

 

두번째 줄인 WinWait("Run", "", 10) 는 실행 창이 표시되는 것을 기다리는 명령어 입니다. 최대 10초를 기다리는데 Help 명령어가 영문 OS에 맞춰져 있다보니 "Run" 타이틀 창을 10초간 기다립니다. 한국어 OS 기준으로 맞추시려면 WinWait("실행", "", 10)으로 바꾸면 됩니다.

 

 

 

그 다음 줄은  Send("notepad.exe{Enter}")  입니다. 실행 창에 노트패드 입력 후 엔터를 입력한다는 의미 입니다.  여기서 앞부분의 notepad.exe 는 글자를 그대로 입력합니다. notepad.exe는 메모장 실행파일을 의미 합니다. (손으로 직접 입력해서 확인해 보셔도 좋습니다. )

 

하지만 뒷부분에 { } 로 감싼내용은 키보드의 해당 키를 입력한 효과를 나타냅니다.

 

조금 응용하여 만약 ESC 키를 누른 효과를 주고 싶다면 {esc} 를 넣으면 됩니다. 

 

 

4번째 줄인  Local $hWnd = WinWait("[CLASS:Notepad]", "", 10) 는 메모장이 실행되는 것을 기다린다는 의미 입니다. 최대 10초간 메노장이 실행되는 것을 기다리게 됩니다. 이때는 타이틀이 아닌 CLASS 이름을 기준으로 대기 하고 있습니다.

 

 

메모장이 실행 되었다면     Send("Today's time/date is {F5}")  를 Send로 전송합니다. 앞의 Text는 고정이며 F5키는 메모장을 실행해서 확인해 보시면 현재 날짜와 시간이 자동으로 삽입 되는 것을 확인 할 수 있습니다.

 

 

6번째 줄은  WinClose($hWnd)  메모장을 종료하는 명령어 입니다. 강제 종료하는 방식은 아니며 종료 명령어를 호출 하는 방식이므로 닫을지 저장할지 묻는 창이 나타나게 됩니다. 

 

 

7번째 줄은   WinWaitActive("[CLASS:#32770]") 메모장을 닫을지 저장할지 묻는 창이 나타나길 기다리는 명령어 입니다. 

 

마지막 2줄은 0.5초 대기 후 탭 키를 누르고 엔터를 누르는 키입니다. 

    Sleep(500)
    Send("{TAB}{ENTER}")

해당 키를 입력하면 메모장은 저장하지 않고 종료 하게 됩니다.

 

Help Example Script 

Example()

Func Example()
    ; Simulate the key combination Win + R to open the Run dialogue window.
    Send("#r")

    ; Wait 10 seconds for the Run dialogue window to appear.
    WinWait("Run", "", 10)

    ; Simulate entering notepad.exe and pressing the 'ENTER' key.
    Send("notepad.exe{Enter}")

    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Simulate entering the following string and pressing the 'F5' key to input the date and time into edit control of Notepad.
    Send("Today's time/date is {F5}")

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)

    ; Now a screen will pop up and ask to save the changes, the classname of the window is called
    ; "#32770" and simulating the "TAB" key to move to the second button in which the "ENTER" is simulated to not "save the file"
    WinWaitActive("[CLASS:#32770]")
    Sleep(500)
    Send("{TAB}{ENTER}")
EndFunc   ;==>Example

 

결과 소스 파일 :

Send_Example.au3
0.00MB

 

결과 실행 파일 : - 주의사항 : 아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다.  인터넷에서 다운 받은 EXE의 경우 보안알림이 뜰 확률이 매우 높습니다. 관련 메세지가 불안하신 경우 위에 AU3 파일이나 아래 스크립트 소스를 이용해서 직접 빌드해서 사용하시면 됩니다. 

Send_Example.exe
0.95MB

 

Excel 파일을 열어서 복제 후 html 파일로

 

  • Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.
  •  도움말이 표시되면 좌측에 [ 내용 ] 항목 탭을 선택 후 _Excel_BookSaveAs를 선택합니다. 그럼 우측에 세부 내용이 표시됩니다.

 

  • 하단 Example 를 복제하여 편집기 빈 문서에 붙여 넣어 줍니다.

 

 

 

 

 

  • 파일을 불러오는 위치는 스크립트 위치에서 xls 파일을 불러오도록 되어 있습니다. Script 만 가져 왔기 때문에 폴더나 파일을 현재상황에 맞게 설정해 주는 작업이 필요합니다. 먼저 간단한 Excel 파일을 생성하여 Script와 동일한 위치에 파일을 저장하였습니다.

 

 

  • 경로와 파일명이 원본과의 변화가 되었으므로 현재 상황에 맞게 업데이트를 진행합니다.

 

  • 추가적으로 결과가 저장되는 폴더도 스크립트가 존재하는 위치로 변경해줍니다.

 

 

  • 이제 기본적인 변경 작업을 진행하였으므로 스크립트를 동작하여 결과를 확인합니다.

 

결과 스크립트 : 

#include <Excel.au3>
#include <MsgBoxConstants.au3>

; Create application object and open an example workbook
Local $oExcel = _Excel_Open()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSaveAs Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\Test_Sample.xlsx")
If @error Then
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSaveAs Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oExcel)
    Exit
EndIf

; Save the workbook (xls) in another format (html) to another directory and
; overwrite an existing version
Local $sWorkbook = @ScriptDir & "\_Excel1.html"
_Excel_BookSaveAs($oWorkbook, $sWorkbook, $xlHtml, True)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSaveAs Example 1", "Error saving workbook to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSaveAs Example 1", "Workbook successfully saved as '" & $sWorkbook & "'.")
ShellExecute($sWorkbook)
  • 고정 된 폴더가 아닌 내가 원하는 폴더를 선택하고 원하는 확장자만 가져오는 방식을 알아보려 합니다.

 

[ Autoit ] GUI 메뉴 만들기 - 기본편 

    ; Create a GUI with various controls.
    Local $hGUI = GUICreate("Example")
    Local $idOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)

    ; Display the GUI.
    GUISetState(@SW_SHOW, $hGUI)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idOK
                ExitLoop

        EndSwitch
    WEnd

    ; Delete the previous GUI and all controls.
    GUIDelete($hGUI)   

 

[ Autoit ] 특정 폴더 파일리스트 구해오기#1 - 기본편 

    Func Example()
    ; List all the files and folders in the desktop directory using the default parameters and return the full path.
    Local $aFileList = _FileListToArray(@DesktopDir, Default, Default, True)
    If @error = 1 Then
        MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.")
        Exit
    EndIf
    If @error = 4 Then
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.")
        Exit
    EndIf
    ; Display the results returned by _FileListToArray.
    _ArrayDisplay($aFileList, "$aFileList")
EndFunc   ;==>Example

 

  • 내용 결합 후 처음 하는 작업은 Case를 하나더 추가 후 OK 버튼을 하단으로 이동하는 작업을 진행하는 것 입니다.

 

  • 폴더를 선택 할 수 있는 명령어를 추가 합니다. 내가 원하는 폴더를 선택 할 수 있으며, 기본값은 Script 파일이 위치한 곳을 기본으로 열리게 됩니다. 추가로 Error을 방지하기 위한 코드도 추가로 넣어주시면 좋습니다.

 

 

  • 경로를 선택하는 함수를 추가 하였으므로 해당 값이 전달 될 수 있도록 작업 합니다. 

 

  • 여기서 동작을 확인해 보도록 하겠습니다. 내가 선택한 폴더의 파일리스트가 정상적으로 표시 되는 것을 확인 할 수 있습니다.

 

 

 

  • 여기에 한가지만 더 추가하면 내가 원하는 확장자만 가져올 수 있습니다.  _FileListToArray 의 2번째 항목에 확장자 정보를 업데이트 하면 됩니다. ( 초기 값 : Default )
    Local $aFileList = _FileListToArray($select_folder,  "*.au3", Default, True)

 

  • 다시 한번 동일하게 동작해서 결과를확인 합니다. 지정한 확장자만 표시되는 것을 확인 할 수 있습니다.

 

 

전체 코드 

#include <Array.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
;~ #include <MsgBoxConstants.au3>


; Create a GUI with various controls.
Local $hGUI = GUICreate("Example")
Local $idOK_T = GUICtrlCreateButton("OK", 310, 370, 85, 25)

; Display the GUI.
GUISetState(@SW_SHOW, $hGUI)

; Loop until the user exits.
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $idOK_T
			$select_folder = FileSelectFolder("Select Folder" , @ScriptDir ,4)
			If not @error Then
				Example($select_folder)
			EndIf

	EndSwitch
WEnd

; Delete the previous GUI and all controls.
GUIDelete($hGUI)


Func Example($select_folder)
    ; List all the files and folders in the desktop directory using the default parameters and return the full path.
    Local $aFileList = _FileListToArray($select_folder,  "*.au3", Default, True)
    If @error = 1 Then
        MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.")
        Exit
    EndIf
    If @error = 4 Then
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.")
        Exit
    EndIf
    ; Display the results returned by _FileListToArray.
    _ArrayDisplay($aFileList, "$aFileList")
EndFunc   ;==>Example
  • 이번에는 특정폴더의 파일리스트를 실시간으로 가져오는 방법을 알아볼예정입니다.
  • Autoit 편집기를 실행합니다.
    • 빠르게 실행하는 방법 중 하나는 윈도우 검색에서 "scite" 로 검색 후 실행 합니다.

 

  • Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.
  • 도움말이 표시되면 좌측에 [ 내용 ] 항목 탭을 선택 후 User Definde Functions Reference > File Management > _FileListToArray 를 선택합니다. 그럼 우측에 세부 내용이 표시됩니다.

 

  • 하단의 Example 2 의 내용을 복사하여 편집기에 붙여 넣습니다. ( Copy to clipboard 를 이용하면 편리 합니다.)

 

 

  • 내용을 편집기에 붙여 넣으셨다면 F5로 실행하여 동작을 확인합니다.

 

  • 코드를 보시면 동작에 필요한 코드는 2줄이면 됩니다. 아래처럼 코딩해도 동일한 결과물을 얻을 수 있습니다.
#include <Array.au3>
#include <File.au3>
Local $aFileList = _FileListToArray(@DesktopDir, Default, Default, True)
_ArrayDisplay($aFileList, "$aFileList")

 

  • RPA 툴을 만들다 보면 가장 위협이 되는 사항인 툴이 비정상종료 되는 현상입니다. 문제의 원인을 모르면 복구가 어렵기 때문에 미리미리 위협이 될만한 항목은 예외처리하는 방법을 알아놓으면 좋습니다. 실제 동작에 필요한 2줄사이에 들어간 @error 관련 코드가 바로 에러를 감지하고 멈출 수 있는 코드입니다.

 

  • @Error 1과 4의 자세한 내용은 도움말에서 확인이 가능합니다. Return Vale 에서 돌아오는 값 에서 Error 관련 값으 1번과 4번을 의미 합니다.  

  • 이번에는 손쉬운 찾아 바꾸기 툴을 만들어 보겠습니다.

  • Autoit을 기본경로에 설치 했다면 하단 경로에 2600 개 이상의 파일이 위치하고 있습니다. 이중 찾아바꾸기 툴을 만드는 내용에 대하여 알아보려 합니다. 하단 파일을 Autoit 편집기에서 열어 줍니다. 파일을 찾기 어려운 분은 하단에 코드를 빈문서에 붙여 넣으면 됩니다.
  • C:\Program Files (x86)\AutoIt3\Examples\Helpfile\_GUICtrlEdit_Find.au3
; using AutoIt Function

#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <WindowsConstants.au3>

Example_Internal()

Func Example_Internal()
	Local $s_Text = "this is a test" & @CRLF & _
			"this is only a test" & @CRLF & _
			"this testing should work for you as well as it does for me"
	Local $idButton1, $idButton2, $iMsg, $idEdit

	GUICreate('Find And Replace Example with AutoIt ' & FileGetVersion(@AutoItExe), 622, 448, 192, 125)
	$idEdit = GUICtrlCreateEdit($s_Text, 64, 24, 505, 233, _
			BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL, $ES_NOHIDESEL))
	$idButton1 = GUICtrlCreateButton("Find", 176, 288, 121, 33, 0)
	$idButton2 = GUICtrlCreateButton("Find And Replace", 368, 288, 121, 33, 0)
	GUISetState(@SW_SHOW)

	While 1
		$iMsg = GUIGetMsg()
		Select
			Case $iMsg = $GUI_EVENT_CLOSE
				ExitLoop
			Case $iMsg = $idButton1
				_GUICtrlEdit_Find($idEdit)
			Case $iMsg = $idButton2
				_GUICtrlEdit_Find($idEdit, True)
			Case Else
				;;;;;;;
		EndSelect
	WEnd
	GUIDelete()
EndFunc   ;==>Example_Internal

 

  • 먼저 상단의 include는 필요한 기능들을 삽입하는 것입니다. 매번 내가 만드는 것이 아니라 이렇게 include를 통해서 다른 사람이 만든 기능을 손쉽게 사용이 가능합니다. Autoit에서는 기본으로 제공되는 Include 파일이 약 150개 정도 있습니다.

 

  • 그 다음 과정은 함수를 만들고 실행하는 부분입니다. 함수를 만들때는 Func 로 시작해서 EndFunc 로 끝나게 생성하면됩니다. 그리고 해당 함수를 실행하기위해서는 함수 이름을 적어주면 됩니다.

 

  • 함수의 첫번째 내용은 본문에 기본적으로 표시되는 text 내용입니다. 중간 중간 삽입 된 @CRLF는 줄바꿈을 의미합니다. 

 

  • Local 을 이용하여 사용될 변수들을 미리 생성해 놓는 작업을 진행합니다.

 

  • 기본적으로 보일 GUI상자를 생성 합니다. 크기와 위치 그리고 상단에 타이틀바에 들어갈 제목이 적혀 있습니다.

 

  • 에디터를 생성하는 작업을 진행합니다. 크기와 위치설정하며, 기본값에 처음에 미리 만드렁둔 Text 값을 삽입하였습니다.

 

 

  • 2개의 버튼을 추가 합니다. 1개는 찾기 버튼이며, 한개는 찾아바꾸기 버튼입니다. 

 

  • 생성 된 2개의 버튼을 동작하도록 연결하는 작업을 While 안에서 진행합니다.

 

  • 간단한 코드를 통해 완성된 툴 동작을 확인해 보겠습니다. 먼저 Find 기능 동작 입니다. 범위 블록을 한 상태에서는 해당값이 자동으로 검색값에 들어가며 순차적인 찾기 기능이 동작하는 것을 확인 할 수 있습니다.

 

  • 이번에는 찾아바꾸기 동작을 확인해 보겠습니다. 값을 찾아 바꾸고 바꿀 값이 없어지면 알림 상자로 알려주는 것을 확인 할 수 있습니다.

  • 이번에는 GUI 메뉴 만드는 방법에 대하여 알아보고자 합니다.

 

  • Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.
  • 도움말이 표시되면 좌측에 [ 내용 ] 항목 탭을 선택 후 GUICreate 를 선택합니다. 그럼 우측에 세부 내용이 표시됩니다.

 

  • 우측의 스크롤을 내리다보면 Example1이 보이면 우측위의 Copy to clipboard를 클릭하여 내용을 복사하여 본문에 붙여 넣기를 진행 합니다.

#include <GUIConstantsEx.au3>

Example()

Func Example()
    ; Create a GUI with various controls.
    Local $hGUI = GUICreate("Example")
    Local $idOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)

    ; Display the GUI.
    GUISetState(@SW_SHOW, $hGUI)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idOK
                ExitLoop

        EndSwitch
    WEnd

    ; Delete the previous GUI and all controls.
    GUIDelete($hGUI)
EndFunc   ;==>Example

 

  • 붙여진 편집기 내용을 [ F5 ]로 실행하여 동작을 확인 합니다.

 

 

  • GUI 상자 표시 동작에 대한 분석을 함수의 첫번째 줄 부터 진행하자면 GUICreate 안에 써있는 값은 GUI 상자의 제목을 나타납니다.

 

  • 두번째 줄은 우측 하단에 삽입 된 OK 버튼을 의미 합니다.  숫자 4개의 값은 순서대로 OK 버튼의 왼쪽 이동값, 오른쪽 이동값, 높이, 폭을 의미 합니다.

 

  • 세번째 줄은 GUI 상자가 실제로 보이도록 하는 명령어 입니다. 만약 이것을 하지 않는다면 대화상자는 사용자 눈에 안보이는 상태로만 생성 되었다가 사라지게 됩니다. 

  • 네번째 while 명령어는 눈에 보이는 상태를 유지시켜주는 명령어 입니다. 이것이 없다면 표시되자마자 사라지기 때문에 사용자 눈에 실제로 보여지는 시간이 거의 없이 종료 되게 됩니다.

 

  • 다섯번째 Switch 명령어는 GUI 상자에서 버튼을 누르는 이벤트를 받아서 처리해주는 동작 입니다. 생성한 버튼이나 기본적으로 들어가 있는 GUI 상자의 버튼의 클릭 값에 따른 동작을 추가 가능합니다.

 

 

  • Case 의 $GUI_EVENT_CLOSE는 GUI 상자우측 상단에 기본적으로 제공되고 있는 X 버튼의 동작을 의미 합니다. $idOK 버튼은 2번째 줄에 생성 한 버튼을 의미 합니다. 이 2개의 버튼을 클릭하면 Case 하단의 동작을 진행하게 됩니다. 여기서는 ExitLoop 라고 적혀있습니다. 이것은 While 밖으로 나오도록 하는 명령어 입니다. 

 

While 문 밖으로 나온 후 GUIDelete 을 진행하게 됩니다. GUIDelete는 첫번째 줄에서 생성한 GUI 상자인 $hGUI 을 최종적으로 종료해주는 동작을 진행 합니다. 안정적인 프로그램 동작을 위해서는 생성한 값을 제거해주는 것이 좋습니다.

 

 

  • 페이지 로딩 방법 업그레이드 하기

 

  • Autoit 편집기를 실행 후 도움말을 사용하기 위해 저장된 파일에서 [ F1 ] 키를 누르세요.  ( 저장 된 페이지에서만 도움말이 표시 됩니다. )

 

  • 도움말이 표시되면 좌측에 [내용] 항목을 선택 후 _LoadWait 를 선택합니다. 그럼 우측에 세부 내용이 표시됩니다.

"IE 페이지 이동하기#1 - 기본편" 에서는 페이지 대기를 Sleep(5000) 넣었지만 자동화를 개발하는 과정에서 페이지 이동 시 웹 로딩이 5초이상 걸리게 되면 그 이후 동작은 오류가 발생할 가능성이 생기게 됩니다. 안정성을 위해 이번에는 _IELoadWait로 변경해 보도록 하겠습니다.  _IELoadWait는 해당 페이지의 로딩이 완료되는 것을 기다려주는 명령어 입니다. 만약 페이지 로딩이 끝나는지여부를 눈으로 확인이 필요하다면 Sleep를 추가하는 것도 좋은 방법입니다. 그럼 로딩이 완료 된 후 Sleep만큼 눈으로 확인 가능한 시간이 제공됩니다. 

 

#include <IE.au3>

Local $oIE = _IECreate("https://www.naver.com/")
_IELoadWait($oIE)
_IENavigate($oIE, "https://www.daum.net/")
_IELoadWait($oIE)
_IENavigate($oIE, "https://www.nate.com/")

 

 

  • 위처럼 코드를 변경하게 되면 페이지 로딩이 끝나면 다음 페이지로 순차적으로 이동되는 것을 확인 할 수 있습니다.

 


  • 웹 페이지 이동 시 내용 확인하기

 

  • RPA 자동화를 위해 페이지를 이동하는 이유는 페이지를 활용하기 위해서일 것 입니다. 페이지를 읽어오는 방법은 여러가지가 있지만 이번에는 가장 원시적이면서 확실한 방법 중 하나를 이용해볼 예정입니다. 도움말에서 _IEDocReadHTML 을 선택하여주세요.

  • _IEDocReadHTML 하단에 보시면 Example 가 있습니다. 중간에 2줄을 선택하여 복사 후 각 _IELoadWait 하단에 붙여넣어주세요

 

 

#include <IE.au3>

Local $oIE = _IECreate("https://www.naver.com/")
_IELoadWait($oIE)
Local $sHTML = _IEDocReadHTML($oIE)
MsgBox($MB_SYSTEMMODAL, "Document Source", $sHTML)

_IENavigate($oIE, "https://www.daum.net/")
_IELoadWait($oIE)
Local $sHTML = _IEDocReadHTML($oIE)
MsgBox($MB_SYSTEMMODAL, "Document Source", $sHTML)

_IENavigate($oIE, "https://www.nate.com/")
_IELoadWait($oIE)
Local $sHTML = _IEDocReadHTML($oIE)
MsgBox($MB_SYSTEMMODAL, "Document Source", $sHTML)

 

 

  • 다음 코드를 실행할 경우 페이지가 로딩이 완료되면 html 내용이 대화상자로 나타나게 됩니다.  동작 화면은 다음과 같습니다.

 

 

위에 생성 된 AU3 파일은 하단에 첨부 하였습니다.

IE_이동하기_2.au3
0.00MB

  • 이번에는 Uipath를 이용하여 Word ( .doc )문서를 PDF 로 변환하는 작업을 진행해볼 예정입니다.
  • 먼저 동작 전에 Docx 문서를 생성하여 저장합니다. 이번에는 간단한 글자만 입력하였으나, 이미지등이 포함되어 있어도 됩니다.

 

  • Uipath를 실행합니다. 

  • 우측상단의 프로세스를 선택합니다.

  • 나타난 새 빈 프로세스 대화상자를 확인 후 만들기를 선택합니다.

  • [ 디자인 ] > [ 새로 만들기 ] > [ 플로우차트 ] 를 선택합니다.

  • 플로우 차트 대화상자에서 만들기를 선택하면 가운데 화면에 플로우 차트가 나타납니다. 

  • 패키지를 추가하여 MS Word를 실행하기 위한 준비를 시작합니다. [ 디자인 ] > [ 패키지 관리 ]를 선택합니다.

  • 패키지 관리 창이 나타나면 좌측에 [ 모든 패키지 ] > [ 공식 ] 을 선택한 후 "Word"를 검색합니다. 검색 후 나온 항목 중 UiPath.Word.Activities 를 선택하여 설치를 진행합니다.

 

  • word 관련 패키지가 설치되었으므로 좌측하단에 액티비티를 선택 후 검색창에 word로 검색합니다.

  • 좌측 액티비티 창에서 Word Application Scope를 더블클릭하면 가운데 화면에 해당 항목이 추가 됩니다. 해당 항목이 추가 되면 선을 연결해 줍니다.

  • Word Application Scope 를 더블클릭하여 내부로 진입하면 문서 경로를 입력하는 창이 보입니다. 해당 경로에 이미 생성해둔 파일 정보를 입력 합니다.

 

  • 좌측 액티비티 창에서 Export To PDF를 마우스로 드래그 하여 실행에 놓습니다. 

  • 정상적으로 동작하였다면 "다른 이름으로 저장할 파일 경로"를 입력받는 입력창이 나타납니다. 임의의 PDF 파일명을 입력합니다.

 

  • 이제 정상적인 동작을 하는지 확인을 위해 [ 디자인 ] > [ 파일 디버그 ] 를 선택합니다.

  • 지정한 경로에 PDF 파일이 생성 되었는지 확인을 진행합니다.

  • 이번에는 IE를 활용하여 페이지 이동을 진행해볼 예정입니다.
  • Autoit 편집기를 실행합니다.
    • 빠르게 실행하는 방법 중 하나는 윈도우 검색에서 "scite" 로 검색 후 실행 합니다.

 

  • Autoit의 도움말을 사용하기 위해서는 저장된 파일에서 [ F1 ] 키를 누르면 됩니다.  먼저 빈 문서를 생성 후 저장합니다. 그 후 커서를 편집기 안에 둔 상태에서 [ F1 ] 키를 누릅니다.

 

 

  • 도움말이 표시되면 좌측에 [내용] 항목을 선택 후 _IENavigate 를 선택합니다. 그럼 우측에 _IENavigate 가 표시됩니다.

 

  • 우측의 스크롤을 내리다보면 Example1이 보이면 우측위의 Copy to clipboard를 클릭하여 내용을 복사합니다. 

; Create a browser window and navigate to a website,
; wait 5 seconds and navigate to another
; wait 5 seconds and navigate to another

#include <IE.au3>

Local $oIE = _IECreate("www.autoitscript.com")
Sleep(5000)
_IENavigate($oIE, "http://www.autoitscript.com/forum/index.php?")
Sleep(5000)
_IENavigate($oIE, "http://www.autoitscript.com/forum/index.php?showforum=9")

 

 

  • 복사 된 내용을 편집기의 빈 문서에 붙여 넣습니다.

 

 

  • 디버그 실행은 [ F5 ] 키입니다.  상단메뉴의 [ Tools ] > [ Go ] 키를 누르거나 [ F5 ] 키를 눌러주세요.

 

  • 그러면 IE가 실행되며 최초 실행 페이지가 표시 된 후 5초 단위로 페이지가 변경 됩니다.

 

  • 페이지를 네이버, 다음, 네이트 순으로 이동되도록 수정할 예정입니다. 각각의 사이트에서 접속 주소를 복사하여 순서대로 붙여 넣습니다.
#include <IE.au3>

Local $oIE = _IECreate("https://www.naver.com/")
Sleep(5000)
_IENavigate($oIE, "https://www.daum.net/")
Sleep(5000)
_IENavigate($oIE, "https://www.nate.com/")
  • 변경 된 사이트정보를 기준으로 접속이 순차적으로 진행 됩니다.

  • 메세지 박스에 변화되는 값 추가하기
  • 먼저 메세지 박스에 스크립트 줄 수를 넣어보도록 하겠습니다. Autoit에서 제공하는 현재 스크립트의 줄 수를 알수 있는 명령어는 @ScriptLineNumber 입니다. 이것을 응용해서 대화상자의 Message 에 넣어보도록 하겠습니다. 이것을 이용하여 동작테스트 과정에서 문제 없이 진행 된 항목 까지를 확인이 가능합니다.
#include <MsgBoxConstants.au3>

MsgBox( 16384 , "Title", @ScriptLineNumber )

 

  • 메세지 박스의 버튼 선택에 따른 처리작업 추가하기
    • 메세지 박스의 버튼 선택에 따른 값 확인하기를 추가하여 좀더 사용자 친화적인 프로그램을 제작할 수 있습니다. 선택에 따른 번호는 메세지 박스를 추가하여 간단히 확인 가능합니다.
#include <MsgBoxConstants.au3>

Local $Select_Button_Num = MsgBox( 2 , "Title", "Text" )
MsgBox("","[ 선택 버튼 번호 ]", $Select_Button_Num )
  • 리턴 값은 하단 이미지에 표시 하였습니다. 값을 계속 외우고 있기는 어렵기 때문에 메세지 박스 사용시에는 리턴 값 확인을 빠르게 진행하는 방법을 진행해 보도록 하겠습니다.

 

  • 해당 값을 받아서 IF 문을 사용하여 각각 다른 동작을 분기하여 진행해 보도록 하겠습니다.
#include <MsgBoxConstants.au3>

Local $Select_Button_Num = MsgBox( 2 , "Title", "Text" )
if $Select_Button_Num = 3 Then
	MsgBox("","[ 선택 버튼 동작 ]", "[중단] 버튼을 선택하였습니다." )
ElseIf $Select_Button_Num = 4 Then
	MsgBox("","[ 선택 버튼 동작 ]", "[다시 시도] 버튼을 선택하였습니다." )
ElseIf $Select_Button_Num = 5 Then
	MsgBox("","[ 선택 버튼 동작 ]", "[무시] 버튼을 선택하였습니다." )
EndIf
  • 동작 화면은 다음과 같습니다.

 

메세지 박스는 가장 쉽게 사용가능한 표시 방법 중 하나입니다.  프로그램 사용자에게 정보를 전달 할수도 있으며, 오류를 탐지하는데 사용하거나 사용자의 선택을 결정 할수 있도록 도움을 줄 수 있습니다.

  • 첫 번째 값은 대화상자의 상태를 변경시켜 줍니다. 기본적으로 제공되는 Autoit 도움말에 관련한 설명은다음과 같으며,  아래 이미지를 참고하여 상황에 맞게 사용하시면 됩니다. 

  • 항목 번호 별 동작 결과

 

 

 

  • 두 번째 값은 대화상자의 제목 입니다.

 

  • 세 번째 값은 대화상자의 본문 입니다.

  • 네 번째 값은 시간입니다. 만약 해당 값을 설정하면 대화상자가 그 시간만큼 표시 된 후 자동으로 사라집니다. 아래 이미지는 3초로 설정되어 있으므로 버튼을 선택하지 않아도 대화상자가 3초만 유지 된 후 사라지는 것을 확인 할 수 있습니다.

  • 대화상자의 부모 핸들을 설정 할 수 있습니다.. 만.. 쓸일은 자주 없을 것 같습니다. 
  • Autoit에서 제공하는 날짜 시간함수는 도움말에서 확인 가능합니다. 결과 확인을 가장 쉽게 하는 방법중 하나인 대화상자를 이용하여 표기해보도록 하겠습니다.

 

  • Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요. 도움말이 표시되면 좌측에 [ 색인 ] 항목 탭을 선택 후 @YEAR 로 검색합니다. 처음 표시되는 @YEAR을 클릭하면 우측에 날짜 시간 관련 함수들이 표시됩니다.

 

  • 현재 날짜와 시간을 표시하는데 사용 할 값은 다음과 같습니다.
    • @Year : (올해) 연도를 나타냅니다.
    • @MON : 월을 나타냅니다.
    • @MDAY : 일을 나타냅니다.
    • @HOUR : 현재 시간을 나타냅니다.
    • @MIN : 현재 분을 나타냅니다.
    • @SEC : 현재 초를 나타냅니다.

 

  • 위에 명시 된 값들을 대화상자에 현재 날짜와 시간 순차적으로 표시해 보려고 합니다.  중간에 값을 구분하기 위해 _ 값을 추가 하였습니다.
MsgBox("","Time", @YEAR &"년 "& @MON &"월 "& @MDAY &"일 "& @HOUR  &"시 "& @MIN  &"분 "& @SEC& "초" )

 

  • 동작 화면

 

 

 

  • Web에서 원하는 자료를 별도의 파일로 저장하는 방법에 대하여 소개하려 합니다. 이번 예제에서는 온라인 구매 사이트인 옥션에서 아이패드의 관련 제목과 링크 그리고 가격을 뽑아 CSV 파일로 정리하는 방법에 대하여 알아보고자 합니다.
  • 검색용 자료 설정 작업 진행
  • IE를 실행하여 옥션 사이트에 접속합니다.

  • "아이패드"로 검색 후 상세 정보에 태블릿 선택 후 애플을 선택합니다. 해당 웹페이지는 잠시 최소화하여둡니다.   

 

  • UiPath에서 web Scraping 하기
  • UIpath Studio를 실행합니다.

  • Process를 클릭합니다.

  • Name은 web_scraping_test로 설정 후 Create 합니다.

  • 이번엔 Sequence로 작업을 진행하므로 Ctrl + N (New Sequence)를 선택합니다.

  • Name은 web으로 변경합니다.

 

  • 화면 가운데 Web Sequence가 생성된 것이 확인되면 상단 리본 메뉴의 Data Scraping 버튼을 선택합니다. 

  • Extract Wizard 대화상자가 나타나면 기존에 설정한 IE 페이지를 띄운 후 Next를 선택합니다.

  • Next 버튼을 누른 후 대화상자는 사라지며, 마우스 움직임에 따라 추출 가능 데이터에 표시가 나타납니다. 이 작업은 내가 추출하고자 하는 데이터의 패턴과 위치를 확인하는 과정이며, 순차적으로 2개의 제목을 선택하여 제목값들을 리스트화 할 수 있게 해주는 작업입니다.

  • 첫 번째 제목을 선택하고 클릭 후 다시 대화상자가 나타다면 Next 버튼을 선택합니다.

  • 두 번째 제목을 선택합니다.

 

  • Configure Columns 대화상자가 나타나면 Column3 값만 Price로 변경 후 Next를 선택합니다. 이미 제목을 추출하며 URL을 추출하였으므로 추가적으로 URL 체크박스는 체크하지 않았습니다.

 

  • Extract Wizard 대화상자가 나타나며 기존 정보에 가격이 추가되어 나타나는 것을 확인 할 수 있습니다.

  • 한 페이지만 검색해서는 301개의 데이터를 추출 할 수 없음으로 다음 페이지로 넘어 갈 수 있는 작업이 필요합니다. Finish를 선택하면 Indicate Next Link 대화상자가 나타나며 다음 페이지로 넘어갈 것인지 확인하는데 Yes를 선택하기전에  IE 창에서 스크롤을 가장 아래로 내려 Next 버튼이 보이도록 설정하면됩니다.

  • 대화상자에서 Yes를 하여 화상자가 사라지길 기다립니다.

  • Web화면에 다음을 의미하는  Next 버튼을 선택합니다.

 

 

 

  • 추출된 Data 정보 CSV로 저장하기
  • 화면 좌측 Activities의 Search 창에서 CSV로 검색합니다.

 

 

  • Write CSV를 더블클릭하면 화면에 추가된 것이 확인할 수 있습니다.

  • FilePath 정보는 바탕화면에 csv확장자 로 설정하여 저장합니다.

  • Data table 선택 후 영어 e를 입력하면 ExtractDataTable 값이 나타납니다. 해당 값을 선택합니다.

 

  • 동작 확인
  • F5 (Run) 버튼을 선택합니다.

 

  • IE 화면이 변화되는 것을 보며 대기 합니다.
  • UiPath 화면이 다시 나타난 후 바탕화면을 확인하면  csv  파일이 생성된 것을 확인할 수 있습니다.

  • Csv 파일을 열어서 내용을 확인하면 데이터가 추출된 것을 확인할 수 있습니다.
     

 

 

 

 

RPA에 가장 자주 쓰이는 프로그램 중 하나는 Excel입니다. Excel의  데이터를 읽고 쓰는 작업을 통해 기본적인 UiPath의 사용법을 익혀볼 수 있습니다.

작업 순서는 간단한 엑셀 데이터를 미리 만든 후 UiPath에서 읽고 다시 새로운 파일을 생성하는 작업을 진행할 예정입니다.

 

 

  • UIpath에 사용될 xlsx 기본 샘플을 만들기 위해 먼저 Excel을 실행합니다.

 

  • 간단한 데이터를 먼저 입력 후 Excel 속성을 일부 적용합니다.

 

  • 작성 완료된 문서를 바탕화면에 “환율.xlsx”로 저장합니다.

 

 

  • 이제 샘플 작업이 완료되었으므로 UiPath에서 Excel 데이터를 추출하는 방법을 진행합니다.
  • 시작 – UiPath Studio를 실행합니다.

  • UiPath Studio가 실행되면 시작의 하위 항목인 프로세스를 선택하여 새로운 새 빈 프로세스를 생성합니다.

 

  • 파일 이름과 저장 경로를 확인하여 Create(만들기)를 선택합니다.

 

  • 기본값으로 생성 시 경로는 내 문서 하단에 저장됩니다.

  • Create 생성 후 UiPath 화면은 다음과 같습니다.  PC에 설정 된 언어에 따라 언어는 다르게 나타날 수 있습니다.

 

  • 이번 작업은 자주 사용되는 Flowchart를 기반으로 작업할 예정이므로 좌측 상단 New – Flowchart를 선택합니다.

 

 

  • Flowchart의 이름과 위치를 확인 후 Create를 클릭합니다.

 

  • 가운데 중간에 Main이 아닌 새로 생성된 Folwchart 탭이 선택된 것을 확인 후 좌측 하단 Activities 탭을 선택합니다.

 

 

  • 해당 탭에서 제공하는 많은 항목 중 우리는 Excel 관련 항목을 사용할 예정이므로 Search activities 검색 창에 ‘excel’ 입력합니다.

 

  • Excel의 기능을 사용하기 위해 Excel Application Scope 더블 클릭하면 Flowchart에 추가됩니다.

  • Flowchart 안의 Excel Application Scope를 Double-click to view 부분을 더블 클릭하면 편집 상태가 되는데 Do 문이 기본적으로 삽입된 것을 확인할 수 있습니다.

 

  • 미리 만들어둔 샘플을 열기위해 Workbook path. Text must be quoted 항목의 우측 … 버튼을 선택합니다.

  • 파일을 열기 위한 Select an excel document 선택 창이 나타나면 미리 작성해 놓은 환율.xlsx 파일 선택 후 열기를 진행합니다.

  • 샘플파일의 파일 경로가 정상적으로 입력된 것을 확인합니다.

  • 다시 좌측 Activities 탭으로 이동 후 Excel 하단의 Read Range를 선택 합니다.

  • Read Range를 마우스로 선택하여 Do 안에 Drag&Drop하여 삽입합니다.

  • 하단 이미지 처럼 항목안에 정상적으로 Read Range 항목이 삽입된 것을 확인합니다.

 

  • Excel데이터를 담을 변수 만들기
  • 추출 되는 Excel 값을 배열 값으로 받아오는 변수 선언이 필요하므로 중앙 화면 하단 Variables 탭을 선택합니다.

 

  • 변수 추가를 위해 Create Variable 항목을 선택합니다.

  • Variable1 항목이 자동 생성 되며 편집 상태가 됩니다.

 

  • Name에 Data_Value를 입력하는데 이것은 Excel 데이터를 담게 될 변수명입니다.

 

  • 2번째 항목은 기본값은 String이지만 해당 항목을 클릭하면 콤보 박스 형식으로 몇 가지 항목이 나타나는데 우리가 원하는 항목이 보이지 않음으로 마지막 항목인 Browse for Types … 항목을 선택합니다.

  • Browse for Types 선택 후 추가 대화상자로 Browse and Select a .Net Type이 나타나는데 상단 검색창에 DataTable를 입력합니다.

  • 검색된 내용 중 System.Data.DataTable를 선택 후 OK 합니다.

 

  • Scope는 기본값이 Do로 되어 있는데 해당 항목을 선택하면 지역 변수로 Do 항목 안에서만 유효하므로 외부에서 해당 변수를 사용하기 위해서는 변경이 필요합니다.

 

  • Scope의 Flowchart를 선택하여 전역 변수로 변경합니다.

 

  • Properties 설정하기

 

  • Do 안에 삽입된 Read Range를 선택 후 우측 Properties 창을 보면 현재 체크된 옵션 값은 AddHeaders 만 체크된 것을 확인할 수 있다.

 

  • Properties 하단의 Output 하위 항목인 DataTable을 선택합니다.

  • 우리가 기존에 Data_value라는 이름의 변수를 생성했으므로 대문자 D를 입력하면 기존에 생성된 변수 중 D로 시작하는 Variables 값이 나타납니다.

  • 표시된 Data_Value를 선택합니다.

 

  • 불러온 Excel 데이터를 복제하여 새로운 Excel 파일 만들기

 

  • 상위 메뉴를 보면 현재 어떤 화면에서 작업 중인지 단계별로 나타내 주고 있는데 여기서 중앙의 Flowchart를 선택하여 한 단계 상위 메뉴로 이동한다.

 

  • 기존에 작성한 데이터를 활용할 예정이므로 Excel Application Scope 항목을 선택합니다.

  • 단축키를 통해 쉽게 복제가 가능한데 Ctrl + C를 누른 후 Ctrl + V를 누르면 복제되는 것이 바로 확인할 수 있습니다.

 

  • 작업 연결을 하기위해선 겹쳐진 항목들을 순차적으로 놓는 것이 편리하므로 각각의 항목들을 마우스 이동을 통해 정렬합니다.

 

  • 이제 연결 작업을 진행하는데 마우스 동작을 통해 쉽게 연결이 가능하다. 먼저 Start 항목에 마우스를 올리면 확장가능한 선이 표시됩니다.

 

  • 해당선을 잡고 연결하려는 개체까지 Drag&Drop 합니다.

 

  • 정상적으로 선이 연결되었으면 동일한 방법을 통해 모든 개체를 순차적으로 연결합니다.

 

  • 복제를 통해 생성된 마지막 Scope를 더블 클릭으로 선택하여 진입합니다.

  • Do 안의 Read Range는 Excel 값을 불러오는 동작이므로 선택 후 삭제 합니다.

 

  • Excel 값을 쓰기위해 Activities 항목 중 Write Range를 검색하여 선택합니다.

  • write Range를 선택하여 Do 안에 Drag&Drop으로 삽입 합니다.

  • 삽입된 Write Range 항목의 Data table 항목을 선택 후 Read Range와 동일하게 대문자 D를 입력하면 Data_Value 값이 나타납니다.

 

  • 표시된 Data_Value를 선택한다. 동일한 변수를 선택하여 Read Range에서 읽은 값을 Write Range에서 다시 사용할 수 있게 되었습니다.

 

  • Excel Applivcation Scope 항목의 파일명은 다른이름으로 저장하기 위한 파일명이므로 복사환율.xlsx로 변경한다.

 

  • Write Range를 선택 후 AddHeaders를 체크하는데 이것을 제외하면 제목 줄이 누락되어 복사가 진행된다.

 

  • 이제 작성한 Scope들을 동작시키기 위해 Run(F5)를 선택합니다.

 

  • 바탕화면에 복사환율.xlsx가 생성된 것을 확인할 수 있습니다.

 

  • 복사환율.xlsx 파일을 Excel에서 열어서 정상적으로 내용이 삽입되었는지 확인하면 다음과 같은 내용이 표시됩니다.

  • 원본과 비교 시 Excel에서 별도 설정한 세부 속성은 제외되고 값만 복제된 것을 확인 할 수 있다.

 

 

 

다음 항목을 개발하기 위한 코드는 다음과 같습니다. 참고하시면 동일한 툴 제작이 가능합니다.

세금계산 툴 만들기

 

세금계산 툴 만들기

DIY 제작 RPA 툴 카테고리에 있는 "세금계산 툴"을 만드는 방법에 대하여 알아보려 합니다. 툴 동작 방식과 다운로드는 하단 링크를 참조하세요. 세금 계산 툴 세금 계산 툴 부가세 계산을 위한 툴

smart-west.tistory.com

 

 

  • 부가세 계산을 위한 툴 

 

  • 계산 방식
    • 공급대가 : 500 만원 
    • 공급가액 : 5,000,000 / 11  * 10 = 4,545,455
    • 부가세 : 5,000,000 / 11  = 454,545
  • 툴 화면
    • 입력 화면

 

전체금액(공급대가)입력창

  • 결과 화면

결과 출력 화면

  • 동작화면

  • 첨부파일

결과 실행 파일 : - 주의사항 : 아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다.  인터넷에서 다운 받은 EXE의 경우 보안알림이 뜰 확률이 매우 높습니다. 대부분의 보안알림은 경고성 안내이며 절대적인 문제 사항을 찾아서 알려주는 것은 아닙니다. 

하단 Build.zip파일 압축 해제 후 사용해주세요

 

 

Build.zip
0.54MB

+ Recent posts