⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsofprint.cpp

📁 用于在线office文档编辑的控件。可以在线新建文档、修改文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	* pbool = 0;
	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{					
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				CComPtr<MSWord::Revisions> spRevs;
				hr = spDoc->get_Revisions(&spRevs);
				if((FAILED(hr))||(!spRevs)){
						return S_OK;
				}
				*pbool = spRevs->GetCount();
				spRevs.Release();
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
			}
			break;
		case FILE_TYPE_PPT:
			{
			}
			break;
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
 			break;
		}
	}catch(...){
		* pbool = 0;	
	}
 	return S_OK;
}
/*
//根据Index返回具体的信息,lIndex为GetRev的结果,lType为参数标示
0;返回名字
1:返回时间
2:返回类型(删除|插入)
3:具体的数据

BSTR GetRevInfo(long lIndex ,long lType) 
*/
STDMETHODIMP CDsoFramerControl::GetRevInfo(long lIndex, long lType, BSTR* pbool)
{
	if(lType<0 || lType > 3)
		return S_OK;
 	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = NULL;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	* pbool = NULL;
	CString strRet;
	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{					
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				CComPtr<MSWord::Revisions> spRevs;
				CComPtr<MSWord::Revision> spRev;
				hr = spDoc->get_Revisions(&spRevs);
				if((FAILED(hr))||(!spRevs)){
						return S_OK;
				}
				long dwCount = spRevs->GetCount();
				int i = lIndex;
				if(i < 1) i =1;
				if(i > dwCount) i = dwCount;
				hr = spRevs->raw_Item(i,&spRev);
				if((FAILED(hr))||(!spRev)){
						return S_OK;
				}
				if(lType == 0){
					spRev->get_Author(pbool);
					 
				}else if(lType == 1){
					double spDate = 0;
					spRev->get_Date(&spDate);
					COleDateTime dwTime(spDate);
					 
 					strRet = dwTime.Format(_T("%Y-%m-%d %H:%M:%S"));
				  
					*pbool = strRet.AllocSysString();
				}else if(lType == 2){
					WdRevisionType dwType;
					spRev->get_Type(&dwType);
					strRet.Format("%d",dwType);
					*pbool = strRet.AllocSysString();
					 
				}else if(lType == 3){
					CComPtr<MSWord::Range> pRange = NULL;
					spRev->get_Range(&pRange);
					if((FAILED(hr))||(!pRange)){
						return S_OK;
					}
					pRange->get_Text(pbool);
				}
				spRevs.Release();
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
			}
			break;
		case FILE_TYPE_PPT:
			{
			}
			break;
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
 			break;
		}
	}catch(...){
		* pbool = NULL;	
	}
 	return S_OK;	
}
/*
设置基本信息:
1.设置文件只读密码
	SetValue("password","::DOCPROP:PassWord");
2.设置文件修改密码
	SetValue("password","::DOCPROP:WritePW");
返回值:
0 正确
-1:不支持此命令,请确定您的第二个参数没有传错
-127:异常
*/
STDMETHODIMP CDsoFramerControl::SetValue(BSTR strValue, BSTR strName, long* pbool)
{
 	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = NULL;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	* pbool = 0;
	char *pValue = NULL;
	char *pName = NULL;
	pValue = BSTR2char(strValue);
	pName = BSTR2char(strName);
 	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{					
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
 				if(0 == strcmp(pName,"::DOCPROP:PassWord")){
					spDoc->put_Password(strValue);
				}else if(0 == strcmp(pName,"::DOCPROP:WritePW")){
					spDoc->put_WritePassword(strValue);
				}else{
					* pbool = -1;
				}
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);	
				if(!spDoc)
					break;
				if(0 == strcmp(pName,"::DOCPROP:PassWord")){
					if(pValue)	
						strcpy(m_cPassWord,pValue);
				}else if(0 == strcmp(pName,"::DOCPROP:WritePW")){
					if(pValue)	
						strcpy(m_cPWWrite,pValue);
 				}else{
					* pbool = -1;
				}			
			}
			break;
		case FILE_TYPE_PPT:
			{
			}
			break;
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
 			break;
		}
	}catch(...){
		* pbool = -127;	
	}
	if(pValue) free(pValue);
	if(pName) free(pName);
 	return S_OK;	
}
/*
strVarName: 变量名
strVlaue:变量值
lOpt: 操作类型,
按位
第一位为1:  表示update域关联的
第二位为1:  表示如果没有这个变量则添加
第三位为1:  
return:
0:OK
-127:异常
*/
STDMETHODIMP CDsoFramerControl::SetDocVariable(BSTR strVarName, BSTR strValue, long lOpt, long* pbool) 
{
 	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = NULL;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	* pbool = 0;
	char *pValue = NULL;
 	pValue = BSTR2char(strValue);
  	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{					
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
 				CComPtr<MSWord::Variables> spVars;
				CComPtr<MSWord::Variable> spVar;
				hr = spDoc->get_Variables(&spVars);
				if(FAILED(hr)||(!spVars))
					return NULL;
				hr = spVars->raw_Item(&_variant_t(strVarName),&spVar);
				if(FAILED(hr)){
					if(lOpt & 0x02){
						hr = spVars->raw_Add(strVarName,COleVariant(pValue), &spVar);
						if(FAILED(hr)||(!spVar)){
							* pbool = -127;
							return S_OK;
						}else if(!(lOpt & 0x01)){
							* pbool = -127;
							return S_OK;
						}
					}
				}else{
					spVar->put_Value(strValue);
				}

				if((lOpt & 0x01) && spVar){
					CComPtr<MSWord::Fields> spFields;
					CComPtr<MSWord::Field> spField;
					hr = spDoc->get_Fields(&spFields);
					if(FAILED(hr)||(!spFields)){
 						return S_OK;
					}	
					long lCount; 
					hr = spFields->get_Count(&lCount);	
					if(FAILED(hr)|| 0 == lCount){
 						return S_OK;
					}
 					for(int i = 1; i<= lCount; i++){
						hr = spFields->raw_Item(i,&spField);
						if(FAILED(hr)||(!spField)){
							spField = NULL;
							continue;
						}
						spField->Update(); 
						spField = NULL;
					}
 					spFields = NULL;
				}
 				spVar = NULL;
 				spVars = NULL; 
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);	
				if(!spDoc)
					break;
 	
			}
			break;
		case FILE_TYPE_PPT:
			{
			}
			break;
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
 			break;
		}
	}catch(...){
		* pbool = -127;	
	}
	if(pValue) free(pValue);
  	return S_OK;
}
/*
lPageNum: 
lType:
0:Word
1:JPG
2:Txt
3:Html
4:


Return:
-2:不支持的文件格式
-3:不支持的保存格式
-127: 异常
*/
STDMETHODIMP CDsoFramerControl::SetPageAs(BSTR strLocalFile, long lPageNum, long lType, long* pbool)
{
	if(lType != 0){
		* pbool = -3;
		return S_OK;
	}
	if(m_nOriginalFileType != FILE_TYPE_WORD){
		* pbool = -2;
		return S_OK;
	}
 	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = NULL;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	* pbool = 0;
	long lPage = lPageNum;
	if(lPage<1)
		lPage = 1;
  	try{			
		CComQIPtr<MSWord::_Document> spDoc(lDisp);
		if(!spDoc)
			return S_OK;
		CComPtr<MSWord::_Application> spApp;
		hr = spDoc->get_Application(&spApp);
		if(FAILED(hr)||(!spApp)){
			return S_OK;
		}
 		CComPtr<MSWord::Selection> selection;
		hr = spApp->get_Selection (&selection); 
		if(FAILED(hr)) 
			return S_OK;

		int nPageNum = 1;
		VARIANT vnt;
		selection->get_Information(wdNumberOfPagesInDocument, &vnt);
		if( lPage > vnt.intVal)
			lPage = vnt.intVal;
		selection->GoTo(COleVariant((long)wdGoToPage), COleVariant((long)wdGoToAbsolute), 
				COleVariant((long)lPage));
		while(1){
			if(0 == selection->MoveEnd(COleVariant((long)1),COleVariant((long)1)))
				break;
			selection->get_Information(wdActiveEndPageNumber, &vnt);
 			if(lPage != vnt.intVal){
				selection->MoveEnd(COleVariant((long)1),COleVariant((long)-1));
				break;
			} 
		}
		hr = selection->Select();
		selection->Copy();
		selection->WholeStory();
		selection->Delete();
		selection->Paste();
		VARIANT vt;
		vt.vt = VT_BSTR;
		vt.bstrVal = strLocalFile;
		spDoc->SaveAs(&vt);
 		spDoc.Release();		
	}catch(...){
		* pbool = -127;	
	}
   	return S_OK;
}

/*
替换文字
lGradation = 1  向后
           = 0 向前
*/
STDMETHODIMP CDsoFramerControl::ReplaceText(BSTR strSearchText, BSTR strReplaceText,  long lGradation, long* pbool)
{
 	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = NULL;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	* pbool = 0;
 
 	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{					
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					return S_OK;
				CComPtr<MSWord::_Application> spApp;
				hr = spDoc->get_Application(&spApp);
				if(FAILED(hr)||(!spApp)) return E_UNKNOW;
				CComPtr<MSWord::Selection>	spSelection = NULL;
 				hr = spApp->get_Selection(&spSelection);
				if(FAILED(hr)||(!spSelection)) return E_UNKNOW;
				
				if(1 == lGradation){
					spSelection->HomeKey(COleVariant((long)6),COleVariant((long)0));
				}else if(0 == lGradation){
					spSelection->EndKey(COleVariant((long)6),COleVariant((long)0));
				}

				CComPtr<MSWord::Find>	spFind = NULL;
				hr = spSelection->get_Find(&spFind);
				if(FAILED(hr)||(!spFind)) return E_UNKNOW;
				spFind->ClearFormatting();
				hr = spFind->put_Text(strSearchText);
				if(FAILED(hr)) return E_UNKNOW;
				VARIANT_BOOL vt(lGradation);
				
				spFind->put_Forward(vt);

				CComPtr<MSWord::Replacement> spReplace = NULL;
				hr = spFind->get_Replacement(&spReplace);
				if(FAILED(hr)||(!spReplace)) return E_UNKNOW;
				spReplace->ClearFormatting();
				spReplace->put_Text(strReplaceText);

				spFind->Execute(&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,
					&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,COleVariant((long)wdReplaceOne));
				 
 				spReplace = NULL;
 				spFind = NULL;

				spDoc.Release();
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);	
				if(!spDoc)
					break;
 	
			}
			break;
		case FILE_TYPE_PPT:
			{
			}
			break;
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
 			break;
		}
	}catch(...){
		* pbool = -127;	
	}
  	return S_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -