Office 자동화 사용하여 Visual C++

기술 자료 번역 기술 자료 번역
기술 자료: 196776 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Visual C++에서 Microsoft Office 자동화 관련된 일반적인 질문과 대답을 제공합니다.

추가 정보

목차

  1. 자동화 무엇입니까?
  2. 자세한 내용을 보려면 적절한 리소스를 찾을 수 자동화를 위해 새 있어요?
  3. 자동화를 사용하여 여러 가지 방법이 있습니까?
  4. COM 무엇입니까?
  5. 어떻게 Office 응용 프로그램의 실행 중인 인스턴스에 연결할 작업을?
  6. 어떻게 선택적 매개 변수를 전달하지?
  7. 어떻게 Office 응용 프로그램에 의해 노출되는 이벤트를 catch 수행할?
  8. 자동화 코드를 너무 느립니다. 어떻게 필자는 작업을 속도가 있습니다?
  9. -2147352573 또는 0x80030002, 마찬가지로 이러한 방대한 오류 값의 무엇을 의미합니까?
  10. 형식 라이브러리를 무엇입니까?
  11. Microsoft Excel 95 있지만 실패하면 Microsoft Excel 97 자동화 코드를 협력하여. 이유는?
  12. 왜 프로그램이 끝난 후 자동화 발생하는 응용 프로그램 메모리 남아 있지?
  13. Microsoft Office 응용 프로그램 사용자가 하려면 원하는 알고 있지만 이 자동화를 사용하여 프로그래밍 방식으로 방법?
  14. 포함된 Microsoft Office 응용 프로그램을 자동화할 수 있습니다?
  15. Microsoft Office 문서 내 문서 속성 어떻게 액세스합니까?

질문과 대답

  1. 자동화 무엇입니까?

    자동화 (이전의 OLE 자동화) 기존 프로그램 기능을 활용할 수 있으며 응용 프로그램에 직접 통합할 수 있도록 하는 기술입니다. 예를 들어, Microsoft Word에서 맞춤법 및 문법 검사 이면 사용자에게 표시되지 않고 응용 프로그램에 기능을 이용할 수 있습니다. 모든 Microsoft Excel 차트 작성, 인쇄 및 데이터 분석 도구를 사용하여 수도 있습니다. 이 기술을 크게 단순화할 수 있으며 위로 개발 속도를 높일 수 있습니다.
  2. 자세한 내용을 보려면 적절한 리소스를 찾을 수 자동화를 위해 새 있어요? David 는 Kruglinski "안쪽 Visual C++의" 장에서는 24 (ISBN:1 - 57231 - 565 - 2) 좋은 예로는 뿐만 아니라 일반 개요를 제공합니다. 또한 Microsoft 기술 자료에서 정보를 좋은 원본입니다. 이 문서에서는 좋은 시작 및 Microsoft 기술 자료의 다음 문서를 보다 구체적인 참조를 찾을 수 있습니다.
    152023연구 OLE 자동화 리소스 찾기
    학습 예제에서 원하는 경우 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    179706Excel 및 만들기/서식 새 통합 문서 자동화 MFC HOWTO 사용
  3. 자동화를 사용하여 여러 가지 방법이 있습니까?

    자동화를 사용하여 세 가지 기본적인 방법으로: MFC, # import를 및 C/C++:

    • MFC로 Visual C++ 클래스 "래퍼 클래스를" Microsoft Office 형식 라이브러리를 생성할 수 있습니다. 이러한 클래스는 물론 다른 MFC 클래스, COleVariant, COleSafeArray, COleException, 자동화 작업을 단순화합니다. 이 메서드는 다른 통해 일반적으로 좋습니다 및 MFC 대부분 Microsoft 기술 자료 예제 사용합니다.
    • Visual C++ 5.0 출시될 새 지시문이 # import VC ++ "스마트 포인터" 지정된 형식 라이브러리에서 만드는 경우. 이를 사용하여 Microsoft Office 응용 프로그램을 사용할 때 일반적으로 발생하는 참조-수를 세는 문제가 매우 강력한 있지만 종종 권장하지 때문입니다.
    • C/C++ 자동화 많은 으로 더 어렵지만 MFC 사용하여 오버헤드를 또는 # import 문제가 발생하지 않도록 필요한 경우도. 기본적으로, CoCreateInstance() 와 같은 API 작업할 및 IDispatch 및 IUnknown과 같은 COM 인터페이스.
    참고 일부 약간의 차이점을 해결하려면 C++ 클래스를 COM 설계되었기 때문에 일반 C로 비해 C++에서 자동화를 위해 중요합니다. 자세한 내용은 C 예를 들어 Microsoft 기술 자료에 있는 다음 문서를 참조하십시오.
    181473HOWTO: C 응용 프로그램에서 OLE 자동화를 사용하십시오.
  4. COM 무엇입니까?

    COM (구성 요소 개체 모델) 자동화 기반으로 합니다. COM은 인터페이스를 기반으로 코드가 독립적인된 개체로 구분하여 디자인된 표준 소프트웨어 아키텍처입니다. 이것을 응용 프로그램을 구분하려면 확장으로 개체 지향 프로그래밍 (OOP) 패러다임을 있지만 해당 생각하십시오. 각 개체 인터페이스 집합을 노출하고 초기화, 알림 및 데이터 전송을 같은 개체의 모든 통신을 이러한 인터페이스를 통해 수행됩니다.

    또한 COM 있습니다 운영 체제에 설치된 동적 연결 라이브러리 (DLL) 에 의해 제공되는 서비스 집합입니다. 자동화 이러한 서비스 중 상당수의 사용합니다. 예를 들어, 서버 응용 프로그램의 인터페이스 멤버 함수 호출을 클라이언트 응용 프로그램 패키지 및 해당 서버 응용 프로그램에 인수를 전달하는 "Marshalling" 서비스입니다. 사용하면 클라이언트가 자체 프로세스 공간에서 실행 중인 .exe 때 어떤 경우에 해당하지 클라이언트의 메모리 공간에 있는 서버의 인터페이스를 노출하는 표시되도록 있습니다. 마샬링 또한 반환 값을 서버의 메서드를 다시 프로세스 경계를 넘어 안전하게 클라이언트 호출이 손에 데이터를 가져옵니다. 다양한 COM 라이브러리에 의해 제공되는 자동화 필수적인 많은 다른 서비스가 가지가 있습니다. 이러한 정보를 원본 "안쪽 Ole-Second Edition의" Kraig Brockschmidt, ISBN 1-55615-843-2, "내부 COM에서" Dale Rogerson - ISBN 1-57231-349-8, 포함 및 "자동화 프로그래머 참조" ISBN 1-57231-584-9.
  5. 어떻게 Office 응용 프로그램의 실행 중인 인스턴스에 연결할 작업을?

    API GetActiveObject()를 사용하십시오. 자동화 서버 자신을 RegisterActiveObject() API를 통해 ROT (실행 개체 테이블) 에 등록합니다. 자동화 클라이언트가 때 코드 실행 중인 인스턴스와 같은 얻을 수 있습니다:
          // Translate server ProgID into a CLSID. ClsidFromProgID
          // gets this information from the registry.
          CLSID clsid;
          CLSIDFromProgID(L"Excel.Application", &clsid);  
    
          // Get an interface to the running instance, if any..
          IUnknown *pUnk;
          HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
    
          ASSERT(!FAILED(hr));
    
          // Get IDispatch interface for Automation...
          IDispatch *pDisp;
          hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
          ASSERT(!FAILED(hr));
    
          // Release the no-longer-needed IUnknown...
          pUnk->Release();
    
    						
    참고: 여러 개의 인스턴스가 있는 경우에는 첨부할 Office 응용 프로그램을 실행하고, 경우에만 GetActiveObject() API를 사용하여 실행된 첫 번째 인스턴스에 연결할 수 있습니다.

    이론적으로 각 개별 인스턴스의 ROT 반복할 수 있지만 자체에 대한 모니커를 항상 (이를 그래도 구분할 수 없습니다) 때문에 다른 인스턴스가 이미 ROT에 경우 Office 응용 프로그램을 등록할 마십시오. 즉, 첫 번째 제외한 모든 인스턴스에 연결할 수 없습니다. 그러나 Office 응용 프로그램에서 해당 문서를 ROT에 등록할 수도 있으므로 성공적으로, Application 개체의 데이터를 가져오고 연결하는 특정 문서를 찾는 ROT 반복 다른 인스턴스에 연결할 수 있습니다. 요소가 일부 코드 ROT 반복 및 문서 이름을 찾고 다음 Microsoft 기술 자료 문서:
    190985HOWTO: 시작 OCX IDispatch Excel 또는 Word 문서 가져오기
    단일 인스턴스 응용 프로그램이므로 이 PowerPoint에 대한 작업을 수행할 필요가 없습니다; 실행하기 인스턴스를 하나만 사용할 수 있습니다.
  6. 어떻게 선택적 매개 변수를 전달하지?

    일부 메서드는 "선택적 매개 변수만 사용할 수 있습니다. Visual Basic에서 사용자가 casually 해당 메서드를 호출할 때 생략할 수 있습니다. 그러나 Visual C++에서 호출할 때 VT_ERROR, .vt 필드가 있습니다 특수 VARIANT 전달할 필요가 없으며 DISP_E_PARAMNOTFOUND .scode 필드입니다. 즉:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    실제로 수행하는 Visual Basic 입니다 필기의.
  7. 어떻게 Office 응용 프로그램에 의해 노출되는 이벤트를 catch 수행할?

    기본적으로 ("싱크가"), catch 하는 이벤트 인터페이스 구현 및 응용 프로그램 ("원본") 로 advise 연결을 설치. 다음 문서에서는 Microsoft Word 단계별 예제를 제공합니다.
    183599HOWTO: VC ++ 를 사용하여 Microsoft Word97 응용 프로그램 이벤트 Catch
    일반적으로 advise 연결을 설정하려면 서버의 IConnectionPointContainer 가져오고 이벤트 인터페이스의 IID FindConnectionPoint() 호출합니다. 이 IConnectionPoint 인터페이스를 사용하면 및 남은 것은 Advise() 이벤트 인터페이스의 인스턴스 사용하여 호출할 수 있습니다. 이 이벤트가 발생할 때 서버가 다음 이 인터페이스를 통해 콜백합니다.
  8. 자동화 코드를 너무 느립니다. 어떻게 필자는 작업을 속도가 있습니다?

    자동화 사용하여 속도가 문제의 일반적인 원인은 반복적인 읽기 및 쓰기 데이터의 것입니다. Excel 자동화를 위해 일반적으로 이것이 클라이언트가. 그러나 대부분의 사람들이 이 데이터는 일반적으로 작성된 또는 수 한 번에 모든 SAFEARRAY 사용하여 읽을 것을 인식하지 않습니다. 정보 제공용 예제 및 자세한 내용은 다음 Microsoft 기술 자료 문서를 참조하십시오.
    186120HOWTO: MFC 사용하여 Excel 자동화 및 배열 범위 채우기
    186122HOWTO: MFC를 Excel을 자동화하는 & 배열 Range 개체를 얻을 수 있습니다.
    179706HOWTO: MFC 사용하여 Excel 자동화 및 새 통합 문서 만들기 서식
    또한, 클립보드를 사용하여 때때로 성능을 향상시킬 수 있다는 점을 데 중요합니다. 예를 들어, 데이터를 클립보드에 복사한 다음 붙여 서버에 알리려면 자동화를 사용할 수 있습니다. 또는 복사-수-클립보드, 서버에 알려 및 응용 프로그램에 붙여넣을 반대의;.
  9. 이러한 방대한 오류 값,-2147352573 또는 0x80030002 같은 무엇을 의미합니까?

    이러한 값은 HRESULT를 것으로 알려진 및 winerror.h에서 정의됩니다. 첫 번째 비트 오류 결과 있는지 여부를 나타내는 때문에 너무 커서 숫자입니다. Visual C++로 의미 있는 설명을 이러한 번호를 번역할 함께 제공되는 ErrLook.Exe 유틸리티를 사용할 수 있습니다.

    프로그래밍 방식으로 오류에 대한 설명의 얻을 경우 FormatMessage() API를 사용할 수 있습니다. FormatMessage() 사용에 대한 자세한 내용과 예제는 다음 Microsoft 기술 자료 문서를 참조하십시오.
    186063VB/VBA 자동화 오류 정보: 번역
    122957예제: Decode32 및 Decode16 OLE 오류 코드 디코더 도구
    참고: Visual C++ 6.0 사용하고 있고 디버그 조사식 창에서 이 값을 포함하는 변수 있을 경우 추가 "를 hr" (따옴표 없이) 자동으로 번역할 Visual C++ 가지도록 하는!
  10. 형식 라이브러리를 무엇입니까?

    형식 라이브러리를 C/C++ 헤더 파일을 비슷합니다. 인터페이스, 메서드 및 서버 게시 속성을 포함합니다. OLE/COM 개체 Visual C++에서 제공되는 뷰어 (Oleview.exe) 형식 라이브러리를 볼 수 있습니다. Microsoft Office 95, 97 및 2000 형식 라이브러리 파일 이름 목록을 같습니다:
    
           Office Application      | Type library
           ------------------------+----------------
           Word 95 and prior       | wb70en32.tlb
           Excel 95 and prior      | xl5en32.olb
           Powerpoint 95 and prior | Powerpoint.tlb
           Access 95 and prior     | msaccess.tlb
           Binder 95               | binder.tlb
           Schedule+               | sp7en32.olb
           Project                 | pj4en32.olb
           Team Manager            | mstmgr1.olb
           Word 97                 | msword8.olb
           Excel 97                | excel8.olb
           Powerpoint 97           | msppt8.olb
           Access 97               | msacc8.olb
           Binder 97               | msbdr8.olb
           Graph 97                | graph8.olb
           Outlook 97              | msoutl8.olb
           Outlook 98              | msoutl85.olb
           Word 2000               | msword9.olb
           Excel 2000              | excel9.olb
           Powerpoint 2000         | msppt9.olb
           Access 2000             | msacc9.olb
           Outlook 2000            | msoutl9.olb
           Word 2002               | msword.olb
           Excel 2002              | excel.exe
           Powerpoint 2002         | msppt.olb
           Access 2002             | msacc.olb
           Outlook 2002            | msoutl.olb 
    
    
    						
  1. Excel 95 있지만 Excel 97 실패하면 자동화 코드를 협력하여. 무슨 일이 일어나고 사용자의?

    Excel 개체 모델을 95 97 버전에서 중요한 변경 내용이. Excel 95 단일 IDispatch 구현에서 모든 메서드와 속성을 구현했습니다. 이는 종종 개체의 X, Y 개체에서 의미하는 메서드를 호출할 수 있음을 의미합니다. 좋은 디자인 않았습니다, Office 97 각 개체가 자체 가지고 있으므로 Idispatch 별도의 구현. 즉, 메서드 또는 개체의 X Y 별도의 개체에서 속성을 요청한 경우 오류 0x80020003,-2147352573, "구성원 찾을 수 없습니다." 가져오기 이 오류를 방지하려면 에서 호출하는 기본 IDispatch 인터페이스를 정확한 의미가 있는지 확인해야 합니다. 자세한 내용은 다음 Microsoft 기술 자료 문서를 참조하십시오.
    172108HOWTO: 문제 해결 "찾을 구성원", 0x80020003 오류
  2. 자동화 발생하는 응용 프로그램이 끝난 후 메모리에서 유지됩니다. 무슨 일이 일어나고 사용자의?

    대부분 이렇게 획득한 인터페이스를 릴리스 잊어버린 추적할 할 때문입니다. 여기서 몇 가지 일반적인 제안 및 사항 찾습니다.

    • # import 사용 중인 경우 가능성이 매우 높은 연관된 참조 횟수를 버그 중 하나로 실행해야 수 있습니다. 종종 시간을 버그를 해결하려면, 수 수 작동했지만 일반적으로 이를 다른 자동화 방법 중 하나를 사용하려면 기본 설정입니다. 형식 라이브러리 및 사용 매우 복잡하므로 # import Office 응용 프로그램에서 매우 잘 작동하지 않습니다. 또한 이러한 참조 수를 세는 # import 사용 시 필기의 인터페이스 수준 COM 호출 많이 있기 때문에 추적하기가 어려운 문제입니다.
    • 확인하고 있는 IDispatch 반환하는 모든 메서드, 열기, 또는 새로 만들기를 호출하는 경우 * (LPDISPATCH) 및 반환 값을 무시합니다. 경우, 다음 사용자가 이 반환된 인터페이스 포기하는 및 더 이상 필요하지 않으면 해제할 수 있도록 코드를 변경해야 합니다.
    • 점차 주석으로 아래로 시작되는 문제를 추적하는 데 문제가 사라진 후 추가할 때까지 코드 섹션을 신중하게 백업합니다.
    • 일부 응용 프로그램은 사용자가 "응용 프로그램을 다루었습니다 있을 경우" 실행 머무르는 유의하십시오. 자동화할 때 이 문제가 발생하면 다음 응용 프로그램이 아마도 나중에 다시 실행 상태를 유지합니다. Office 응용 프로그램 사용자가 읽고가 이 동작을 변경하려면 쓸 수 있는 응용 프로그램 개체를 "UserControl" 속성이 있습니다.
    • 또한, 일부 응용 프로그램은 충분한 사용자 인터페이스 "작업" 발생한 경우 실행 중인 상태로 결정합니다. 응용 프로그램을 종료하는 채우지 Quit() 메서드는 Application 개체의 호출하십시오. Quit 호출될 때 Word 종료 해당 참조 횟수 관계없이 됩니다. 예상되는 COM 동작은 아닙니다. 그러나 Excel, 수는 제대로 방금 자체를 숨길 있지만 실행하는 모든 미해결 인터페이스가 해제될 때까지 유지됩니다. 일반적으로 해결되지 않은 모든 참조를 해제해야 하며 응용 프로그램이 종료될 경우 Quit()만 호출해야 합니다.
  3. Office 응용 프로그램 사용자가 하려면 원하는 알고 있지만 이 프로그래밍 방식으로 통해 자동화 방법?

    관심이 있는 내용 개체, 메서드 및 속성을 사용해야 할 것입니다. Word, Excel 및 Powerpoint 어떤 사용자로, 원하는 를 기반으로 개체 모델을 탐색하는 방법을 배울 수 있는 가장 좋은 방법은 매크로 레코더를 사용하는 것입니다. 방금 Macro\ ' 새 매크로 기록 ' 도구 메뉴에서 선택하고, 관심이 다음 Macro\ ' 기록 중지 ' 선택합니다 작업 실행 끝난 후에는 기록, Macro\Macros 도구 메뉴에서 선택한, 기록한 매크로를 선택한 다음 편집을 클릭합니다. 생성된 기록한 작업을 수행하는 VBA 코드를 걸립니다. 염두에 기록된 매크로 가장 가능한 코드에서 대부분의 경우, 있지만 그 않습니다 빠른 예를 잘 수 없습니다.
  4. 포함된 Office 응용 프로그램을 자동화할 수 있습니다?

    반드시. 방법은 IDispatch 포인터를 가져오는: 있는 Visual C++ 기술 참고 39 있는 (TN039)이 부여됩니다. 단계별 예를 들어 다음 Microsoft 기술 자료 문서를 참조하십시오.
    184663HOWTO: 포함 및 Microsoft Excel 워크시트 MFC 프로그램 자동화
  5. 내 문서 속성 Office 문서의 어떻게 액세스합니까?

    문서 속성을 자동화 기능을 통해 또는 직접 IPropertyStorage 통해 액세스할 수 있습니다. Microsoft 기술 자료의 다음 문서를 각 메서드를 보여 줍니다.
    179494HOWTO: 자동화를 사용하여 기본 제공 문서 속성 검색
    186898HOWTO: 직접 사용하여 VC ++ 복합 문서 속성 읽기

속성

기술 자료: 196776 - 마지막 검토: 2008년 3월 13일 목요일 - 수정: 7.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Project 2000 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Outlook 97 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Outlook 2000
  • Microsoft Word 2000 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
키워드:?
kbmt kbsweptvs2008 kbautomation kbfaq KB196776 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com