我想要这样一个例子,对word文档进行查找的例子,例如我用VC做一个这样的程序,打开某个word文档,根据我给的关键字在这个文档中进行查找,如果找到了就提示“查找成功”,没找到就提示“失败”,能做到吗?
如果例子好使,当场给分:)

解决方案 »

  1.   

    恐怕你得用MSOFFICE的SDK了,只有MS才可以完全打开DOC文档。
      

  2.   

    使用VC把OFFICE目录下的MSWORD9.OLB导入到你的项目中,然后再建立APPLICATION对象m_app,调用m_app.CreateInstance("word.appliction")
    如果你想要什么样的操作,在WORD中录制相应的宏,然后再看一下宏的代码,使用VC把宏翻译过来就OK啦!
      

  3.   

    我的信箱是[email protected]
    请将源码发过来,收到就给分:)
    谢谢:)
      

  4.   

    //下面是一段将Word文档转换成Txt文档的例子
    UINT CMSWord2Txt::WordConvert_F2F(SParam_F2F *pSParam, BOOL &bStop)
    {
    UINT nRet = CheckPara(pSParam);//参数合法型检测
    if(nRet)
    return nRet;
    CString strFilename = pSParam->szSrcPathName;
    USES_CONVERSION;
    LPDISPATCH lpDispatch = NULL;
    _Document *pWordDoc = NULL;
    Documents *pWordDocs = NULL; if(IsHaveWord() == FALSE)
    {
    return MS_WORD_NOT_INSTALL;
    }
    try
    {
    lpDispatch = m_cWordApp.GetDocuments();
    if(!lpDispatch)
    {
    return USING_OLE_FAILED;
    }
    pWordDocs = new Documents(lpDispatch);
    //////////////转成OLE的变量
    //文件名
    VARIANT varOpenFileName;
    V_VT(&varOpenFileName) = VT_BSTR;
    V_BSTR(&varOpenFileName) = SysAllocString(A2OLE((LPCTSTR)strFilename));

    VARIANT varConfirmConversions;
    V_VT(&varConfirmConversions) = VT_BOOL;
    V_BOOL(&varConfirmConversions) = FALSE;

    VARIANT varReadOnly;
    V_VT(&varReadOnly) = VT_BOOL;
    V_BOOL(&varReadOnly) = TRUE;

    VARIANT varAddToRecentFiles;
    V_VT(&varAddToRecentFiles) = VT_BOOL;
    V_BOOL(&varAddToRecentFiles) = FALSE;

    VARIANT varFormat;
    V_VT(&varFormat) = VT_I2;
    enum WdOpenFormat openFormat = wdOpenFormatAuto;
    V_I2(&varFormat) = openFormat;
    VARIANT varEmpty;
    V_VT(&varEmpty) = VT_ERROR;
    V_ERROR(&varEmpty) = DISP_E_PARAMNOTFOUND;
    lpDispatch = pWordDocs->Open(&varOpenFileName,
    &varEmpty,
    &varReadOnly,
    &varEmpty,
    &varEmpty,
    &varEmpty,
    &varEmpty,
    &varEmpty,
    &varEmpty,
    &varEmpty);
    //生成文档
    pWordDoc = new _Document(lpDispatch); //另存文件
    VARIANT varSaveFileName;
    CString strSavePath = pSParam->szDestPathName ; 

    V_VT(&varSaveFileName) = VT_BSTR;
    V_BSTR(&varSaveFileName) = SysAllocString(A2OLE((LPCTSTR)strSavePath)); VARIANT varFileFormat;
    enum WdSaveFormat saveFormat;
    saveFormat = wdFormatTextLineBreaks;
    V_VT(&varFileFormat) = VT_I2;
    V_I2(&varFileFormat) = saveFormat; VARIANT varLockComments;
    V_VT(&varLockComments) = VT_BOOL;
    V_BOOL(&varLockComments) = FALSE; VARIANT varReadOnlyRecommended;
    V_VT(&varReadOnlyRecommended) = VT_BOOL;
    V_BOOL(&varReadOnlyRecommended) = FALSE; VARIANT varEmbedTrueTypeFonts;
    V_VT(&varEmbedTrueTypeFonts) = VT_BOOL;
    V_BOOL(&varEmbedTrueTypeFonts) = FALSE; VARIANT varSaveNativePictureFormat;
    V_VT(&varSaveNativePictureFormat) = VT_BOOL;
    V_BOOL(&varSaveNativePictureFormat) = FALSE;
    VARIANT varSaveFormsData;
    V_VT(&varSaveFormsData) = VT_BOOL;
    V_BOOL(&varSaveFormsData) = FALSE;
    VARIANT varSaveAsAOCELetter;
    V_VT(&varSaveAsAOCELetter) = VT_BOOL;
    V_BOOL(&varSaveAsAOCELetter) = FALSE;
    //另存文档.
    pWordDoc->SaveAs(&varSaveFileName,
    &varFileFormat,
    &varLockComments,
    &varEmpty,//&varPassword,
    &varAddToRecentFiles,
    &varEmpty,//&varWritePassword,
    &varReadOnlyRecommended,
    &varEmbedTrueTypeFonts,
    &varSaveNativePictureFormat,
    &varSaveFormsData,
    &varSaveAsAOCELetter
    );
    //关闭
    VARIANT varSaveChanges;
    enum WdSaveOptions saveOptions;
    saveOptions = wdSaveChanges;
    V_VT(&varSaveChanges) = VT_I2;
    V_I2(&varSaveChanges) = saveOptions;

    VARIANT varOriginalFormat;
    enum WdOriginalFormat originalFormat;
    originalFormat = wdOriginalDocumentFormat;
    V_VT(&varOriginalFormat) = VT_I2;
    V_I2(&varOriginalFormat) = originalFormat;

    VARIANT varRouteDocument;
    V_VT(&varRouteDocument) = VT_BOOL;
    V_BOOL(&varRouteDocument) = FALSE;

    delete pWordDocs;
    pWordDocs = NULL;
    delete pWordDoc;
    pWordDoc = NULL; CloseWordApp();
    }
    catch(COleException *pEx)
    {
    TCHAR szErr[1024] = _T("");
    pEx->GetErrorMessage(szErr , 1024);
    pEx->Delete();
    // ::AfxMessageBox(szErr);
    if(pWordDocs) 
    delete pWordDocs;
    if(pWordDoc) 
    delete pWordDoc;
    pWordDocs = NULL;
    pWordDoc = NULL;
    CloseWordApp();
    return USING_OLE_FAILED;
    }
    catch(COleDispatchException * pEx)
    {
    pEx->Delete();
    if(pWordDocs) 
    delete pWordDocs;
    if(pWordDoc) 
    delete pWordDoc;
    pWordDocs = NULL;
    pWordDoc = NULL;
    CloseWordApp();
    return USING_OLE_FAILED;
    } return WORD_SUCCESSED;
    }
      

  5.   

    我的word里面有图片,再说,转成txt再进行查找这个方法似乎不太好:)
    不过谢谢你的代码:)
      

  6.   


    #include "stdafx.h"
    const CLSID CLSID_ApplicationPtr = 
    {0x000209FF,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
    const IID IID_IApplicationPtr = 
    {0x00020970,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
    VOID WriteMsgToLogFile(PCHAR pbMessage);#import "d:\Program Files\Microsoft Office\Office\MSO9.DLL"
    #import "d:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
    #import "d:\Program Files\Microsoft Office\Office\MSWORD9.OLB" \
    rename("ExitWindows","_ExitWindows")
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
      // TODO: Place code here.
    HRESULT              hr;
    CString FileName,LoadFile,SaveFile,SaveFileName,Temp1;
    CHAR      FilePath[255];
    VARIANT     Temp;
    COleVariant  TEMP2;
    CTime NowTime;
    hr=CoInitialize(NULL);
    VARIANT_BOOL m_ok,m_ok1;
    long i,j,m,n; Word::_ApplicationPtr MyOffice("Word.Application.9");
    ::GetCurrentDirectory(255,FilePath); 
    FileName.Format("%s",FilePath); 
    LoadFile=FileName+"\\1.doc";
    TEMP2=(COleVariant)LoadFile;
    Temp=TEMP2.Detach(); 
    if (MyOffice) {
    hr=MyOffice->Documents->Open(&Temp); 
    if(FAILED(hr))
    {
    ::AfxMessageBox("文件打开显示错误");
    MyOffice->Quit();
    }
    Temp1="星期";
    TEMP2.Clear(); 
    TEMP2=(COleVariant)Temp1;
    Temp=TEMP2.Detach(); 
    i=MyOffice->GetSelection()->GetStart();
    j=MyOffice->GetSelection()->GetEnd();
    MyOffice->GetSelection()->PutStart(0);
    MyOffice->GetSelection()->PutEnd(100000);
    i=MyOffice->GetSelection()->GetStart();
    j=MyOffice->GetSelection()->GetEnd();
    m_ok=MyOffice->ActiveWindow->GetSelection()->GetFind()->Execute(&Temp);
    if(m_ok==0)
    {
    ::AfxMessageBox("查找文件失败");
    }
    else
    {
    ::AfxMessageBox("查找文件成功");
    } MyOffice->Quit();
    }
    return 0;
    }
      

  7.   


    #include "stdafx.h"
    const CLSID CLSID_ApplicationPtr = 
    {0x000209FF,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
    const IID IID_IApplicationPtr = 
    {0x00020970,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
    VOID WriteMsgToLogFile(PCHAR pbMessage);#import "d:\Program Files\Microsoft Office\Office\MSO9.DLL"
    #import "d:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
    #import "d:\Program Files\Microsoft Office\Office\MSWORD9.OLB" \
    rename("ExitWindows","_ExitWindows")
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
      // TODO: Place code here.
    HRESULT              hr;
    CString FileName,LoadFile,SaveFile,SaveFileName,Temp1;
    CHAR      FilePath[255];
    VARIANT     Temp;
    COleVariant  TEMP2;
    CTime NowTime;
    hr=CoInitialize(NULL);
    VARIANT_BOOL m_ok,m_ok1;
    long i,j,m,n; Word::_ApplicationPtr MyOffice("Word.Application.9");
    ::GetCurrentDirectory(255,FilePath); 
    FileName.Format("%s",FilePath); 
    LoadFile=FileName+"\\1.doc";
    TEMP2=(COleVariant)LoadFile;
    Temp=TEMP2.Detach(); 
    if (MyOffice) {
    hr=MyOffice->Documents->Open(&Temp); 
    if(FAILED(hr))
    {
    ::AfxMessageBox("文件打开显示错误");
    MyOffice->Quit();
    }
    Temp1="星期";
    TEMP2.Clear(); 
    TEMP2=(COleVariant)Temp1;
    Temp=TEMP2.Detach(); 
    i=MyOffice->GetSelection()->GetStart();
    j=MyOffice->GetSelection()->GetEnd();
    MyOffice->GetSelection()->PutStart(0);
    MyOffice->GetSelection()->PutEnd(100000);
    i=MyOffice->GetSelection()->GetStart();
    j=MyOffice->GetSelection()->GetEnd();
    m_ok=MyOffice->ActiveWindow->GetSelection()->GetFind()->Execute(&Temp);
    if(m_ok==0)
    {
    ::AfxMessageBox("查找文件失败");
    }
    else
    {
    ::AfxMessageBox("查找文件成功");
    } MyOffice->Quit();
    }
    return 0;
    }