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; }
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); } }
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); }
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; } }
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(); }
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 ); }
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; }
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; }
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; }
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; }