查了很多资料,发现都是vb的,改成c++,根本就获取不了页数,有没有vc获得word的页数的例子?

解决方案 »

  1.   

    网上不是有吗
    VC 如何得到打开word文件总页数               _Application  WordApp; //代表WORD程序  
                  Documents  docs; //代表一个WORD程序里的所有文档  
                  _Document  doc; //代表一个文档  
        
                if(!WordApp.CreateDispatch("Word.Application",NULL))//创建一个新的word程序  
    {  
                  AfxMessageBox("创建ms_word服务失败,请确认是否安装WORD程序");  
                  exit(1);  
    }  
                //让用户能够查看自动化的过程  
                WordApp.SetVisible(true);  
                //让docs和word程序连接,docs代表word中所有文档  
                docs=WordApp.GetDocuments();  
                COleVariant  covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);  
                //用docs来打开一个文档,并将句柄返回给doc  
                doc=docs.Add(COleVariant(strOpenFileName),covOptional,covOptional,covOptional);  详见:
    http://topic.csdn.net/t/20031025/12/2393763.html
    http://topic.csdn.net/t/20031025/12/2393763.html
      

  2.   

    上面写的都不是啊,只是打开word而已, 有没有人真正实现过?
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=832  
        
      Range          rng;  
      Selection  sSel;  
      #define  wdFieldPage 33  
      #define  wdFieldNumPages 26  
      COleVariant  vwdFieldPage(long(wdFieldPage)),vwdFieldNumPages(long(wdFieldNumPages));  
        
      Cell  cel;  
      Window  wActive;  
      View  vActive;  
      HeaderFooter  head;  
      Fields  fds;  
      fds  =  sSel.GetFields();  
      rng  =  sSel.GetRange();  
      fds.Add(rng,vwdFieldNumPages,vOne,vOne);  
        
      fds  =  sSel.GetFields();  
      rng  =  sSel.GetRange();  
      fds.Add(rng,vwdFieldPage,vOne,vOne);  
        
      wActive  =  sApp.GetActiveWindow();  
      vActive  =  wActive.GetView(); 
      

  4.   

    int GetWordPageCount(LPCOLESTR lpszFileName)
    {
    CLSID clsid;
    LCID lcid = GetThreadLocale();
    IDispatch *dispApp, *dispDocuments, *dispDocument, *dispWindow, *dispPane, *dispPages;
    LPOLESTR dispName;
    DISPID dispID = 0, dispidNamed = 0;
    DISPPARAMS dispParams = { 0 };
    VARIANT vResult = { 0 }, vValue = { 0 };
    CLSIDFromProgID(L"Word.Application", &clsid);
    CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&dispApp); //App.Visible = TRUE
    dispName = L"Visible";
    dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    dispidNamed = DISPID_PROPERTYPUT;
    vValue.vt = VT_BOOL;
    vValue.boolVal = TRUE;
    dispParams.cArgs = 1;
    dispParams.rgvarg = &vValue;
    dispParams.cNamedArgs = 1;
    dispParams.rgdispidNamedArgs = &dispidNamed;
    dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYPUT, &dispParams, &vResult, NULL, NULL); //Documents = App.Documents
    dispName = L"Documents";
    dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    dispParams.cArgs = 0;
    dispParams.rgvarg = NULL;
    dispParams.cNamedArgs = 0;
    dispParams.rgdispidNamedArgs = NULL;
    dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
    dispDocuments = vResult.pdispVal;
    dispApp->Release(); //Document = Documnets.Open(lpszFileName);
    dispName = L"Open";
    dispDocuments->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    vValue.vt = VT_BSTR;
    vValue.bstrVal = SysAllocString(lpszFileName);
    dispParams.cArgs = 1;
    dispParams.rgvarg = &vValue;
    dispParams.cNamedArgs = 0;
    dispParams.rgdispidNamedArgs = NULL;
    dispDocuments->Invoke(dispID, IID_NULL, lcid, DISPATCH_METHOD, &dispParams, &vResult, NULL, NULL);
    SysFreeString(vValue.bstrVal);
    dispDocument = vResult.pdispVal;
    dispDocuments->Release(); //Window = Documnet.ActiveWindow
    dispName = L"ActiveWindow";
    dispDocument->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    dispParams.cArgs = 0;
    dispParams.rgvarg = NULL;
    dispParams.cNamedArgs = 0;
    dispParams.rgdispidNamedArgs = NULL;
    dispDocument->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
    dispWindow = vResult.pdispVal;
    dispDocument->Release(); //Pane = Window.ActivePane
    dispName = L"ActivePane";
    dispWindow->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    dispParams.cArgs = 0;
    dispParams.rgvarg = NULL;
    dispParams.cNamedArgs = 0;
    dispParams.rgdispidNamedArgs = NULL;
    dispWindow->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
    dispPane = vResult.pdispVal;
    dispWindow->Release();

    //Pages = Pane.Pages
    dispName = L"Pages";
    dispPane->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    dispParams.cArgs = 0;
    dispParams.rgvarg = NULL;
    dispParams.cNamedArgs = 0;
    dispParams.rgdispidNamedArgs = NULL;
    dispPane->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
    dispPages = vResult.pdispVal;
    dispPane->Release();

    //return Pages.Count
    dispName = L"Count";
    dispPages->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
    dispParams.cArgs = 0;
    dispParams.rgvarg = NULL;
    dispParams.cNamedArgs = 0;
    dispParams.rgdispidNamedArgs = NULL;
    dispPages->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
    dispPages->Release();
    return vResult.intVal;
    }