www.pudn.com > testWordAll.rar > WordDocOperateBasic.cpp


// WordDocOperateBasic.cpp: implementation of the CWordDocOperateBasic class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "WordDocOperateBasic.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CWordDocOperateBasic::CWordDocOperateBasic() 
{ 
 
	//基本参数初始化 
	m_wordStruct.PreviewOrPrint = 1;	//默认为直接打印1,0为预览 
 
	m_wordStruct.PrintNum = 1;			//打印份数:1 
 
	m_wordStruct.PrintPageSize = "A4";	//打印纸张大小:A4 
 
	m_wordStruct.WordVer = "Word2000";	//Word默认版本:Word2000 
 
	m_wordStruct.m_WordModelName = ""; 
 
	m_wordStruct.m_tempWordDoc = ""; 
 
} 
 
CWordDocOperateBasic::~CWordDocOperateBasic() 
{ 
 
} 
 
//入口函数 
BOOL CWordDocOperateBasic::WordDocOperate(){ 
 
	BOOL res = FALSE; 
 
	return res; 
} 
 
//word Ver 
CString CWordDocOperateBasic::GetWordVer() 
{ 
	CString myWordVer = m_wordStruct.WordVer; 
 
	myWordVer.Format("%s",myWordVer); 
 
	return myWordVer; 
} 
 
//关闭已打开的word app 
BOOL CWordDocOperateBasic::CloseWord(){ 
 
	BOOL res = FALSE; 
 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
 
	try{ 
 
		m_Docs.ReleaseDispatch();//断开关联; 
		m_Sel.ReleaseDispatch(); 
 
		//退出WORD 
		m_App.Quit(covOptional, covOptional, covOptional);  
		m_App.Quit(covOptional, covOptional, covOptional); 
		m_App.ReleaseDispatch(); 
 
		res = TRUE; 
 
	} 
	catch(CException e) 
	{ 
		CString error; 
 
		error.Format("关闭word App 错误信息:%s",e.GetErrorMessage); 
		 
		return FALSE; 
	} 
 
	return res; 
 
} 
 
//打开Word 
BOOL CWordDocOperateBasic::OpenWord(){ 
 
	BOOL res = FALSE; 
 
	if(m_wordStruct.m_WordModelName == ""){ 
		return FALSE; 
	} 
 
	//模版 
	CString strDocModelName = m_wordStruct.m_WordModelName; 
 
	//临时文件 
	CString strDocTempName = m_wordStruct.m_tempWordDoc; 
	//::DeleteFile(strDocTempName);		//先不删除原有的临时word文件,有可能用户要 
 
	res = CopyFile(strDocModelName,strDocTempName,TRUE); 
	if (res = false){ 
		return FALSE; 
	} 
 
	CString strDocName = ""; 
	strDocName = strDocTempName; 
 
	COleVariant varFilePath(strDocName); 
 
	COleVariant varstrNull(""); 
	COleVariant varZero((short)0); 
	COleVariant varTrue(short(1),VT_BOOL); 
	COleVariant varFalse(short(0),VT_BOOL); 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
 
	try{ 
 
		m_Docs.ReleaseDispatch(); 
		m_Sel.ReleaseDispatch(); 
		m_App.m_bAutoRelease=true; 
		if(!m_App.CreateDispatch("Word.Application")) 
		{  
			return FALSE; 
		} 
 
		//是否word可见 
		int nPP = m_wordStruct.PreviewOrPrint; 
		if (nPP == 0){ 
			m_App.SetVisible(TRUE);			//显示Word,如果0,TRUE:预览方式 
		}else{ 
			m_App.SetVisible(FALSE);		//隐藏Word,如果1,FALSE:直接打印方式 
		} 
 
		//打开 
		m_Docs.AttachDispatch(m_App.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来; 
		 
		CString m_WordVer = "Word2003"; 
 
		if (m_WordVer == "Word2003"){ 
			//office2000 
			m_Docs.Open(varFilePath,varFalse,varFalse,varFalse, 
						varstrNull,varstrNull,varFalse,varstrNull, 
						varstrNull,varTrue,varTrue,varTrue); 
		 
		}else{ 
			//office2003 
			m_Docs.Open( //可看成VB语句set testDoc =  Word.documents.Open(…) 
									varFilePath, 
									varFalse,    // Confirm Conversion. 
									varFalse,    // ReadOnly. 
									varFalse,    // AddToRecentFiles. 
									covOptional, // PasswordDocument. 
									covOptional, // PasswordTemplate. 
									varTrue,    // Revert. 
									covOptional, // WritePasswordDocument. 
									covOptional, // WritePasswordTemplate. 
									covOptional, // Format. // Last argument for Word 97 
									   covOptional, // Encoding // New for Word 2000/2002 
									   varTrue,     // Visible 
									   covOptional, // OpenConflictDocument 
									   covOptional, // OpenAndRepair 
									   varZero,     // DocumentDirection wdDocumentDirection LeftToRight 
									   covOptional  // NoEncodingDialog 
									   ); 
 
		} 
 
		//得到当前激活的文档 
		m_Doc = m_App.GetActiveDocument();  
 
		res = TRUE; 
 
	} 
	catch(CException e) 
	{ 
		CString error; 
 
		error.Format("打开word App 错误信息:%s",e.GetErrorMessage); 
		 
		return FALSE; 
	} 
 
	return res; 
 
} 
 
//打印当前文档 
BOOL CWordDocOperateBasic::PrintDocument() 
{ 
	BOOL res = FALSE; 
	 
	try{ 
 
		//打印 
		CString strPrinterName = m_App.GetActivePrinter(); 
		LPCTSTR lpszActivePrinter(strPrinterName); 
		m_App.SetActivePrinter(lpszActivePrinter); //设置当前打印机 
		COleVariant covTrue((short)TRUE), covFalse((short)FALSE),  
		covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //定义打印属性 
		m_Doc.PrintOut(covFalse,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		COleVariant((long)1),  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional,  
		covOptional);  
 
	} 
	catch(CException e) 
	{ 
		CString error; 
 
		error.Format("关闭word App 错误信息:%s",e.GetErrorMessage); 
		 
		return FALSE; 
	} 
 
	return res; 
} 
 
//保存word文件为strWordTempName 
BOOL CWordDocOperateBasic::SaveWordDoc(CString strWordTempName){ 
	 
	BOOL res = FALSE; 
	 
	try{ 
	 
		//save doc 
		CString m_strWordVer = GetWordVer(); 
		m_strWordVer.MakeUpper(); 
 
		COleVariant varstrNull(""); 
		COleVariant varZero((short)0); 
		COleVariant varTrue(short(1),VT_BOOL); 
		COleVariant varFalse(short(0),VT_BOOL); 
		COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
 
		//// 
		if (m_strWordVer == "WORD2000"){ 
 
			//word 2000 
			m_Doc.SaveAs(COleVariant(strWordTempName),  
			varZero,  
			varFalse, varstrNull, varTrue, varstrNull,  
			varFalse, varFalse, varFalse, varFalse, varFalse); 
			 
		} 
 
		//// 
		if (m_strWordVer == "WORD2003"){ 
		 
			//word 2003 
			m_Doc.SaveAs(COleVariant(strWordTempName),  
			varZero,  
			varFalse, varstrNull, varTrue, varstrNull,  
			varFalse, varFalse, varFalse, varFalse, varFalse, 
			varFalse,varFalse,varFalse,varTrue,varTrue); 
		 
		} 
 
	} 
	catch(CException e) 
	{ 
		CString error; 
 
		error.Format("关闭word App 错误信息:%s",e.GetErrorMessage); 
		 
		return FALSE; 
	} 
 
	return res; 
}