기존에 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
위의 과정으로 하면 미니탭의 그래프들을 엑셀로 모두 복사하게 됩니다.
기존의 과정보다는 효율적으로 진행이 됩니다.
스크립트 내용은 아래를 참고하세요.