본문 바로가기
programming language/Autohotkey

Autohotkey 로 Powerpoint 파일 열기

by 남성 2017. 2. 1.

아래 포스팅에서 작성한 바와 같이 Autohotkey 를 사용하면 COM 을 사용한 작업들을 할 수가 있습니다.

http://iamaman.tistory.com/461

COM 을 사용한 대표적인 작업으로는 Internet explorer 를 비롯하여 Microsoft Office 등을 자동활 할 수 있는데요~

오늘은 Microsoft Office powerpoint 파일을 안 보이게 여는 방법에 대해 조금 소개해 보려 합니다.

보통 엑셀 등에서는 Application object 의 visible 필드의 값을 false 로 하면 파일이 열려 있지만 보이지는 않게 설정 할 수 있습니다.

그런데 powerpoint 에서는 약간 다르더군요.

아래와 같이 file open 시에 4번째 옵션에 false 로 주면 화면에는 보여주지 않고 powerpoint 파일을 열 수 있습니다.

powerpointFile=C:\abc.pptx
pptApp := ComObjCreate("PowerPoint.Application") ; create PowerPoint object 
Xl_Workbook := pptApp.Presentations.Open(powerpointFile,,,false) ; Visible False


Xl_Workbook.Close
pptApp.Quit() 



댓글5

  • 김민혁 2018.12.06 09:29

    안녕하세요 좋은 자료 감사히 잘 보고 있습니다

    혹시 인터넷에 첨부된 엑셀파일을 저장하지 않고 열기를 선택하여 활성화된 엑셀파일을 Comobj 명령어로 바로 접근할수 없겠습니까?


    답글

    • 남성 2018.12.06 19:07 신고

      현재 엑셀 파일이 열려 있고 해당 엑셀 파일의 COM object 에 접근하기 위해서는 ComObjActive 를 사용하면 됩니다.

      exCOM := ComObjActive("Excel.application")
      exCOM.visible := False


      아래 포스팅도 참고 하시길~

      http://iamaman.tistory.com/1996

  • 김민혁 2018.12.07 10:53

    답변 주셔서 대단히 감사합니다. 제가 당면한 상황 하나를 더 설명을 못했네요
    저장하지 않은(첨부파일 여러개를 저장하지 않고 열기를 선택한)
    1개 이상의 엑셀파일을 별도로 통제하고 싶습니다


    1. 제가 관리하는 엑셀파일 하나가 실행되어 있는 상태이고
    ( xl:= comobjcreate("Excel.Application")
    xl.open(path) 를 사용하고 있습니다)

    2. 그 상황에서 인터넷에서 엑셀 첨부파일을 열어서(저장하지 않고)
    첨부파일의 데이터를 1번의 엑셀파일에 붙여놓고 싶습니다

    3.문제점
    1) 첨부파일의 엑셀파일을 활성화된 상태에서
    xl2:= comojbactive("Excel.application").ActiveWindow
    xl2.range("A1").copy
    위의 스크립트를 실행하면 range가 알수없는 이름이라고 에러가 뜨고요

    2)
    xl2:= comojbactive("Excel.application")
    xl2.range("A1").copy

    이렇게 실행하면 첨부파일이 아닌 기존1번의 엑셀파일의 A1을 복사합니다..





    인터넷에 찾아봤는데 좋은 예시가 있었으나 이것도 에러가 납니다
    고수님 제발 부탁드립니다 해법을 알려주십시오


    It's recommended to use oExcel := Excel_Get() instead of oExcel := ComObjActive("Excel.Application") to access the Excel object for a few reasons - when you use oExcel := ComObjActive("Excel.Application");
    • if there is more than 1 running Excel process, it will get the first registered on the ROT (Running Object Table).
    • if the Excel process hasn't been registered on the ROT (if it was just opened), you will get a Com Error.
    • you will get an error if the worksheet is being edited

    #IfWinActive, ahk_class XLMAIN

    F1::

    oExcel := Excel_Get(), oSheet := oExcel.ActiveWorkbook.ActiveSheet

    oSheet.Columns("A").ColumnWidth := 4, oSheet.Columns("B").ColumnWidth := 16

    oSheet.Columns("C").ColumnWidth := 10, oSheet.Columns("D").ColumnWidth := 10

    oSheet.Columns("E").ColumnWidth := 40, oSheet.Columns("F").ColumnWidth := 60

    oSheet.Cells.Select



    oSheet.Sort.SortFields.Clear

    oSheet.Sort.SortFields.Add(oSheet.Range("F:F"),0,1,ComObjMissing(),0)

    oSheet.Sort.SetRange(oSheet.Range("A:M"))

    oSheet.Sort.Header := 1, oSheet.Sort.MatchCase := 0

    oSheet.Sort.Orientation := 1, oSheet.Sort.SortMethod := 1

    oSheet.Sort.Apply

    return

    #IfWinActive


    에러 문구:
    Call to nonexistent function.
    Specifically: Excel_Get(), oSheet := oExcel.ActiveWorkbook.ActiveSheet


    답글

    • 남성 2018.12.07 15:39 신고

      아래와 같이하면 복사가 될 겁니다.

      xl2:= ComObjActive("Excel.application")
      xl2.ActiveSheet.Range("A1").copy

  • 김민혁 2018.12.07 10:56

    참고한 사이트는 해당사이트 입니다
    https://autohotkey.com/board/topic/77840-how-to-pass-com-object-pointer-to-a-script/#entry495039
    답글