none
在Excel里实现屏幕取词,能获取Excel里的选择文本 RRS feed

  • 常规讨论

  •  

    我在实现屏幕取词功能的时候,需要获取选择文本,不管是记事本,网页,Word,PPT,都可以从外部实现选择文本,唯独Excel不行,没办法,只能获取到单元格里的全部文本,当单元格处于编辑状态时,通过COM接口就无法访问这个单元格了,请问各位大侠有没有其他高明的办法?最新的“谷歌金山词霸合作版”就能实现这个功能,不晓得它是如何实现的。下边给出我在Word中获得选择文本的代码,Excel中的也是如此。

    #include "msword9.h"
    CString CGetSelString::FindWordSelTxt()
    {
     CString szResult("");
     CLSID clsid;
     HRESULT hr;
     hr=::CLSIDFromProgID(L"Word.Application",&clsid); //通过ProgID取得CLSID
     if(FAILED(hr))
     {
      // AfxMessageBox(_T("不会吧,竟然没有安装OFFICE"));
      return szResult;
     }

     IUnknown *pUnknown=NULL;
     IDispatch *pDispatch=NULL;
     Word_Application app=NULL;
     Word_Selection sel=NULL;

     hr=::GetActiveObject(clsid,NULL,&pUnknown); //查找是否有WORD程序在运行
     if(FAILED(hr))
     {
      // AfxMessageBox(_T("没有正在运行中的WORD应用程序"));
      return szResult;
     }

     try
     {
      hr=pUnknown->QueryInterface(IID_IDispatch,(LPVOID *)&app);
      if(FAILED(hr)) throw(_T("没有取得IDispatchPtr"));
      pUnknown->Release();
      pUnknown = NULL;

      sel = app.GetSelection();
      if(!sel)
       throw(_T("没有正在编辑的文档"));

      szResult = sel.GetText();  //取得文本
      szResult.TrimRight();
      szResult.TrimLeft();
     }
     catch(...)
     {
      return szResult;
      //AfxMessageBox(lpErr);
     }
     if(pUnknown) pUnknown->Release();
     if(sel) sel.ReleaseDispatch();
     if(app) app.ReleaseDispatch();
     return szResult;
    }

    2008年10月8日 3:57

全部回复