아래 포스팅에서 작성한 바와 같이 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() 



  1. 김민혁 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

  2. 김민혁 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

  3. 김민혁 2018.12.07 10:56

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

Microsoft.Office.Interop.Word 를 사용하여 만든 프로그램을 배포시 office 버전이 안 맞아서 에러가 나는 경우가 종종 있다. 

 

이런 경우에는 Microsoft.Office.Interop.Word.dll 파일을 실행 파일과 같이 전달 해 주면 해결이 되곤 한다.

 

나의 경우 위 파일은 아래 주소에 있었다.

 

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll

 

Excel 프로그램을 만드는 경우 Microsoft.Office.Interop.Excel 을 사용하겠고 해당 파일은 아래 주소에 있다.

 

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll

 

dll 파일은 배포한 실행 프로그램과 같은 폴더에 위치 시키거나 path 로 설정된 폴더에 위치 시키면 된다.

아시는 바와 같이 Microsoft Office 제품군에서는 VBA를 활용하여 자동화가 가능 합니다.

 

http://iamaman.tistory.com/592


http://iamaman.tistory.com/1643


 

그런데 Visual Basic뿐만 아니라 다른 언어를 활용해서도 Office 자동화가 가능 합니다. 오늘은 Python 을 이용한 visio 그리기를 해보려 합니다.

 

구글을 좀 뒤져 보니 다음과 같이 좋은 예가 있더군요.



 

저는 현재 Windows 7 64비트를 사용 중인데~ Python 은 32비트를 사용 중입니다. 몇가지 package 들을 사용하기 위해 아래에서도 소개했던 Anaconda 를 사용하는데요~ Anaconda 를 설치하니 win32com 모듈을 그냥 사용 할 수 있더군요.

http://iamaman.tistory.com/1610


http://iamaman.tistory.com/1001


http://iamaman.tistory.com/1648


 

위 코드의 결과 아래와 같은 Visio 다이어그램이 나오게 됩니다.

 

 

좀만 공부해서 응용해 보면 다양한 다이어 그림들을 자동화 할 수 있을 것 같네요.



컴퓨터를 사용하면서 많은 분들이 MS오피스를 사용하실 텐데요~

 

보통 많이 사용하는 MS 오피스도 상용이라 사용하려면 구매를 해야죠~

 

뭐 회사에서 한 두 명이 사는 거면 모르겠지만 회사의 모든 사람들이 오피스 제품을 구매해야 한다면 그 비용은 만만치 않을 거라 생각됩니다.

 

이런 비용문제를 생각한다면 오늘 소개해 드릴 오픈 오피스나 리브레 오피스가 MS office 의 대안이 될 수 있을 것 같네요~

 

저도 MS Office 를 대신하여 회사에서 몇 개월째 오픈 오피스와 리브레 오피스를 사용 중인 데요~~

 

딱히 불편함이 없더군요.

 

제가 뭐 유별난 MS office 기능들을 사용하는 것도 아니고~

 

MS office 로 작성된 파일들도 오픈 오피스나 리브레 오피스에서 편집이 가능해서 협업을 하는데도 그리 큰 문제가 없었습니다.

 

오픈 오피스는 아래 주소에서 다운로드 할 수 있습니다.

 

http://www.openoffice.org/download/index.html

 

아래 그림과 같이 빨간색 네모 칸 부분을 클릭해서 다운로드 받으시면 됩니다.

 

윈도우뿐만 아니라 리눅스, 맥 과 같은 다양한 OS 를 지원합니다.

 

설치야 뭐 다음 다음 이니깐 굳이 설명 안 드립니다.

 

설치를 하고 프로그램을 실행 시켜 보시면~ 아래 그림과 같이 사용 가능한 프로그램들이 나타납니다.

 

텍스트 문서는 MS 워드와 같은 프로그램이고~ 스프레드시트는 MS Excel, 프레젠테이션은 MS 파워포인트, 그림은 MS Visio, 데이터베이스는 Excess 같은 프로그램 입니다.

 

다음으로 리브레 오피스는 아래 주소에서 다운로드 할 수 있습니다.

 

http://www.libreoffice.org/download

 

아래 그림과 같이 Main Installer 와 Help 파일을 다운로드 받아서 설치 하시면 되고~ 오픈 오피스와 마찬가지로 윈도우 리눅스 맥과 같은 다양한 OS 를 지원 합니다.

 

설치야 뭐 다음 다음 이니깐 굳이 설명 안 드립니다.

 

현재 우분투와 같은 리눅스를 설치해보면 리브레 오피스가 기본적으로 깔려 있습니다.

 

설치하고 프로그램을 실행해 보시면~ 다음과 같습니다.

 

딱 봐도 오픈 오피스랑 구성이 똑같죠~

 

둘 중 아무거나 맘에 드는 프로그램 선택해서 사용하시면 됩니다.

 

혹시 아웃룩과 같은 메일 프로그램이 필요하신 분들은 아래 포스팅 참조해서 모질라 썬더버드를 사용해 보시길~


2013/01/19 - [유틸] - 공짜 메일 프로그램 Thunderbird


+ Recent posts