同感,与WORD交互我用的也是VB,用VC好象没那么方便

解决方案 »

  1.   

    VC中应该也差不多啊,Word和Excel应该都是一样的。我倒是对Excel做过一些操作。
      

  2.   

    你可否操作WORD模板中的具体对象,例如模板中的 Label,图文框等呢?我有例子WORD模板,如需要可以EMAIL给你,试一下吧,这非常有价值!
      

  3.   

    Word应该和Excel一样的,具体对象也一样啊,通过一个接口查询到相关接口,然后操作。
      

  4.   

    你可以将上面的VB例子,用VC++实现吗?
      

  5.   

    awaker000(觉悟者) :把模板发给我,让我试一下!
    [email protected]
      

  6.   

    图文框在哪里加的?我在Word里找不到!
      

  7.   

    用VC的MFC类包装的方法:
    首先在ClassWizard的"Add Class..."里选"From a type library...",在Office安装目录和系统System32/System目录下选MsoWordX.olb和Fm20.dll,加入MFC封装的_Application、 Documents、Selection、_Document、Frames、Frame、InlineShapes、InlineShape、OLEFormat OleObj、ILabelControl的对象。
    添加如下代码:(CMyClass是个对话框,OnButtonWord()是对话框上一个按钮的响应函数)
    BOOL CMyClass::RunWordApp()
    {
    HKEY hKey;
    if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_CLASSES_ROOT,
    _T("CLSID\\{000209FF-0000-0000-C000-000000000046}"),
    0,
    KEY_QUERY_VALUE,
    &hKey))
    {
    AfxMessageBox(_T("Open Word RegKey failed!"));
    return FALSE;
    }
    char lpData[255];
    WORD cbData=255;
    if(ERROR_SUCCESS!=RegQueryValue(hKey, _T("LocalServer32"), lpData, (PLONG)&cbData))
    {
    AfxMessageBox(_T("Query Word RegKey failed!"));
    ::RegCloseKey(hKey);
    return FALSE;
    }
    if(31>=WinExec(lpData,SW_SHOWNORMAL))
    return FALSE;
    return TRUE;
    }
    void CMyClass::OnButtonWord() 
    {
    _Application WordApp;
    Documents WordDocuments;
    Selection WordSelection;
    _Document WordActDoc;
    Frames WordFrames;
    Frame Frame1,Frame2;
    InlineShapes FrameInlineShapes;
    InlineShape InlineShapeLab;
    ILabelControl Lab;
    OLEFormat OleObj;
    // TODO: Add your control notification handler code here
    ::CoInitialize(NULL);    // Translate server ProgID into a CLSID. ClsidFromProgID
        // gets this information from the registry.
        CLSID clsid;
        CLSIDFromProgID(L"Word.Application", &clsid);      // Get an interface to the running instance, if any..
        IUnknown *pUnk;
        HRESULT hr;
    hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
    if(FAILED(hr))
    {
    if(!RunWordApp())
    {
    AfxMessageBox(_T("Can't run Word Application!"));
    return;
    }
    else
    hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
    }
        // Get IDispatch interface for Automation...
        IDispatch *pDisp;
        hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
    if(FAILED(hr))
    {
    AfxMessageBox("找不到这个接口!");
    return;
    }    // Release the no-longer-needed IUnknown...
        pUnk->Release();    // ----------------------------------------------------
        // Add automation code here-
        // ----------------------------------------------------
    HWND hWnd=::FindWindow(_T("OpusApp"),NULL);
    ::SetForegroundWindow(hWnd);
    WordApp.AttachDispatch(pDisp);
    WordApp.SetVisible(TRUE);
    WordDocuments.AttachDispatch(WordApp.GetDocuments());
    char pPathBuffer[255];
    if(0==GetCurrentDirectory(255,pPathBuffer))
    {
    AfxMessageBox(_T("Can't find current directory!"));
    return;
    }
    WordApp.ChangeFileOpenDirectory(pPathBuffer);
    CString cs;
    cs=pPathBuffer;
    strcat(pPathBuffer,_T("\\Doc7.dot"));
    VARIANT vtParam2,
    vtParam3,
    vtParam4,
    vtParam5,
    vtParam6,
    vtParam7,
    vtParam8,
    vtParam9,
    vtParam10;
    VariantInit(&vtParam2);
    VariantInit(&vtParam3);
    VariantInit(&vtParam4);
    VariantInit(&vtParam5);
    VariantInit(&vtParam6);
    VariantInit(&vtParam7);
    VariantInit(&vtParam8);
    VariantInit(&vtParam9);
    VariantInit(&vtParam10); COleVariant vtParam1(pPathBuffer);
    vtParam2.vt=VT_BOOL; vtParam2.boolVal = FALSE;
    vtParam3.vt=VT_BOOL; vtParam3.boolVal = FALSE;
    vtParam4.vt=VT_BOOL; vtParam4.boolVal = FALSE;
    vtParam5.vt=VT_BSTR; vtParam5.bstrVal = OLESTR("");
    vtParam6.vt=VT_BSTR; vtParam6.bstrVal = OLESTR("");
    vtParam7.vt=VT_BOOL; vtParam7.boolVal = FALSE;
    vtParam8.vt=VT_BSTR; vtParam8.bstrVal = OLESTR("");
    vtParam9.vt=VT_BSTR; vtParam9.bstrVal = OLESTR("");
    vtParam10.vt=VT_I2; vtParam10.iVal   = 0; WordActDoc.AttachDispatch(WordDocuments.Open(&vtParam1,&vtParam2,
    &vtParam3,&vtParam4,
    &vtParam5,&vtParam6,
    &vtParam7,&vtParam8,
    &vtParam9,&vtParam10)); FrameInlineShapes.AttachDispatch(WordActDoc.GetInlineShapes()); InlineShapeLab.AttachDispatch(FrameInlineShapes.Item(1));
    OleObj.AttachDispatch(InlineShapeLab.GetOLEFormat());
    Lab.AttachDispatch(OleObj.GetObject());
    Lab.SetCaption("姓名:Bottol");
    Lab.DetachDispatch();
    OleObj.DetachDispatch();
    InlineShapeLab.DetachDispatch(); InlineShapeLab.AttachDispatch(FrameInlineShapes.Item(2));
    OleObj.AttachDispatch(InlineShapeLab.GetOLEFormat());
    Lab.AttachDispatch(OleObj.GetObject());
    Lab.SetCaption("年龄:26");
    Lab.DetachDispatch();
    OleObj.DetachDispatch();
    InlineShapeLab.DetachDispatch(); InlineShapeLab.AttachDispatch(FrameInlineShapes.Item(3));
    OleObj.AttachDispatch(InlineShapeLab.GetOLEFormat());
    Lab.AttachDispatch(OleObj.GetObject());
    Lab.SetCaption("科别:手术内科");
    Lab.DetachDispatch();
    OleObj.DetachDispatch();
    InlineShapeLab.DetachDispatch(); WordFrames.AttachDispatch(WordActDoc.GetFrames());
    Frame1.AttachDispatch(WordFrames.Item(1));
    Frame1.Select();
    WordSelection.AttachDispatch(WordApp.GetSelection());
    COleVariant vFalse((short)FALSE);
    COleVariant vTrue((short)TRUE);
    VARIANT vRange;
    vRange.vt=VT_DISPATCH;
    vRange.pdispVal=Frame1.GetRange();
    FrameInlineShapes.AttachDispatch(WordSelection.GetInlineShapes());
    cs+=_T("\\1.bmp");
    FrameInlineShapes.AddPicture(cs.GetBuffer(cs.GetLength()),vTrue,vFalse,&vRange);

    FrameInlineShapes.DetachDispatch();
    WordSelection.DetachDispatch();
    Frame1.DetachDispatch(); Frame2.AttachDispatch(WordFrames.Item(2));
    Frame2.Select();
    WordSelection.AttachDispatch(WordApp.GetSelection());
    vRange.pdispVal=Frame2.GetRange();
    FrameInlineShapes.AttachDispatch(WordSelection.GetInlineShapes());
    cs=cs.GetBufferSetLength(cs.GetLength()-3);
    cs+=_T("jpg");
    FrameInlineShapes.AddPicture(cs.GetBuffer(cs.GetLength()),vTrue,vFalse,&vRange);

    FrameInlineShapes.DetachDispatch();
    WordSelection.DetachDispatch();
    Frame2.DetachDispatch(); WordSelection.DetachDispatch();
    WordFrames.DetachDispatch();
    WordDocuments.DetachDispatch();
    WordActDoc.DetachDispatch();
    WordApp.DetachDispatch(); VariantClear(&vtParam2);
    VariantClear(&vtParam3);
    VariantClear(&vtParam4);
    VariantClear(&vtParam5);
    VariantClear(&vtParam6);
    VariantClear(&vtParam7);
    VariantClear(&vtParam8);
    VariantClear(&vtParam9);
    VariantClear(&vtParam10);
    ::CoUninitialize();
    }