본문 바로가기

Autohotkey강좌

Autohotkey#31. Minitab그래프를 엑셀로 옮기기 3탄, gdip를 이용하여 효율적으로 이동

반응형

https://youtu.be/SDqoJZHTeLI

기존에 Minitab에서 엑셀로 그래프를 옮길 때는 minitab에서 그래프를 복사하고 엑셀로 가서 다시 붙여 넣기를 반복했습니다. 일일이 하나씩 작업을 하다 보니, 스마트하다고 할 수는 없었습니다. 그래서 지난 시간에 배운 gdip를 이용해서 좀 효율적으로 한번에 주욱 그래프를 파일로 저장한 후에 엑셀에서는 순차적으로 해당 그래프를 가져 오는 방식을 진행하고자 합니다. 이미 gdip에 대해서 배웠으므로 기억을 되살려 보겠습니다. 먼저 gdip_startup를 하고 여러 조작을 한 후에 마지막에 gdip_shutdown을 불러주면 만사 ok입니다. 그러면 minitab에서는 그래프를 순차적으로 저장해야 합니다. 여러 그래프이므로 해당하는 횟수만큼 loop를 돌면 되고,

n :=18

Loop, %n% {

 

loop안에서는 마지막 그래프를 먼저 복사해서 클립보드에 넣고

SendInput {Ctrl down}c {Ctrl up}
sleep, 200

클립보드의 내용에서 Bitmap을 생성하는 함수를 호출합니다.

pBitmap := Gdip_CreateBitmapFromClipboard()
sleep, 300

생성된 Bitmap을 파일로 저장하기 위해서는 먼저 임시로 번호를 부여한 이름을 만들고, 

name = %A_ScriptDir%\temp%A_index%.jpg

그 이름으로 파일로 저장합니다.

Gdip_SaveBitmapToFile(pBitmap, name)
sleep, 300

이제 마지막 그래프는 닫아도 좋으니 닫습니다.

SendInput {Ctrl down}{f4}{Ctrl up}
sleep, 200

그래프를 저장할건지 묻는 창이 뜨기 때문에 아니라는 의미에서 n을 입력합니다.

SendInput, n
sleep, 100

생성한 Bitmap의 수명이 다했으므로 제거합니다.

Gdip_DisposeImage(pBitmap)

 

이제 앞 그림을 처리하기 위해 index인 n을 하나 감소시킵니다.

Loop가 지정된 횟수만큼 수행이 되면 해당 횟수만큼의 임시그림파일이 생성되어 있을겁니다. temp1.jpg, temp2.jpg, ....

이제는 엑셀을 열어 줍니다.

winactivate, ahk_exe excel.exe
sleep, 300
xl := ComObjActive("Excel.Application")

최초의 그림이 지정될 위치의 행, 열을 지정합니다.

col := 3 
row := 2

전체 그림 갯수만큼 loop카운트를 지정하고 Loop를 호출합니다.

n := 18

Loop , %n% {
불러올 그림 번호는 전체 그림 갯수에서 현재 index를 빼고 1을 더해 주면 구할 수 있습니다.

no := n+1 - A_index

해당 번호에 맞게 파일이름을 설정합니다.

name = %A_ScriptDir%\temp%no%.jpg

저장할 엑셀영역을 지정합니다

xlRng := xl.Range(xl.Cells(row,col), xl.Cells(row,col))

지정된 엑셀 영역에 name이라는 그림파일을 추가합니다.

xlShape := xl.ActiveWorkbook.ActiveSheet.Shapes.AddPicture(name,false,true,xlRng.left, xlRng.Top,-1,-1)
sleep, 500

저장된 그림을 삭제합니다.

FileDelete, %name%

다음 저장위치로 이동하기 위해 column값을 증가시킵니다.

col += 1

위의 과정으로 하면 미니탭의 그래프들을 엑셀로 모두 복사하게 됩니다.

기존의 과정보다는 효율적으로 진행이 됩니다.

스크립트 내용은 아래를 참고하세요.

GraphMinitab2Excel.ahk
0.00MB

반응형