반응형
추천 인디게임 : 오름달
추천 인디게임 : 떼굴떼굴 집으로
업무 자동화를 위해 오토핫키를 공부하며 어려웠던 점들을 기억하며
아래에 정리했습니다.
저 역시도 한 번 썼던 코드들을 다시 쓰려니 이리저리 헷갈렸었거든요.
일종의 RPA 일텐데요 (Robotic Process Automation) 아래 내용 활용하시어 업무자동화 이룩하셔요~
좌측이 코드, 우측이 설명이며 검은색 외 글씨를 수정하시면 되겠습니다.
엑셀파일을 열어서 이리저리 수정하고, 저장한 후 메일로 보내고 텔레그램telegram으로 보내는 것 까지 입니다.
엑셀파일 열기
엑셀파일 열기 : 특정 엑셀파일 열기 | |
엑셀명칭 := ComObjCreate("Excel.Application") 경로명 = %A_ScriptDir%\파일명.xlsx 엑셀명칭.Workbooks.Open(경로명) 엑셀명칭.Visible := True 엑셀명칭.DisplayAlerts := False |
엑셀명칭을 설정하고 ahk가 있는 폴더의 파일명.xlsx를 열기. 엑셀명칭에 해당할 파일을 지정. (상기 경로명의 파일) 해당 엑셀파일을 보이게 열지 여부. 안보이게 할거면 False 로 변경 해당 엑셀파일에서 알람/확인창을 뜨지 않게 함. |
엑셀파일 열기 : 열 엑셀파일을 지정하기 | |
엑셀명칭 := ComObjCreate("Excel.Application") FileSelectFile, 경로명 엑셀명칭.Workbooks.Open(경로명) 엑셀명칭.Visible := True 엑셀명칭.DisplayAlerts := False |
엑셀명칭을 설정하고 해당 파일의 위치를 선택할 수 있는 대화창이 뜸 엑셀명칭에 해당할 파일을 지정. (상기 선택된 값) 해당 엑셀파일을 보이게 열지 여부. 안보이게 할거면 False 로 변경 해당 엑셀파일에서 알람/확인창을 뜨지 않게 함. |
참고 : 열 엑셀파일을 지정하는 옵션 | |
FileSelectFile, 경로명, ,C:\열릴폴더\, 설명, *.xlsx | 경로명은 똑같고, 옵션은 빈칸, 열릴폴더 지정가능, 다이얼로그 설명글, 보일파일형태 |
엑셀에서 값복사
시트 중 특정 부분의 수식을 값복사 하기 | |
엑셀명칭.Sheets("시트명").Select 엑셀명칭.ActiveSheet.Range("A:Z").Copy 엑셀명칭.ActiveSheet.Range("A:Z").PasteSpecial(-4163) |
엑셀과 시트를 선택 위에서 선택해 active된 상기 시트의 A~Z까지 카피함 상기 시트의 A~Z까지 값만 붙여 넣음 |
엑셀 모든 시트를 값복사하기 | |
엑셀명칭.Sheets().Select 엑셀명칭.Cells.Select 엑셀명칭.Cells.Copy 엑셀명칭.Cells.PasteSpecial(-4163) 엑셀명칭.Range("A1").Select |
엑셀 내 모든 시트를 선택 위에서 선택해 active된 상기 시트의 모든 셀을 선택함 위에서 선택해 active된 상기 시트의 모든 셀을 복사함 상기 시트에서 값만 붙여 넣음 선택되어 있는 음영을 없애기 위하여 A1셀을 선택 |
특정위치에 붙여넣기 | |
엑셀명칭.Sheets("시트1명").Select 엑셀명칭.Range("A:J").Copy 엑셀명칭.Sheets("시트2명").Select 엑셀명칭.Range("A1").Select 엑셀명칭.ActiveSheet.Paste |
복사할 시트 선택 복사할 범위 선택해서 복사 붙여넣을 시트 선택 붙여넣을 시작셀 선택 붙여넣기 |
일부 범위에만 붙여넣기 | |
엑셀명칭.Sheets("시트명").Select 엑셀명칭.Range("K7:P7").Copy 엑셀명칭.Range("K7:P9000").Select 엑셀명칭.ActiveSheet.Paste |
시트 선택 복사할 위치 선택해서 복사 붙여넣을 범위 선택 붙여넣기 |
엑셀에서 삭제
시트를 삭제하기 | |
엑셀명칭.Application.DisplayAlerts := False 엑셀명칭.Sheets("시트명").Delete() |
해당 엑셀파일에서 알람/확인창을 뜨지 않게 함. (삭제확인) 삭제진행 |
특정 시트만 남기고 삭제하기 | |
For sheet in 엑셀명칭.Worksheets if sheet.Name != "시트명하나" AND sheet.Name != "시트명둘" sheet.delete |
해당 엑셀파일에서 시트명하나와, 시트명둘 이 아닌 건들을 삭제함 |
셀을 삭제하기 | |
엑셀명칭.Sheets("시트명").Select 엑셀명칭.ActiveSheet.Range("A:Z").Delete 엑셀명칭.ActiveSheet.Range("3:3000").Delete |
엑셀 내 특정 시트를 선택 위에서 선택한 해당 시트의 A열~Z열을 삭제함 위에서 선택한 해당 시트의 3행~3000행을 삭제함 |
엑셀에서 정렬
표의 헤더 빼고 정렬하기 | |
엑셀명칭.Sheets("시트명").Select endR := 엑셀명칭.ActiveSheet.UsedRange.Rows.Count 엑셀명칭.Range("A3:AB"endR).Sort(xfile.Columns(1),2) |
엑셀 내 특정 시트를 선택 위에서 선택한 시트의 행 수를 세어 endR 이라는 변수로 지정 시트의 A3~AB끝까지 지정해서 A(=1) 기준 내림차순(=2) 정렬 |
엑셀 저장
특정이름으로 저장 | |
경로변수 = %A_ScriptDir%\aaa.xlsx 엑셀명칭.DisplayAlerts := False 엑셀명칭.ActiveWorkbook.SaveAs(경로변수) |
ahk와 동일폴더에 aaa.xlsx로 파일명 지정 덮어쓰기 알람이 뜨지 않게 처리 상기 경로에 저장함 |
그대로 저장 | |
엑셀명칭.ActiveWorkbook.Save() | 그대로 저장 |
엑셀 정리
모든 시트를 맨 위로 보내게 | |
엑셀명칭.Sheets("제일끝시트명").Select Send, {ctrl down} Loop 30 { Send, {Home} Sleep, 100 Send, {PgUp} Sleep, 100 } Send, {ctrl up} |
제일 오른쪽의 시트를 지정 컨트롤키를 누르고 30번 반복함 제일윗셀로 앞시트로 컨트롤키를 뗌 |
여러 엑셀을 오가기
필요 엑셀을 선택하기 | |
엑셀명칭.Visible := True | 해당 엑셀을 보이게 하기 |
해당 엑셀을 닫기 | |
엑셀명칭.Quit | 해당 엑셀을 닫기 (꺼짐) |
아웃룩으로 메일 보내기
메일 발송하기 | |
obj :=ComObjCreate("Outlook.Application") 메일명 := obj.CreateItem(0) 메일제목 := "ㅇㅇㅇㅇㅇㅇㅇㅇ"제목변수 메일명.Subject := 메일제목 메일명.Body := "ㅇㅇㅇㅇㅇㅇ" 메일명.To := "메일주소; 메일주소" 메일명.Bcc := "메일주소; 메일주소" myAttachments := 메일명.Attachments myAttachments.Add("C:\aa.xlsx") 메일명.Send() objRelease(메일명) objRelease(obj) |
아웃룩 모듈 불러오기 메일명 설정 메일제목에 변수가 들어가는 경우, 별도로 변수정의부터 시작 메일제목 지정 메일 내용 지정. 변수가 안들어가서 별도 변수 지정 없이 진행함 메일 수신인 메일 비밀참조인 첨부파일 있을 경우 첨부파일 경로 입력 메일 발송 명령 아웃룩 메일작성 종료 (메모리 회수라고 함) 아웃룩 모듈 종료 (메모리 회수라고 함) |
엑셀 메일 내용을 html로 작성하기 | |
obj :=ComObjCreate("Outlook.Application") 메일명 := obj.CreateItem(0) 메일명.Subject := “ㅇㅇㅇㅇ” URL변수 := 엑셀명.Sheets("가").Range("A1").value 링크URL = "https://api.com/%URL변수%" 본문변수 = ( <HTML> <br><br> <a href=%링크URL%>클릭</a> <br><br> </HTML> ) 메일명.HTMLBody := 본문변수 메일명.To := "메일주소; 메일주소" 메일명.Bcc := "메일주소; 메일주소" 메일명.Send() objRelease(메일명) objRelease(obj) |
아웃룩 모듈 불러오기 메일명 설정 메일제목에 변수가 없어서 바로 입력 엑셀명의 가시트, A1의 값을 URL변수로 지정함 상기 URL변수를 포함해서 링크 URL을 만듦. 본문내용을 변수로 지정 URL에 변수가 포함되어 직접입력하면 작동하지 않았음 메일 내용을 HTML로 하여 내용을 불러옴 수신인 지정 비밀참조인 지정 메일 발송 명령 아웃룩 메일작성 종료 (메모리 회수라고 함) 아웃룩 모듈 종료 (메모리 회수라고 함) |
텔레그램 보내기 : 더 자세한 내용은 다음글로 - [ 텔레그램 api 로 메시지 채널 자동화 ]
엑셀 메일 내용을 html로 작성하기 | |
텍스트내용 := 엑셀명칭.Sheets("시트명").Range("A1").value 링크URL = "https://api.telegram.org/bot키/sendmessage?chat_id=-채팅방번호&parse_mode=markdown&text=%텍스트내용%" |
텍스트 내용을 특정엑셀 특정시트 특정셀에서 찾기 봇키와 채팅방번호를 넣고 마크다운 모드로 텍스트내용 넣 html 메일로 넣을 때는 변수를 한 번 거쳐야 했습니다. 이유는 저도 모릅니다.. 생존식으로 방법만 찾은거라서요.. 텍스트내용은 유니코드로 작성해야 합니다. |
엑셀 메일 내용을 텔레그램으로 보내기 | |
텍스트내용 := 엑셀명칭.Sheets("시트명").Range("A1").value Run, https://api.telegram.org/bot키/sendmessage?chat_id=-채팅방번호&parse_mode=markdown&text=%텍스트내용% WinWait, api.telegram sleep, 1000 send ^w |
A1셀에 텍스트를 만들어 놓음 브라우저로 해당 주소 접속. 여기서는 변수로 접속하면 오히려 안되더라고요, 역시 이유는 모릅니다.. 브라우저 열릴 때 까지 대기 열리면 1초 후에 해당 창 닫기 (텔레그램 접속한 창) |
마크다운 요령 | |
% = %25 줄바꿈 = %0A * = %2A |
그냥%로 하면 종종 에러남 엑셀상에서 이름지정으로 해놓으면 더 편함. *과 *사이는 굵은글씨임 |
텔레그램 발송에 대한 더 자세한 내용은 - [ 텔레그램 api 로 메시지 채널 자동화 ]
https://link.coupang.com/a/bRBacI
반응형
'Tips' 카테고리의 다른 글
보이에 마르스 라이크북에서 리디북스 설정하기 Boyue mars likebook E-ink E-book Reader (0) | 2020.10.01 |
---|---|
텔레그램 최근 업데이트 이후 접속 불가 (0) | 2020.10.01 |
맥미니 2018 램 업그레이드 (0) | 2020.09.04 |
Pricing unavailable (0) | 2020.08.17 |
Affinity Photo 포토 자동 지우기 (0) | 2020.08.16 |
댓글