解决方案 »

  1.   

    当然通过程序从数据库中提取数据到word中
      

  2.   

    从数据库提取数据我就不说了,提取数据后,用office的开发接口打开一个word文件,然后吧数据写入即可。
    例子代码如下:
    ====================================
    开始的时候先初始化COM组件:
    //初始化COM
    if (CoInitialize(NULL)!=0) 

    AfxMessageBox("初始化COM支持库失败!"); 
    exit(1); 
    }
    然后启动word进程:
    try
    {
    //ASSERT (NULL==m_objWord);
    m_objWord = new _ApplicationWord;

    if (!m_objWord->CreateDispatch("Word.Application", NULL))
    {
    AfxMessageBox("不能创建Word对象!", MB_ICONSTOP);
    delete m_objWord; m_objWord = NULL;
    throw 0;
    return;
    }
    else{
    // AfxMessageBox("成功创建Word对象!");
    m_sOldDefaultPrinter = m_objWord->GetActivePrinter();  // Verify the new
    if(m_sOldDefaultPrinter.Find(m_sNewPrinter)<0)
    {
    m_objWord->SetActivePrinter(m_sNewPrinter);  //设置当前打印机
    }
    }
    }
    catch(COleException *oe)
    {
    oe->ReportError();
    delete oe;
    }
    catch(...)
    {
    }然后打开word文件:
    Documents m_objDocs;
    _Document m_objSingleDoc;
    m_objDocs = m_objWord->GetDocuments();
    m_objWord->SetVisible(false); //设置为隐藏
    _variant_t vSourFileName(sFileName);
    LPDISPATCH hResult;
    hResult = m_objDocs.Open(
    /*[in]*/&vSourFileName,
    /*[in] VARIANT * ConfirmConversions*/&vOptional,
    /*[in] VARIANT * ReadOnly*/&vTrue,
    /*[in] VARIANT * AddToRecentFiles*/&vFalse,
    /*[in] VARIANT * PasswordDocument*/&vOptional,
    /*[in] VARIANT * PasswordTemplate*/&vOptional,
    /*[in] VARIANT * Revert*/&vOptional,
    /*[in] VARIANT * WritePasswordDocument*/&vOptional,
    /*[in] VARIANT * WritePasswordTemplate*/&vOptional,
    /*[in] VARIANT * Format*/&vOptional,//"wdOpenFormatAuto",//
    /*[in] VARIANT * Encoding*/&vOptional,
    /*[in] VARIANT * Visible*/&vOptional
    /*[in] VARIANT * OpenAndRepair*///&vOptional,
    /*[in] VARIANT * DocumentDirection*///&vOptional,
    /*[in] VARIANT * NoEncodingDialog*///&vOptional,
    /*[out,retval]*/ //&m_objSingleDoc 
    );然后操纵m_objWord对象可以做任何需要的动作(如打印);
    最后,注销word进程,并反初始化COM:
    if (m_objWord)
    {
    //恢复原来的默认打印机
    if(m_sOldDefaultPrinter.Find(m_sNewPrinter)<0)
    {
    m_objWord->SetActivePrinter(m_sOldDefaultPrinter);  //设置当前打印机
    }
    try
    {
    COleVariant covTrue((short)TRUE), covFalse((short)FALSE);
    m_objWord->Quit(covFalse,  // SaveChanges.
    covTrue,   // OriginalFormat.
    covFalse   // RouteDocument.
    );
    m_objWord->ReleaseDispatch();
    delete m_objWord;
    m_objWord = NULL;
    }
    catch(COleException *oe)
    {
    oe->ReportError();
    delete oe;
    }
    catch(...)
    {
    }
    //OLE_CATCH();
    }
    CoUninitialize();
      

  3.   

    Office Automation Using Visual C++ Q196776