예제 #1
0
BOOL CmyWord::SaveDocumentAs(CString fileName)  
{  
    if (!m_wdDoc.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    COleVariant vTrue((short)TRUE),      
                vFalse((short)FALSE),  
                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
    COleVariant vFileName(fileName);  
  
    m_wdDoc.SaveAs(  
                vFileName,    //VARIANT* FileName  
                vOptional,    //VARIANT* FileFormat  
                vOptional,    //VARIANT* LockComments  
                vOptional,    //VARIANT* Password  
                vOptional,    //VARIANT* AddToRecentFiles  
                vOptional,    //VARIANT* WritePassword  
                vOptional,    //VARIANT* ReadOnlyRecommended  
                vOptional,    //VARIANT* EmbedTrueTypeFonts  
                vOptional,    //VARIANT* SaveNativePictureFormat  
                vOptional,    //VARIANT* SaveFormsData  
                vOptional,    //VARIANT* SaveAsAOCELetter  
                vOptional,    //VARIANT* ReadOnlyRecommended  
                vOptional,    //VARIANT* EmbedTrueTypeFonts  
                vOptional,    //VARIANT* SaveNativePictureFormat  
                vOptional,    //VARIANT* SaveFormsData  
                vOptional    //VARIANT* SaveAsAOCELetter  
                );  
    return    TRUE;  
}  
예제 #2
0
void CmyWord::FindWord(CString FindW,CString RelWord)
{
	m_wdSel=m_wdApp.GetSelection();
	Find myFind=m_wdSel.GetFind();
	if(!myFind.m_lpDispatch)
	{
		AfxMessageBox(_T("获取Find 对象失败"));
		return;
	}
	else
	{
		//下面三行是按照vba 写的
		myFind.ClearFormatting();
		Replacement repla=myFind.GetReplacement();
		repla.ClearFormatting();

		COleVariant Text(FindW);
		COleVariant re(RelWord);
		COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
		COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
		CComVariant v(1);
		CComVariant v2(2);
		CComVariant v3(_T(""));
		//下面的Replace 对应的替换的范围是哪里.
		// 1 代表一个 2 代表整个文档
		//myFind.Execute(Text,vFalse,vFalse,vFalse,vFalse,vFalse,vTrue,&v,vFalse,re,&v2,vOpt,vOpt,vOpt,vOpt);
		myFind.Execute(Text,vFalse,vFalse,vFalse,vFalse,vFalse,
			vTrue,&v,vFalse,&re,&v2,vOpt,vOpt,vOpt,vOpt);
	}
}
예제 #3
0
void CmyWord::InsertSymbol(const CString& strFont,long charNum)
{
	COleVariant vTrue((short)TRUE),      
		vFalse((short)FALSE),  
		vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
	COleVariant font(strFont);
	//long charNum = -3842;
	m_wdSel.InsertSymbol(charNum,font,vTrue,vOptional);
}
예제 #4
0
BOOL CmyWord::Open(CString fileName)  
{  
	if(FALSE == PathFileExists(fileName) || -1 == fileName.Find(_T(".doc")))
	{
		AfxMessageBox(_T("请确定路径是否正确!"),MB_OK|MB_ICONSTOP);
		return FALSE;
	}
	CComVariant Read(FALSE);
	CComVariant AddToR(FALSE);
	CComVariant Name(fileName);

	COleVariant vTrue((short)TRUE);
	COleVariant vFalse((short)FALSE);
	COleVariant varstrNull(_T(""));
	COleVariant varZero((short)0);
	COleVariant varTrue(short(1),VT_BOOL);
	COleVariant varFalse(short(0),VT_BOOL);
	COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

	if(!m_wdApp.m_lpDispatch)
	{
		if(CreateApp()==FALSE)
		{
			return FALSE;
		}
	}
	if(!m_wdDoc.m_lpDispatch)
	{
		m_wdDocs=m_wdApp.GetDocuments();
		if(!m_wdDocs.m_lpDispatch)
		{
			AfxMessageBox(_T("DocuMent 对象创建失败"));
			CloseApp();
			return FALSE;
		}
	}
	CComVariant format(0);//打开方式 0 为doc的打开方式
	//doc=docs.Open(&Name,varFalse,&Read,&AddToR,vOpt,vOpt,vFalse,vOpt,vOpt,&format,vOpt,vTrue,vOpt,vOpt,vOpt,vOpt);
	m_wdDoc = m_wdDocs.Add(&Name, vOpt, vOpt, vOpt);
	if(!m_wdDoc.m_lpDispatch)
	{
		AfxMessageBox(_T("文件打开失败"));
		CloseApp();
		return FALSE;
	}
	else
	{
		m_wdSel=m_wdApp.GetSelection();
		if(!m_wdSel.m_lpDispatch)
		{
			AfxMessageBox(_T("打开失败"));
			CloseApp();
			return FALSE;
		}
		return TRUE;
	}
}  
예제 #5
0
void CmyWord::CreateTable(int nRow, int nCell )
{
	  COleVariant vTrue((short)TRUE),      
	              vFalse((short)FALSE),  
	              vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  

	Range range = m_wdSel.GetRange();
	Tables tables = m_wdDoc.GetTables();
	m_table = tables.Add(range,nRow,nCell,vOptional,vOptional);
	Borders borders = m_table.GetBorders();
	borders.SetEnable(TRUE);
	Rows rows  =  m_table.GetRows();   
}
예제 #6
0
void CmyWord::InsertFile(CString fileName)  
{  
    COleVariant     vFileName(fileName),  
                 vTrue((short)TRUE),  
                 vFalse((short)FALSE),  
                 vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),  
                 vNull(_T(""));  
    /**//* 
    void InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment); 
    */  
    m_wdSel.InsertFile(  
                    fileName,  
                    vNull,  
                    vFalse,  
                    vFalse,  
                    vFalse  
                    );  
}  
예제 #7
0
BOOL CmyWord::isUsing(CString fileName)
{
	COleVariant vTrue((short)TRUE),      
		vFalse((short)FALSE),  
		vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

	CLSID clsid;
	CLSIDFromProgID( TEXT("Word.Application"), &clsid);  

	IUnknown *pUnk = NULL;

	HRESULT hr = ::GetActiveObject(clsid,NULL,&pUnk);
	if(FAILED(hr)|| pUnk == NULL) return FALSE;
	
	_Application wdApp;
	hr = pUnk->QueryInterface(IID_IDispatch, (LPVOID *)&wdApp);
	if(FAILED(hr)) return FALSE;

	Documents wdDocs = wdApp.GetDocuments();
	short docNum = (short)wdDocs.GetCount();

	//有word程序打开,但是没有打开文档,则关闭程序(防止word后台运行,影响计算机运行速度)
	if(docNum <= 0) 
	{
		wdApp.Quit(vFalse,vOptional,vOptional);
		wdApp.ReleaseDispatch();
		return FALSE;
	}

	_Document  wdDoc;
	wdDoc = wdApp.GetActiveDocument(); 
	if(wdDoc != NULL)
	{
		CString bstrName = wdDoc.GetFullName(); 
		if(bstrName == fileName)
		{
			return TRUE;
		}
	}
	return FALSE;

}
예제 #8
0
BOOL CmyWord::CloseDocument()  
{  
	CComVariant vTrue(TRUE);
	CComVariant vFalse(FALSE);
	CComVariant vOpt;
	CComVariant cSavechage(FALSE);
	if(!m_wdDoc.m_lpDispatch)
	{
		AfxMessageBox(_T("_Document 对象获取失败,关闭操作失败"));
		return FALSE;
	}
	else
	{
		//下面第一个参数填vTrue 会出现错误,可能是后面的参数也要对应的变化
		//但vba 没有给对应参数 我就用这种方法来保存

		m_wdDoc.Close(&vFalse,&vOpt,&vOpt);
	}
	return TRUE;
}  
예제 #9
0
extern "C" int PASCAL EXPORT Convert( const char* strFile_In , const char* strFile_Out )
{
	AFX_MANAGE_STATE( AfxGetStaticModuleState( ) );
	int bRet = 0;

	TCHAR strFile_In_T[MAX_PATH] = { _T( "" ) };
	TCHAR strFile_Out_T[MAX_PATH] = { _T( "" ) };

	UTF8_TO_WIDE( strFile_In_T , strFile_In );
	UTF8_TO_WIDE( strFile_Out_T , strFile_Out );

	CoInitialize( NULL );
	PPT_Application pApp;
	COleException cErr;
	TCHAR strErr[256] = { _T( "" ) };
	cErr.GetErrorMessage( strErr , 256 );


	vector<int> vPIDs;
	GetPptPID( vPIDs , PROCESS_FACT::INIT );
	int nRet = pApp.CreateDispatch( _T( "Powerpoint.Application" ) , &cErr );
	if( nRet > 0 )
	{
		int nPID = GetPptPID( vPIDs , PROCESS_FACT::FIND );
		pApp.put_Visible( 1 );
		PPT_Presentations pPresentations = pApp.get_Presentations( );
		COleVariant vTrue( ( short ) TRUE ) , vFalse( ( short ) FALSE ) , vOptional( ( long ) DISP_E_PARAMNOTFOUND , VT_ERROR ) , vZ( ( short ) 0 ) ;

		try
		{
			//Open Workbook
			CString strBookPath( strFile_In_T );
			strBookPath.Replace( _T( "//" ) , _T( "\\" ) );
			PPT_Presentation pPresentation = pPresentations.Open( strBookPath , 0 , 0 , 0 );
			if( pPresentation.m_lpDispatch )
			{
				try
				{
					//Convert
					CString strPdfPath( strFile_Out_T );
					strPdfPath.Replace( _T( "//" ) , _T( "\\" ) );
					pPresentation.ExportAsFixedFormat( strPdfPath , ppFixedFormatTypePDF , 0 , 0 , ppPrintHandoutHorizontalFirst
						, ppPrintOutputSlides , 0 , NULL , ppPrintAll , NULL , false , false , true , true , false , vOptional );
					bRet = TASK_STATE::TASK_STATE_SUC;
					pPresentation.Close( );
				}
				catch( ... )
				{
					bRet = TASK_STATE::TASK_STATE_FILE_CONVERT_FAIL;
					pPresentation.Close( );
				}
				pPresentation.ReleaseDispatch( );
			}
		}
		catch( ... )
		{
			bRet = TASK_STATE::TASK_STATE_FILE_OPEN_FAIL;
		}
		pPresentations.ReleaseDispatch( );
		pApp.Quit( );
		pApp.ReleaseDispatch( );
		GetPptPID( vPIDs , PROCESS_FACT::TERMINATE , nPID );
		Sleep( 1000 );
	}
	CoUninitialize( );

	return bRet;
}
예제 #10
0
BOOL CmyWord::OpenDocument(CString fileName)  
{  
    if (!m_wdDocs.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
  
    COleVariant vTrue((short)TRUE),      
                vFalse((short)FALSE),  
                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),  
                vZ((short)0);  
    COleVariant vFileName(fileName);  
      
	
	//得到document变量  
	//m_wdDoc.AttachDispatch(m_wdDocs.Add(vFileName, vOptional, vOptional, vOptional)) ;                    // Close AttachDispatch  

    //得到document变量  
    m_wdDoc.AttachDispatch(m_wdDocs.Open(  
                                vFileName,        // FileName  
                                vTrue,            // Confirm Conversion.  
                                vFalse,            // ReadOnly.  
                                vFalse,            // AddToRecentFiles.  
                                vOptional,        // PasswordDocument.  
                                vOptional,        // PasswordTemplate.  
                                vOptional,        // Revert.  
                                vOptional,        // WritePasswordDocument.  
                                vOptional,        // WritePasswordTemplate.  
                                vOptional,        // Format. // Last argument for Word 97  
                                vOptional,        // Encoding // New for Word 2000/2002  
                                vOptional,        // Visible  
                                //如下4个是word2003需要的参数。本版本是word2000。  
                                vOptional,    // OpenAndRepair  
                                vZ,            // DocumentDirection wdDocumentDirection LeftToRight  
                                vOptional,    // NoEncodingDialog  
                                vOptional  
                                  
                                )                // Close Open parameters  
                            );                    // Close AttachDispatch  
      
    if (!m_wdDoc.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    //得到selection变量  
    m_wdSel = m_wdApp.GetSelection();  
    if (!m_wdSel.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Select获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    //得到全部DOC的Range变量  
    m_wdRange = m_wdDoc.Range(vOptional,vOptional);  
    if(!m_wdRange.m_lpDispatch)  
    {  
        AfxMessageBox(_T("Range获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    return TRUE;  
}