演示 OLE 自动化 MS Word





3.00/5 (8投票s)
2002 年 2 月 25 日
1分钟阅读

147550

23038
一篇演示自动化的文章,
引言
这是一个 Microsoft Word OLE 自动化的代码示例。该项目接受两个文件夹作为源路径和目标路径。它打开源路径中的每个文档文件,并检查以 'P' 开头的书签。如果找到,它将使用书签内容创建一个新文件。
步骤
- 使用 MFC 应用向导创建一个对话框项目,勾选自动化支持复选框。添加 2 个按钮,分别命名为“Ellipsis1”和“Ellipsis2”,并标记为“源...”和“目标...”(这些是浏览按钮)。 另外添加一个“自动化”按钮(这将启动自动化)。
- 打开类向导,转到“自动化”选项卡。
- 选择“添加类”。
- 选择“从类型库中选择”。
- 选择文件 MSWORD*.OLD,其中 * 可以是根据机器上安装的 Office 版本而定的任何内容。
- 从列表中选择类 _
Application
、_Document
、Documents
、Bookmarks
、Bookmark
、Range
和Selection
。 - 在对话框的编辑框中添加两个变量 m_
SourcePath
和 m_DestinationPath
作为CString
。 - 对于 Ellipsis1 的“单击”事件,添加以下代码。当单击浏览按钮并打开源路径的“浏览”对话框时,将调用此代码。
- 对于 Ellipsis2 的单击事件,添加以下代码
void CWord1Dlg::OnEllipsis2() { BROWSEINFO browseInfo; browseInfo.hwndOwner = NULL ; browseInfo.pidlRoot = NULL; browseInfo.lpszTitle = "Enter The Destination Path"; browseInfo.ulFlags = 0 ; browseInfo.lpfn = NULL; browseInfo.lParam = 0; LPITEMIDLIST lpItemIDList; if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo))!= NULL) { SHGetPathFromIDList(lpItemIDList,m_DestinationPath.GetBuffer(256)); UpdateData(FALSE); } }
- 将以下代码添加到“自动化”按钮
void CWord1Dlg::OnAutomate() { COleVariant m_True((short)TRUE), m_False((short)FALSE), m_Long((long)DISP_E_PARAMNOTFOUND, VT_ERROR); long startPos,endPos,m_LoopVar; BOOL m_FoundTheFile; CString m_FileName; UpdateData(TRUE); if(m_SourcePath=="" || m_DestinationPath =="") { MessageBox("Either Source Or Destination Path is Invalid", "Easy Split Error",MB_ICONINFORMATION); return; } _Application appObj; if(!appObj.CreateDispatch("Word.Application")) { AfxMessageBox("Coud Not Create The Application Object"); } appObj.SetVisible(FALSE); Documents docsObj(appObj.GetDocuments()); _Document docObj,tempDocObj; CFileFind m_FileFind; m_FoundTheFile = m_FileFind.FindFile(m_SourcePath+"\\*.doc"); while(m_FoundTheFile) { m_FoundTheFile=m_FileFind.FindNextFile(); docObj.AttachDispatch(docsObj.Open(COleVariant(m_FileFind.GetFilePath()), m_False,m_False,m_False,m_Long,m_Long,m_False, m_Long,m_Long,m_Long )); Bookmarks m_Books(docObj.GetBookmarks()); Bookmark m_Book; Selection selObj(appObj.GetSelection()); startPos=0; endPos=0; for(m_LoopVar=1;m_LoopVar<= m_Books.GetCount();m_LoopVar++) { startPos=endPos ; docObj.Activate(); m_Book.AttachDispatch(m_Books.Item(COleVariant(m_LoopVar))); if(m_Book.GetName().GetAt(0)!='P') continue; endPos= m_Book.GetEnd(); selObj.AttachDispatch(appObj.GetSelection()); selObj.SetRange(startPos,endPos); selObj.Copy(); docsObj.Add(m_Long , m_Long ); selObj.AttachDispatch(appObj.GetSelection()); selObj.Paste(); tempDocObj.AttachDispatch(appObj.GetActiveDocument()); m_FileName.Format("%s%d.doc", m_DestinationPath+"\\" + m_FileFind.GetFileTitle(), m_LoopVar); tempDocObj.SaveAs(COleVariant(m_FileName),m_Long,m_False, COleVariant(""), m_True,COleVariant(""), m_False,m_False,m_False,m_False,m_False); selObj.Shrink(); m_Book.DetachDispatch(); } } tempDocObj.Close(m_Long,m_Long,m_Long); docObj.Close(m_Long,m_Long,m_Long); docsObj.Close(m_Long,m_Long,m_Long); appObj.Quit(m_Long,m_Long,m_Long); m_FileFind.Close(); MessageBox("Completed Successfully","Easy Split",MB_ICONINFORMATION); }
void CWord1Dlg::OnEllipsis1() { BROWSEINFO browseInfo; browseInfo.hwndOwner = NULL ; browseInfo.pidlRoot = NULL; browseInfo.lpszTitle = "Enter The Source Path"; browseInfo.ulFlags = 0 ; browseInfo.lpfn = NULL; browseInfo.lParam = 0; LPITEMIDLIST lpItemIDList; if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo))!= NULL) { SHGetPathFromIDList(lpItemIDList,m_SourcePath.GetBuffer(256)); UpdateData(FALSE); } }