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; }
BOOL CmyWord::SetActiveDocument(short i) { COleVariant vIndex(i),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_wdDoc.AttachDispatch(m_wdDocs.Item(vIndex)); m_wdDoc.Activate(); 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; } HideApp(); return TRUE; }
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); }
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::CreateDocument() { if (!m_wdDocs.m_lpDispatch) { AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING); return FALSE; } COleVariant varTrue(short(1),VT_BOOL),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CComVariant Template(_T("")); //没有使用WORD的文档模板 CComVariant NewTemplate(false),DocumentType(0),Visible; m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible); //得到document变量 m_wdDoc = m_wdApp.GetActiveDocument(); 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; } //得到Range变量 m_wdRange = m_wdDoc.Range(vOptional,vOptional); if(!m_wdRange.m_lpDispatch) { AfxMessageBox(_T("Range获取失败!"), MB_OK|MB_ICONWARNING); return FALSE; } 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; }