행위

오토잇 테이블생성 자동화

DB CAFE

thumb_up 추천메뉴 바로가기


;~ ==================================
;~ 1.ERWIN 파일 실행 되어 있어야 함
;~ 2.TOAD 를사용함
;~ 3.erwin script를 호출해야함(위치: 바탕화면)
;~ ==================================

;WinTitleMatchMode = Alters the method that is used to match window titles during search operations.
opt("WinTitleMatchMode",2);1=start,2=subStr,3,exact,4=advanced,=1 to =4 = Nocase
opt("GUIOnEventMode",1);

#include <Array.au3>

Global Const $VK_CAPITAL = 0x14

hotkeyset("{ESC}","_exit")

If _Key_Is_On($VK_CAPITAL) Then
	MsgBox( 0, "", "캡스락 키가 켜져 있읍니다. 꺼주세요.",5)
	;CAPS LOCK 끄기
	Send("{CapsLock off}")
	Exit
EndIf

global $cb;

;~ 0. ini 설정

;~ ===============================================================================================
;~ 1.ERWIN에 Pre & Post 스크립트를 세팅 합니다.
;~ ===============================================================================================

Erwin_Script_Setup()

;~ ===============================================================================================
;~ 2.엑셀에서 작업 대상 로딩
;~ ===============================================================================================

$str = Get_Excel_Data("통합")	; 인자는 윈도우 타이틀

$Array_Target = FileReadToArray(@ScriptDir&"\temp_file.lst")

;~ 3.자동화 반복 처리
$proc_count = Do_Loop_Work($Array_Target)

MsgBox(0,"",$proc_count-1 &"건 자동화 처리 완료 ",3)

;~ 2. 자동화 반복 작업 ===========================================================================
;클립보드에 값이 없을때까지 반복
;~ $i = 2
Func Do_Loop_Work($Array_Target)


	For $i = 1 To $Array_Target[1] Step +1

;~ 		if StringLen(StringStripWS($Array_Target[$i+1],4)) <= 3 Then
;~ 			MsgBox(0,"",$i+1 &"건 종료 = "&$Array_Target[$i+1])
;~ 			$i = $i+1
;~ 			_exit()
;~ 		EndIf

;~ 		MsgBox(0,$i,$Array_Target[$i])

		WinActivate("AllFusion","")
		Send("{CTRLDOWN}{DOWN}{CTRLUP}")
		Send("{CTRLDOWN}g{CTRLUP}")

		;테이블 찾기
		WinWaitActive ( "Go To Table","",3)
;~ 		Send("{CTRLDOWN}v{CTRLUP}{HOME}{END}")
 		Send($Array_Target[$i+1],1)
		Send("{ALTDOWN}o{ALTUP}")

		;ERWIN POSTSCRIPT 처리
		Send("{ALTDOWN}b{ALTUP}")
		Sleep(100)
		Send("{p}")
		Sleep(100)
		Send("{t}")

		WinWaitActive("Oracle Script Template")

		Sleep(100)
		Send("{TAB}")
		Sleep(100)
		Send("{TAB}")
		Sleep(100)
		Send("{TAB}")
		Sleep(100)
		Send("{TAB}")
		Sleep(100)
		Send("{LEFT 5}")
		Sleep(100)
		Send("{RIGHT 1}")

		Sleep(100)
		Send("{TAB}")
		Sleep(100)
		Send("{TAB}")
		Sleep(100)
	 	Send("{CTRLDOWN}a{CTRLUP}")
		Send("{CTRLDOWN}c{CTRLUP}")
		Sleep(200)
		Send("{ALTDOWN}{F4}{ALTUP}")

		WinActivate("Toad","")
		MouseClick("left",534,592,0)
		if($i = 1 ) Then
			WinWait("[CLASS:TfrmMain]")
			ControlFocus ( "[CLASS:TfrmMain]", "", "TtdDScintilla1" )
			Send("{CTRLDOWN}a{CTRLUP}")
			Send("{DEL}")
		EndIf

		Send("{ENTER}")
		Send("{CTRLDOWN}{END}{CTRLUP}")
		Send("{ENTER}")

		Send("{CTRLDOWN}v{CTRLUP}")



	Next
	return $i

EndFunc

Func _exit()
    exit
endfunc


;~ Global Const $VK_CAPITAL = 0x14
;~     If _Key_Is_On($VK_CAPITAL) Then Send("{CAPSLOCK Toggle}")
;~ 	If _Key_Is_On($VK_CAPITAL) Then
;~     MsgBox( 0, "", "")
;~ 	EndIf

;캡스락키 확인
Func _Key_Is_On($nVK_KEY, $vDLL = 'User32.dll')
    Local $a_Ret = DllCall($vDLL, "short", "GetKeyState", "int", $nVK_KEY)
    Return Not @error And BitAND($a_Ret[0], 0xFF) = 1
EndFunc

Func FileReadBuffer($file_name)
	Local $output_txt = ''

	Local $file = FileOpen($file_name, 0)

	; Check if file opened for reading OK
	If $file = -1 Then
		MsgBox(0, "Error", "Unable to open file.")
		Exit
	EndIf

	; Read in lines of text until the EOF is reached
	While 1
		Local $line = FileReadLine($file)
		$line = $line & @CRLF
		$output_txt = $output_txt &	$line;
		If @error = -1 Then ExitLoop
;~ 		MsgBox(0, "Line read:", $line)
	WEnd

	FileClose($file)
;~ 	클립보드에 복사한다.
	ClipPut($output_txt)
EndFunc

Func FileReadToArray($file_name)
	Local $arry_return[1]=[""]

	Local $file = FileOpen($file_name, 0)

	; Check if file opened for reading OK
	If $file = -1 Then
		MsgBox(0, "Error", "Unable to open file.")
		Exit
	EndIf

	; Read in lines of text until the EOF is reached
	$i = 0;
	While 1
		Local $line = FileReadLine($file)

		If @error = -1 OR $line ="" Then ExitLoop
;~ 		MsgBox(0, "Line read:", $line)
;~ 		_ArrayInsert($arry_return,$i, $line)
 		_ArrayAdd($arry_return,$line)
		$i = $i+1
;~ 		_ArrayAdd($arry_return,$line)

	WEnd
	_ArrayInsert($arry_return,1, $i)
	FileClose($file)
	Return $arry_return
EndFunc


Func Erwin_Script_Setup()

;ERWIN 스크립트 불러오기

;~ 	$erwin_script = FileReadBuffer(@ScriptDir&"\erwin_post_script_for_web.sql");
	$erwin_script = FileReadBuffer(@ScriptDir&"\erwin_post_script.sql");
	MsgBox(0,"ERWIN - POST 스크립트 적용 ", 'ERWIN에 POST SCRIPT 적용을  시작 합니다. ',2)

	WinActivate("AllFusion","")

    Send("{CTRLDOWN}{DOWN}{CTRLUP}")
	Send("{ALTDOWN}b{ALTUP}")
	Sleep(100)
 	Send("{p}")
	Sleep(100)
	Send("{t}")

	WinWaitActive("Oracle Script Template")

	Sleep(100)
	Send("{TAB}")
	Sleep(100)
	Send("{TAB}")
	Sleep(100)
	Send("{TAB}")
	Sleep(100)
	Send("{TAB}")
	Sleep(100)
	Send("{LEFT 5}")
	Sleep(100)
	Send("{TAB}")
	Sleep(100)

	Send("{CTRLDOWN}a{CTRLUP}")
	Send("{CTRLDOWN}v{CTRLUP}")
	Sleep(100)
	Send("{TAB}")
	Sleep(100)
	Send("{TAB}")
	Send("{ENTER}")
;~ 	ClipPut(''); 클립보드 비우기
EndFunc



;엑셀에서 처리대상 테이블을 가져온다.
Func Get_Excel_Data($title)
	Local $arry_return[1] = [""]
	Local $file = FileOpen(@ScriptDir&"\temp_file.lst", 2)
	WinActivate($title,"")
	If WinWaitActive($title,"",3) Then
		;~ 클립보드 초기화
		ClipPut('')
		Send("{CTRLDOWN}g{CTRLUP}")
		WinWaitActive("이동","",1)
		Send("a1{ENTER}")
		Sleep(100)
		Send("{CTRLDOWN}{SHIFTDOWN}{DOWN}{SHIFTUP}{CTRLUP}")
		Sleep(200)
		Send("{CTRLDOWN}c{CTRLUP}")
		Sleep(200)
		$cb = ClipGet()
		Sleep(100)

		; Check if file opened for writing OK
		If $file = -1 Then
			MsgBox(0, "Error", "Unable to open file.")
			Exit
		EndIf


;~ 		FileWrite($file, StringStripWS($cb,8))
		FileWrite($file, StringReplace($cb," ",""))

		FileClose($file)

		If StringLen($cb) <= 2 Then
			MsgBox(0,"","대상 복사 실패",3)
			exit
		endif
	Else
        MsgBox(0,"Error",$title & "-엑셀 인식 실패 ",3)
        exit
	EndIf
	Return True
EndFunc