vc++操作word
来源:互联网 发布:软件解决方案工程师 编辑:程序博客网 时间:2024/05/02 17:49
最近根据项目需要,需要我去用 vc++6.0 作一个 ActiveX web 组件。自己从来没有接触过这方面的编程,这次是头一遭!所以咱就做了,不过倒很出乎我的意料,比我想象的要快很多就完成了。现将 vc++6.0 操作 word 部分的关键代码部分帖出来,共享给大家。
因为我在开发的时候遇到了很多问题,并且网上的资料很少,基本都是最基本的操作。所以帖出来,希望能让大家在开发的过程少走些弯路!
工具: vc++6.0 。
关键字: c++ , MFC 。
要求:系统安装 MS OFFICE 2000 。
过程:
准备工作:
1. 创建一个 MFC(EXE) 工程: MFC AppWizard ( exe ),工程为对话框形式(测试用)。
2. 在 CLASS VIEW 页面创建一个类:类名为: CWordOffice ,类的类型为: Class type : Generic Class 。
3. 在工具栏中找到 view -> class wizard -> Automation -> add class -> from a tye library ,然后选中 offfice 安装的目录中的 MSWORD9.OLB ,然后选中所有列出的类名,点 OK 完成。
准备工作完成,下面贴出相关部分的代码:
CWordOffice.h 中的手动写入的代码如下(自动生成的没有加入):
#include "atlbase.h"#include "msword9.h"class CWordOffice {private: _Application m_wdApp; Documents m_wdDocs; _Document m_wdDoc; Selection m_wdSel; Range m_wdRange; InlineShapes m_wdInlineShapes; InlineShape m_wdInlineShape;public: CWordOffice(); virtual ~CWordOffice();public: //操作 //**********************创建新文档******************************************* BOOL CreateApp(); //创建一个新的WORD应用程序 BOOL CreateDocuments(); //创建一个新的Word文档集合 BOOL CreateDocument(); //创建一个新的Word文档 BOOL Create(); //创建新的WORD应用程序并创建一个新的文档 void ShowApp(); //显示WORD文档 void HideApp(); //隐藏word文档 //**********************打开文档********************************************* BOOL OpenDocument(CString fileName);//打开已经存在的文档。 BOOL Open(CString fileName); //创建新的WORD应用程序并打开一个已经存在的文档。 BOOL SetActiveDocument(short i); //设置当前激活的文档。 //**********************保存文档********************************************* BOOL SaveDocument(); //文档是以打开形式,保存。 BOOL SaveDocumentAs(CString fileName);//文档以创建形式,保存。 BOOL CloseDocument(); void CloseApp(); //**********************文本书写操作***************************************** void WriteText(CString szText); //当前光标处写文本 void WriteNewLineText(CString szText, int nLineCount = 1); //换N行写字 void WriteEndLine(CString szText); //文档结尾处写文本 void WholeStory(); //全选文档内容 void Copy(); //复制文本内容到剪贴板 void InsertFile(CString fileName); //将本地的文件全部内容写入到当前文档的光标处。 //**********************图片插入操作***************************************** void InsertShapes(CString fileName);//在当前光标的位置插入图片 //**********************超链接插入操作***************************************** void InsertHyperlink(CString fileLink);//超级链接地址,可以是相对路径。};
CWordOffice.c中的手写代码如下:
CWordOffice::CWordOffice(){}CWordOffice::~CWordOffice(){ COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //m_wdDoc.Save(); m_wdApp.Quit(vFalse, // SaveChanges. vTrue, // OriginalFormat. vFalse // RouteDocument. ); //释放内存申请资源 m_wdInlineShape.ReleaseDispatch(); m_wdInlineShapes.ReleaseDispatch(); //m_wdTb.ReleaseDispatch(); m_wdRange.ReleaseDispatch(); m_wdSel.ReleaseDispatch(); //m_wdFt.ReleaseDispatch(); m_wdDoc.ReleaseDispatch(); m_wdDocs.ReleaseDispatch(); m_wdApp.ReleaseDispatch();}//操作BOOL CWordOffice::CreateApp(){ if (FALSE == m_wdApp.CreateDispatch("Word.Application")) { AfxMessageBox("Application创建失败,请确保安装了word 2000或以上版本!", MB_OK|MB_ICONWARNING); return FALSE; } return TRUE;}BOOL CWordOffice::CreateDocuments(){ if (FALSE == CreateApp()) { return FALSE; } m_wdDocs.AttachDispatch(m_wdApp.GetDocuments()); if (!m_wdDocs.m_lpDispatch) { AfxMessageBox("Documents创建失败!", MB_OK|MB_ICONWARNING); return FALSE; } return TRUE;}BOOL CWordOffice::CreateDocument(){ if (!m_wdDocs.m_lpDispatch) { AfxMessageBox("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("Document获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到selection变量 m_wdSel = m_wdApp.GetSelection(); if (!m_wdSel.m_lpDispatch) { AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到Range变量 m_wdRange = m_wdDoc.Range(vOptional,vOptional); if(!m_wdRange.m_lpDispatch) { AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } return TRUE;}BOOL CWordOffice::Create(){ if (FALSE == CreateDocuments()) { return FALSE; } return CreateDocument();}void CWordOffice::ShowApp(){ m_wdApp.SetVisible(TRUE);}void CWordOffice::HideApp(){ m_wdApp.SetVisible(FALSE);}BOOL CWordOffice::OpenDocument(CString fileName){ if (!m_wdDocs.m_lpDispatch) { AfxMessageBox("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(_T(fileName)); //得到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("Document获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到selection变量 m_wdSel = m_wdApp.GetSelection(); if (!m_wdSel.m_lpDispatch) { AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到全部DOC的Range变量 m_wdRange = m_wdDoc.Range(vOptional,vOptional); if(!m_wdRange.m_lpDispatch) { AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } return TRUE;}BOOL CWordOffice::Open(CString fileName){ if (FALSE == CreateDocuments()) { return FALSE; } return OpenDocument(fileName);}BOOL CWordOffice::SetActiveDocument(short i){ COleVariant vIndex(_T(i)),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_wdDoc.AttachDispatch(m_wdDocs.Item(vIndex)); m_wdDoc.Activate(); if (!m_wdDoc.m_lpDispatch) { AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到selection变量 m_wdSel = m_wdApp.GetSelection(); if (!m_wdSel.m_lpDispatch) { AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到全部DOC的Range变量 m_wdRange = m_wdDoc.Range(vOptional,vOptional); if(!m_wdRange.m_lpDispatch) { AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } HideApp(); return TRUE;}BOOL CWordOffice::SaveDocument(){ if (!m_wdDoc.m_lpDispatch) { AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } m_wdDoc.Save(); return TRUE;}BOOL CWordOffice::SaveDocumentAs(CString fileName){ if (!m_wdDoc.m_lpDispatch) { AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); COleVariant vFileName(_T(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 ); return TRUE;}BOOL CWordOffice::CloseDocument(){ COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_wdDoc.Close(vFalse, // SaveChanges. vTrue, // OriginalFormat. vFalse // RouteDocument. ); m_wdDoc.AttachDispatch(m_wdApp.GetActiveDocument()); if (!m_wdDoc.m_lpDispatch) { AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到selection变量 m_wdSel = m_wdApp.GetSelection(); if (!m_wdSel.m_lpDispatch) { AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } //得到全部DOC的Range变量 m_wdRange = m_wdDoc.Range(vOptional,vOptional); if(!m_wdRange.m_lpDispatch) { AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING); return FALSE; } return TRUE;}void CWordOffice::CloseApp(){ COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_wdDoc.Save(); m_wdApp.Quit(vFalse, // SaveChanges. vTrue, // OriginalFormat. vFalse // RouteDocument. ); //释放内存申请资源 m_wdInlineShape.ReleaseDispatch(); m_wdInlineShapes.ReleaseDispatch(); //m_wdTb.ReleaseDispatch(); m_wdRange.ReleaseDispatch(); m_wdSel.ReleaseDispatch(); //m_wdFt.ReleaseDispatch(); m_wdDoc.ReleaseDispatch(); m_wdDocs.ReleaseDispatch(); m_wdApp.ReleaseDispatch();}void CWordOffice::WriteText(CString szText){ m_wdSel.TypeText(szText);}void CWordOffice::WriteNewLineText(CString szText, int nLineCount /* = 1 */){ int i; if (nLineCount <= 0) { nLineCount = 0; } for (i = 0; i < nLineCount; i++) { m_wdSel.TypeParagraph(); } WriteText(szText);}void CWordOffice::WriteEndLine(CString szText){ m_wdRange.InsertAfter(szText);}void CWordOffice::WholeStory(){ m_wdRange.WholeStory();}void CWordOffice::Copy(){ m_wdRange.CopyAsPicture();}void CWordOffice::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 );}void CWordOffice::InsertShapes(CString fileName){ COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_wdInlineShapes=m_wdSel.GetInlineShapes(); m_wdInlineShape=m_wdInlineShapes.AddPicture(fileName,vFalse,vTrue,vOptional);}void CWordOffice::InsertHyperlink(CString fileLink){ COleVariant vAddress(_T(fileLink)),vSubAddress(_T("")); Range aRange = m_wdSel.GetRange(); Hyperlinks vHyperlinks(aRange.GetHyperlinks()); vHyperlinks.Add( aRange, //Object,必需。转换为超链接的文本或图形。 vAddress, //Variant 类型,可选。指定的链接的地址。此地址可以是电子邮件地址、Internet 地址或文件名。请注意,Microsoft Word 不检查该地址的正确性。 vSubAddress, //Variant 类型,可选。目标文件内的位置名,如书签、已命名的区域或幻灯片编号。 vAddress, //Variant 类型,可选。当鼠标指针放在指定的超链接上时显示的可用作“屏幕提示”的文本。默认值为 Address。 vAddress, //Variant 类型,可选。指定的超链接的显示文本。此参数的值将取代由 Anchor 指定的文本或图形。 vSubAddress //Variant 类型,可选。要在其中打开指定的超链接的框架或窗口的名字。 ); vHyperlinks.ReleaseDispatch();}
上边的代码是主要的核心代码,有些代码没有进行优化,请各位批判的看!测试部分代码如下:
需要在对话框中添加一个按钮,按钮的事件方法内添加如下代码:
COfficeProjectDlg::OnButton1(){AfxEnableControlContainer(); AfxOleInit(); CWordOffice wd; wd.CreateDocuments();wd.OpenDocument("d:""a.doc");wd.ShowApp(); //显示word}
其他方法就不一一帖出测试方法了。可以自己根据方法说明做测试。
- VC操作操作Word
- VC操作Word系列
- vc++操作word
- vc++操作word
- vc中操作WORD
- VC++中操作word
- 用VC操作word
- vc操作word读写
- VC操作Word系列
- VC操作word
- VC操作word
- VC操作word
- 用VC操作WORD
- VC++操作word
- VC++操作word
- VC++ 操作Word
- [转]VC++操作Word
- VC++ 操作 word
- SQL Server 2005对T-SQL的增强之在聚合函数的后面使用over关键字
- 合并分拆表
- 软件测试新书推荐
- C#往SQL数据库字段中插入二进制文件的三种方法
- 更新下Excel操作类
- vc++操作word
- VB Shell调用后 等待程序运行结束
- C标准库
- 使用Transact-SQL进行数据导入导出方法详解
- 如何解决USB设备在Windows Vista下不能识别的问题!
- 在ASP.NET页面中使用SolpartMenu控件
- 利用MSXML解析XML文本(VC)
- IniFile简单读写类
- 学生信息管理系统目标和范围说明书