자동화를 사용하여 기본 제공 문서 속성 검색 방법

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

179494
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
요약
이 문서에서는 설치된 Microsoft Visual C++ 버전 5.0 및 6.0 (MFC) 라이브러리의 버전 4.2 찾기 및 Microsoft Word 문서의 기본 제공 문서 속성 인쇄 방법에 대해 설명합니다. 기본 제공 문서 속성을 문서 제목, 제목, 작성자, 키워드, 메모, 템플릿, 날짜, 페이지 수, 단어, 문자 및 다른 많은 속성이 포함합니다.
추가 정보
이 문서에서는 코드를 MFC .cpp 파일에 정의되어 있는 이벤트의 메시지 처리기 함수에 복사할 수 있습니다. 그러나 코드 목적은 IDispatch 인터페이스와 MSWord 형식 라이브러리에서 정의된 멤버 함수를 사용하는 프로세스를 설명하기 위한 것입니다. 읽고 코드 예제에서는 이해 예를 들어, 수정하거나 처음부터 찾기 및 기본 제공 문서 속성 목록을 인쇄하는 자동화 코드를 작성할 수 있도록 기본 이점을 얻습니다.

해당 프로젝트를 만드는 단계

  1. Microsoft Word에서 Test.doc를, 명명된 새 문서를 만들고 드라이브의 루트 디렉터리에 저장하십시오
  2. IDispatch 인터페이스와 구성원 함수를 MSWord8.olb 형식 라이브러리에서 정의된 사용하는 예제 프로젝트를 만들려면 다음 Microsoft 기술 자료 문서 12까지의 1 다음과 같이 하십시오.
    178749MFC 및 형식 라이브러리를 사용하여 자동화 프로젝트를 만드는 방법
  3. 해당 AutoProjectDlg.cpp 맨 위에 다음 줄을 추가합니다:
          #include "MSWord8.h" // msword9.h for Word 2000, msword.h for Word 2002					
  4. CAutoProjectDlg::OnRun() AutoProjectDlg.cpp 파일에 다음 코드를 추가하십시오.

    예제 코드

          _Application objWordApp;      _Document objDoc;      LPDISPATCH lpDisp;      Range objRange;      // Common OLE variants that are easy to use for calling arguments.      COleVariant covTrue((short)TRUE),                  covFalse((short)FALSE),                  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      objWordApp.CreateDispatch("Word.Application");      objWordApp.SetVisible(TRUE);      Documents docs(objWordApp.GetDocuments());      lpDisp = docs.Open(COleVariant("C:\\Test.doc",VT_BSTR),                                          covFalse,    // Confirm.                                                       // Conversion.                                          covFalse,    // ReadOnly.                                          covFalse,    // AddToRecentFiles.                                          covOptional, // NULL,                                                       // PasswordDocument.                                          covOptional, // PasswordTemplate.                                          covFalse,    // Revert.                                          covOptional, // Write-                                                       // PasswordDocument.                                          covOptional, // Write-                                                       // PasswordTemplate.                                          covOptional  // Format. //Last parameter for Word 97                                             covOptional, // Encoding // Word 2000/2002 from here on                                             covTrue,     // Visible                                             covOptional, // OpenConflictDocument                                             covOptional, // OpenAndRepair                                             (long)0,     // DocumentDirection                                                           //wdDocumentDirection LeftToRight                                             covOptional  // NoEncodingDialog                                          );       objDoc.AttachDispatch(lpDisp);       lpDisp = objDoc.GetContent();       objRange.AttachDispatch(lpDisp);       // Move the insertion point to the beginning of the document.       objRange.Collapse(COleVariant((long)1));  //0 = wdCollapseEnd.       objRange.InsertAfter("Here are the BuiltInDocumentProperties!!");       objRange.InsertParagraphAfter(); // Write them one-by-one in a loop.       lpDisp = objDoc.GetBuiltInDocumentProperties();       COleDispatchDriver rootDisp[64];  // Temporary object array.       int curRootIndex = 0;             // Index into rootDisp[] array.       DISPID dispID;                    // Temporary dispid for use in                                         // OleDispatchDriver::                                         // InvokeHelper().       DISPID dispID2;                   // Dispid for 'Value'.       unsigned short *ucPtr;            // Temporary name holder for                                         // IDispatch::GetIDsOfNames().       VARIANT vtResult;                 // Holds results from                                         // OleDispatchDriver::                                         // InvokeHelper().       VARIANT vtResult2;                // Holds result for 'Type'.       BYTE *parmStr;                    // Holds parameter descriptions                                         // for COleDispatchDriver::                                         // InvokeHelper().       rootDisp[0].AttachDispatch(lpDisp);  // LPDISPATCH returned from                                         // GetBuiltInDocumentProperties.       VARIANT i;                        // integer;       VARIANT count;                    // integer;       char buf[512];                    // General purpose message buffer.       char buf2[512];       ucPtr = L"Count";                 // Collections have a Count                                         // member.       try       {        rootDisp[curRootIndex].m_lpDispatch->GetIDsOfNames(                                                IID_NULL,                                                &ucPtr,                                                1,                                                LOCALE_USER_DEFAULT,                                                &dispID);        rootDisp[curRootIndex].InvokeHelper(dispID,                                           DISPATCH_METHOD |                                           DISPATCH_PROPERTYGET,                                           VT_VARIANT,                                           (void *)&vtResult,                                           NULL);        count = vtResult;  // Require a separate variable for loop limiter.        // For i = 1 to count,        // get the Item, Name & Value members of the collection.        i.vt = VT_I4;        for(i.lVal=1; i.lVal<=count.lVal; i.lVal++)        {         ucPtr = L"Item";  // Collection has an Item member.         rootDisp[curRootIndex].m_lpDispatch->GetIDsOfNames(                                                IID_NULL,                                                &ucPtr,                                                1,                                                LOCALE_USER_DEFAULT,                                                &dispID);         parmStr = (BYTE *)( VTS_VARIANT );         rootDisp[curRootIndex].InvokeHelper(dispID,                                            DISPATCH_METHOD |                                            DISPATCH_PROPERTYGET,                                            VT_VARIANT,                                            (void *)&vtResult,                                            parmStr,                                            &COleVariant(i));         // Move to the next element of the array.         // Get the Name member for the Item.         rootDisp[++curRootIndex].AttachDispatch(vtResult.pdispVal);         ucPtr = L"Name";  // Collection has a Name member         rootDisp[curRootIndex].m_lpDispatch->GetIDsOfNames(                                                IID_NULL,                                                &ucPtr,                                                1,                                                LOCALE_USER_DEFAULT,                                                &dispID);         rootDisp[curRootIndex].InvokeHelper(dispID,                                            DISPATCH_METHOD |                                            DISPATCH_PROPERTYGET,                                            VT_VARIANT,                                            (void *)&vtResult,                                            NULL);          ucPtr = L"Value";  // Collection has a Value member.          rootDisp[curRootIndex].m_lpDispatch->GetIDsOfNames(                                            IID_NULL,                                            &ucPtr,                                            1,                                            LOCALE_USER_DEFAULT,                                            &dispID2);          rootDisp[curRootIndex].InvokeHelper(dispID2,                                            DISPATCH_METHOD |                                            DISPATCH_PROPERTYGET,                                            VT_VARIANT,                                            (void *)&vtResult2,                                            NULL);       Continue: // Come back here from Catch(COleDispatchException).         rootDisp[curRootIndex--].ReleaseDispatch();         // Initialize buf2 with representation of the value.         switch(vtResult2.vt) // Type of property.         {          case VT_BSTR:            sprintf(buf2, "%s", (CString)vtResult2.bstrVal);            break;          case VT_DATE:          {            COleDateTime codt(vtResult2.date);            sprintf(buf2, "Time = %d:%02d, Date = %d/%d/%d",              codt.GetHour(), codt.GetMinute(),              codt.GetMonth(), codt.GetDay(), codt.GetYear()               );          }            break;          case VT_I4:            sprintf(buf2, "%ld", vtResult2.lVal);            break;          default:            sprintf(buf2, "not VT_BSTR, VT_DATE, or VT_I4");         }  // End of Switch.         sprintf(buf, "Item(%d).Name = %s, .Type = %d, .Value = %s\n",                i.lVal, CString(vtResult.bstrVal), vtResult2.vt, buf2);         objRange.Collapse(COleVariant((long)0));  // Move insertion point                                                   // to end of the range.         objRange.InsertAfter(CString(buf));  // Insert after the insertion                                              // point.        }  ////////////////// End of For loop. ///////////////////////         objRange.InsertParagraphAfter(); // Spacing.        objRange.InsertAfter("");        objRange.InsertParagraphAfter(); // Spacing.        // Release IDispatch pointers on local objects.        if(vtResult.vt == VT_DISPATCH) vtResult.pdispVal->Release();        if(count.vt == VT_DISPATCH) count.pdispVal->Release();        rootDisp[0].ReleaseDispatch();        AfxMessageBox("All done, waiting...");        objDoc.SetSaved(TRUE);  // Hides the "Save your changes..." dialog.        AfxMessageBox("Word will close now. Goodbye");        objWordApp.Quit(covFalse, covFalse, covFalse);       }  // End try.       catch(COleException *e)       {        sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);        ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);       }       catch(COleDispatchException *e)       {         if(vtResult2.vt ==VT_ERROR)         {           AfxMessageBox("Discarding vtResult2.VT_ERROR");         }         vtResult2.vt = VT_BSTR;         vtResult2.bstrVal = L"Value not available";         goto Continue;       }       catch(...)       {        MessageBox( "General Exception caught.", "Catch-All",        MB_SETFOREGROUND | MB_OK);       }       //////////////////// For information only. /////////////////////        //          Do not uncomment the following code snippet.          //        //  You can copy it and use it in lieu of the previous code when  //        //             you need to see just one property.                 //        /***************** Code to get a single property. *****************       // Works for one property.       COleDispatchDriver myDocumentProperties(lpDisp);       COleVariant result;       // Get myDocumentProperties.Item(1).       // Item(n) where n = property index       // value in properties collection.       UCHAR *parmStr = (BYTE *)( VTS_VARIANT );       myDocumentProperties.InvokeHelper(0, DISPATCH_METHOD |                                         DISPATCH_PROPERTYGET,                                         VT_VARIANT,                                         (void *)&result,                                         parmStr,                                         &COleVariant((long)1));       COleDispatchDriver myDocumentProperty(result.pdispVal);       // Get Name of this document property.       myDocumentProperty.InvokeHelper(3, DISPATCH_METHOD |                                          DISPATCH_PROPERTYGET,                                          VT_VARIANT,                                          (void *)&result,                                          NULL);       AfxMessageBox(CString("Item(1).Name =") + CString(result.bstrVal));       // Release this document property.       myDocumentProperty.ReleaseDispatch();       // Release the document properties collection.       myDocumentProperties.ReleaseDispatch();       //*************** End of code for single property. ****************/ 					
  5. 문서에 Test.doc 올바른 경로를 나타내려면 CAutoProjectDlg::OnRun() 코드를 수정해야 할 수 있습니다. 다음 줄에서 문서를 참조하는:
          lpDisp = docs.Open(COleVariant("C:\\Test.doc",VT_BSTR),					
참조
Office 자동화 응용 프로그램에 대한 자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
222101찾기 및 Office 개체 모델 설명서를 사용하는 방법
단어 8.0 word8 word97 OLE

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 179494 - 마지막 검토: 12/05/2015 08:18:06 - 수정: 3.3

Microsoft Foundation Class Library 4.2, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition

  • kbnosurvey kbarchive kbmt kbautomation kbfaq kbfaq kbhowto kbinterop KB179494 KbMtko
피드백
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)