//--------------------------------------------------------------------------
// 在VS2005下运行
// 查看是否有已经打开的Word对象
BOOL bIsNewCreate ;
bIsNewCreate = FALSE ;
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);// 缺省对象
CComVariant tpl(lpszFilePath),
NewTemplate(false),
DocType(0),
Visble;
CComVariant SaveChanges(false),
OriginalFormat,
RouteDocument;
CApplication oWordApp ;
CDocuments oDocs ;
CDocument0 oDoc ;
HRESULT hr ;
IUnknown *pUnk ;
IDispatch *pDisp ;
CLSID clsid ;
rVal = RC_SUCCESS ;
bIsNewCreate = FALSE ;
enmFileCodeSet = CResConst::CodeSetUncide ;
//------------------------------------------------------------------------------------
// 查看是否有已经打开的Word对象
hr = CoInitialize( NULL );
//ASSERT( !FAILED(hr) );
if( FAILED(hr) ){
AfxMessageBox( TEXT( "failed to call CoInitialize()" ));
}
CLSIDFromProgID( TEXT( "Word.Application" ), &clsid );
// 查看是否有已经打开的Word对象
hr = GetActiveObject( clsid, NULL, (IUnknown**)&pUnk );
// 若有word在运行,就得到当前运行word的实例
if ( !FAILED(hr) ){
hr = pUnk->QueryInterface( IID_IDispatch, (void **)&pDisp );
ASSERT( !FAILED(hr) );
oWordApp.AttachDispatch( pDisp, TRUE );
pUnk -> Release();
}
// 若无,则新建一个Word对象
else {
if ( !oWordApp.CreateDispatch( TEXT( "Word.Application" ),NULL) ){
AfxMessageBox( TEXT( "创建ms_word对象失败" ) );
//rVal = RC_CANCELED_BY_USER ;
//goto PROC_END ;
}
else {
// 新创建的word实例标志
bIsNewCreate = TRUE;
}
}
//-------------------------------------------------------------------------------
// 创建文档
oDocs.AttachDispatch( oWordApp.get_Documents() );
// 打开一个新文档,将文件的内容添加到新文档中
oDoc.AttachDispatch( oDocs.Add( &tpl , &NewTemplate , &DocType , &Visble ) );
//===================================
// 其他处理word文件的代码
//=====================================
oDoc.Close( covFalse , covOptional , covOptional);// vFalse若为vTrue,则新文档不能关闭
//oWordApp.Quit( vFalse, &OriginalFormat, &RouteDocument ); // 若直接用此方法关闭word,则用户打开的word也被关闭了
// 如果是新创建的word,就关闭
if( TRUE == bIsNewCreate ){
oWordApp.Quit( covFalse, &OriginalFormat, &RouteDocument );
oWordApp.ReleaseDispatch();
}
//-------------------------------------------------------------------------------
// 在VS2005下运行
// 查看是否有已经打开的Word对象
BOOL bIsNewCreate ;
bIsNewCreate = FALSE ;
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);// 缺省对象
CComVariant tpl(lpszFilePath),
NewTemplate(false),
DocType(0),
Visble;
CComVariant SaveChanges(false),
OriginalFormat,
RouteDocument;
CApplication oWordApp ;
CDocuments oDocs ;
CDocument0 oDoc ;
HRESULT hr ;
IUnknown *pUnk ;
IDispatch *pDisp ;
CLSID clsid ;
rVal = RC_SUCCESS ;
bIsNewCreate = FALSE ;
enmFileCodeSet = CResConst::CodeSetUncide ;
//------------------------------------------------------------------------------------
// 查看是否有已经打开的Word对象
hr = CoInitialize( NULL );
//ASSERT( !FAILED(hr) );
if( FAILED(hr) ){
AfxMessageBox( TEXT( "failed to call CoInitialize()" ));
}
CLSIDFromProgID( TEXT( "Word.Application" ), &clsid );
// 查看是否有已经打开的Word对象
hr = GetActiveObject( clsid, NULL, (IUnknown**)&pUnk );
// 若有word在运行,就得到当前运行word的实例
if ( !FAILED(hr) ){
hr = pUnk->QueryInterface( IID_IDispatch, (void **)&pDisp );
ASSERT( !FAILED(hr) );
oWordApp.AttachDispatch( pDisp, TRUE );
pUnk -> Release();
}
// 若无,则新建一个Word对象
else {
if ( !oWordApp.CreateDispatch( TEXT( "Word.Application" ),NULL) ){
AfxMessageBox( TEXT( "创建ms_word对象失败" ) );
//rVal = RC_CANCELED_BY_USER ;
//goto PROC_END ;
}
else {
// 新创建的word实例标志
bIsNewCreate = TRUE;
}
}
//-------------------------------------------------------------------------------
// 创建文档
oDocs.AttachDispatch( oWordApp.get_Documents() );
// 打开一个新文档,将文件的内容添加到新文档中
oDoc.AttachDispatch( oDocs.Add( &tpl , &NewTemplate , &DocType , &Visble ) );
//===================================
// 其他处理word文件的代码
//=====================================
oDoc.Close( covFalse , covOptional , covOptional);// vFalse若为vTrue,则新文档不能关闭
//oWordApp.Quit( vFalse, &OriginalFormat, &RouteDocument ); // 若直接用此方法关闭word,则用户打开的word也被关闭了
// 如果是新创建的word,就关闭
if( TRUE == bIsNewCreate ){
oWordApp.Quit( covFalse, &OriginalFormat, &RouteDocument );
oWordApp.ReleaseDispatch();
}
//-------------------------------------------------------------------------------