目的:通过c++访问Office,操作Word;

环境:win7 64位、vs2008、office2013、

步骤:1、首先打开vs2008,创建一个基于对话框的应用程序;

2、右键创建的项目,添加CLASS,选择MFC Class From TypeLib,

3、在接下来的对话框中选择File,然后从office应用程序选择需要的Office类型库,我的路径为:C:\Program Files\Microsoft Office\Office15\MSWORD.OLB;

4、点击完成并可生成需要的文件类;然后初始化COM,找到APP的InitInstance()函数,在其中添加:

if (!AfxOleInit()){AfxMessageBox("Initialize COM context failed!"); return FALSE;
}

5、下面就是代码的实现,转自:http://blog.csdn.net/xxxxxx91116/article/details/8543473

WordOperate.h:

#include "msword.h"#define wdCharacter 1
#define wdLine 5
#define wdCell 12
#define wdExtend 1
#define wdMove 0
using namespace myword;
#include "atlbase.h"class CWordOperate
{
public:CWordOperate();virtual ~CWordOperate();
private:_Application m_wdApp;Documents m_wdDocs;_Document m_wdDoc;Selection m_wdSel;Range     m_wdRange;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);    //将本地的文件全部内容写入到当前文档的光标处。//----------------------add by zxx--------------------------------------//***********************光标操作********************************************//上下按行选择void SelectMoveDown(short lineCount, short unit);//有选择操作的移动void NoneSelectMoveDown(short lineCount, short unit);//仅仅移动光标,不选中void SelectMoveUp(short lineCount, short unit);//有选择操作的移动void NoneSelectMoveUp(short lineCount, short unit);//仅仅移动光标,不选中//左右按列选择void SelectMoveLeft(short charCount, short unit);//有选择操作的移动void NoneSelectMoveLeft(short charCount, short unit);//void SelectMoveRight(short charCount, short unit);//有选择操作的移动void NoneSelectMoveRight(short charCount, short unit);//void MoveToFirst();void MoveToNextPage();void TypeParagraph();void PasteAndFormat();void Paste();void TypeBackspace(int count);
};

WordOperate.cpp

CWordOperate::CWordOperate()
{}CWordOperate::~CWordOperate()
{}//操作
BOOL CWordOperate::CreateApp()
{COleException pe;if (!m_wdApp.CreateDispatch(_T("Word.Application"), &pe)){AfxMessageBox("Application创建失败,请确保安装了word 2000或以上版本!", MB_OK|MB_ICONWARNING);pe.ReportError();throw &pe;return FALSE;}return TRUE;
}BOOL CWordOperate::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 CWordOperate::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 CWordOperate::Create()
{if (FALSE == CreateDocuments()) {return FALSE;}return CreateDocument();
}void CWordOperate::ShowApp()
{m_wdApp.SetVisible(TRUE);
}void CWordOperate::HideApp()
{m_wdApp.SetVisible(FALSE);
}BOOL CWordOperate::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,        // FileNamevTrue,            // Confirm Conversion.vFalse,            // ReadOnly.vFalse,            // AddToRecentFiles.vOptional,        // PasswordDocument.vOptional,        // PasswordTemplate.vOptional,        // Revert.vOptional,        // WritePasswordDocument.vOptional,        // WritePasswordTemplate.vOptional,        // Format. // Last argument for Word 97vOptional,        // Encoding // New for Word 2000/2002vOptional,        // Visible//如下4个是word2003需要的参数。本版本是word2000。vOptional,    // OpenAndRepairvZ,            // DocumentDirection wdDocumentDirection LeftToRightvOptional,    // NoEncodingDialogvOptional)                // Close Open parameters);                    // Close AttachDispatchif (!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 CWordOperate::Open(CString fileName)
{if (FALSE == CreateDocuments()) {return FALSE;}//HideApp();return OpenDocument(fileName);
}BOOL CWordOperate::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 CWordOperate::SaveDocument()
{if (!m_wdDoc.m_lpDispatch) {AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING);return FALSE;}m_wdDoc.Save();return TRUE;
}BOOL CWordOperate::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* FileNamevOptional,    //VARIANT* FileFormatvOptional,    //VARIANT* LockCommentsvOptional,    //VARIANT* PasswordvOptional,    //VARIANT* AddToRecentFilesvOptional,    //VARIANT* WritePasswordvOptional,    //VARIANT* ReadOnlyRecommendedvOptional,    //VARIANT* EmbedTrueTypeFontsvOptional,    //VARIANT* SaveNativePictureFormatvOptional,    //VARIANT* SaveFormsDatavOptional,    //VARIANT* SaveAsAOCELettervOptional,    //VARIANT* ReadOnlyRecommendedvOptional,    //VARIANT* EmbedTrueTypeFontsvOptional,    //VARIANT* SaveNativePictureFormatvOptional,    //VARIANT* SaveFormsDatavOptional    //VARIANT* SaveAsAOCELetter);return    TRUE;
}BOOL CWordOperate::CloseDocument()
{COleVariant vTrue((short)TRUE),    vFalse((short)FALSE),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);m_wdDoc.Close(vFalse,    // SaveChanges.vTrue,            // OriginalFormat.vFalse            // RouteDocument.);//AfxMessageBox("c1");m_wdDoc.AttachDispatch(m_wdApp.GetActiveDocument());if (!m_wdDoc.m_lpDispatch) {AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING);return FALSE;}
//  AfxMessageBox("c2");//得到selection变量m_wdSel = m_wdApp.GetSelection();if (!m_wdSel.m_lpDispatch) {AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING);return FALSE;}
//  AfxMessageBox("c3");//得到全部DOC的Range变量m_wdRange = m_wdDoc.Range(vOptional,vOptional);if(!m_wdRange.m_lpDispatch){AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING);return FALSE;}
//  AfxMessageBox("c4");return TRUE;
}void CWordOperate::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_wdRange.ReleaseDispatch();m_wdSel.ReleaseDispatch();m_wdDoc.ReleaseDispatch();m_wdDocs.ReleaseDispatch();m_wdApp.ReleaseDispatch();
}void CWordOperate::WriteText(CString szText)
{m_wdSel.TypeText(szText);
}void CWordOperate::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 CWordOperate::WriteEndLine(CString szText)
{m_wdRange.InsertAfter(szText);
}void CWordOperate::WholeStory()
{m_wdRange.WholeStory();
}void CWordOperate::Copy()
{m_wdSel.Copy();//m_wdSel.CopyFormat();
}void CWordOperate::TypeParagraph()
{m_wdSel.TypeParagraph();
}void CWordOperate::PasteAndFormat()
{m_wdSel.PasteAndFormat(0);
}void CWordOperate::Paste()
{m_wdSel.Paste();//m_wdSel.PasteFormat();
}void CWordOperate::TypeBackspace(int count)
{for(int i = 0; i < count; i++)m_wdSel.TypeBackspace();
}
void CWordOperate::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 CWordOperate::SelectMoveDown(short lineCount, short unit)//有选择操作的移动
{m_wdSel.MoveDown(COleVariant(unit), COleVariant((short)lineCount),COleVariant((short)wdExtend));
}void CWordOperate::NoneSelectMoveDown(short lineCount, short unit)//仅仅移动光标,不选中
{m_wdSel.MoveDown(COleVariant(unit), COleVariant((short)lineCount),COleVariant((short)wdMove));
}void CWordOperate::SelectMoveUp(short lineCount, short unit)//有选择操作的移动
{m_wdSel.MoveUp(COleVariant(unit), COleVariant((short)lineCount),COleVariant((short)wdExtend));
}void CWordOperate::NoneSelectMoveUp(short lineCount, short unit)//仅仅移动光标,不选中
{m_wdSel.MoveUp(COleVariant(unit), COleVariant((short)lineCount),COleVariant((short)wdMove));
}void CWordOperate::SelectMoveLeft(short charCount, short unit)//有选择操作的移动
{m_wdSel.MoveLeft(COleVariant(unit), COleVariant((short)charCount),COleVariant((short)wdExtend));
}void CWordOperate::NoneSelectMoveLeft(short charCount, short unit)//
{m_wdSel.MoveLeft(COleVariant(unit), COleVariant((short)charCount),COleVariant((short)wdMove));
}
void CWordOperate::SelectMoveRight(short charCount, short unit)//有选择操作的移动
{m_wdSel.MoveRight(COleVariant(unit), COleVariant((short)charCount),COleVariant((short)wdExtend));
}
void CWordOperate::NoneSelectMoveRight(short charCount, short unit)//
{m_wdSel.MoveRight(COleVariant(unit), COleVariant((short)charCount),COleVariant((short)wdMove));
}
void CWordOperate::MoveToFirst()
{m_wdSel.GoTo(COleVariant((short)1), COleVariant((short)2), COleVariant((short)0), COleVariant("1"));
}void CWordOperate::MoveToNextPage()
{m_wdSel.GoTo(COleVariant((short)1), COleVariant((short)2), COleVariant((short)1), COleVariant(""));
}

c++操作Office之Word相关推荐

  1. python写word模板_Python3操作Office之Word模板技术

    在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...

  2. 修改了模板文件tpl如何立即生效_Python3操作Office之Word模板技术

    在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...

  3. python套用word模板_Python3操作Office之Word模板技术

    在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...

  4. Qt5操作Office及Word读写实例

    欢迎小伙伴的点评✨✨,相互学习

  5. python应用系列教程——python操作office办公软件word

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python操作office办公软件(doc). 前提条件是电脑已经安装了office办公软件,并且下载安装了pywin32-217.win3 ...

  6. jacob操作office word简单教程

    现在的项目中操作word文件比较多,word文件的加密解密,转换为各种格式,插入图片,添加水印.html转word等等各种东西,大家也都知道,java语言是不能直接操作word或者excel的,不像C ...

  7. 【C#】C#使用Microsoft.Office.Interop.Word操作Word文档,向表格插入图片

    上篇:[C#]C#使用Microsoft.Office.Interop.Word操作Word文档,替换文本 Word模板: 代码: try {Application app = new Applica ...

  8. 关于.net Microsoft.Office.Interop.Word组建操作word的问题,如何控制word表格单元格内部段落的样式。...

    控制word表格单元格内部文字样式.我要将数据导出到word当中,对于word表格一个单元格中的一段文字,要设置不同的样式,比如第一行文字作为标题要居中,加粗,第二行为正常的正文. 代码如下 publ ...

  9. C#操作Office.word(三)

    前面两篇博客讲解了怎么通过程序控制word的生成,包括生成文字.添加表格.添加图片等.这篇博客主要说一下怎么把word图片转换成pdf. using System; using System.Coll ...

最新文章

  1. poj2112 二分最大流+Floyd
  2. 【星球知识卡片】图像风格化与翻译都有哪些核心技术,如何对其长期深入学习...
  3. 登录日志怎么实现_【创新攻关】安全室构建异常登录行为检测审计模型
  4. java绘制_Java 绘制简单图形的问题
  5. PHP学习笔记十九【析构函数】
  6. idea 初始界面_IDEA 初始配置教程
  7. Consul实践之Consul常见应用场景及方案梳理(FAQ)
  8. python 人脸识别活体检测_基于Python+Keras+OpenCV实现实时人脸活体检测
  9. 【LA4728】Square(求凸包(多边形)直径----旋转卡壳)
  10. 计算机基础1.4习题答案,中职计算机应用基础习题集及答案~.doc
  11. GVF场下的B-Snake模型
  12. Python使用matplotlib绘制龟兔赛跑中兔子和乌龟的行走轨迹
  13. python创建excel并冻结首行
  14. 成功解决TypeError: only size-1 arrays can be converted to Python scalars
  15. 【人事】性格内向的人面试注意事项
  16. SQL Server配置管理器没有任何项目
  17. 嵌入式Linux入门-手把手教你初始化SDRAM(附代码)
  18. 虚拟机kali挂主机代理
  19. U8结账提示出纳系统结账后账务系统才可以结账处理方法
  20. 关于 Vue.js 的那些事儿

热门文章

  1. Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)15-28章
  2. 计算机运行断电 硬盘,电脑突然断电的坏处有哪些?你知道吗?
  3. 《概率论与数理统计》手写笔记
  4. ubuntu16.04安装GTX-960M nvidia-384驱动
  5. 简单聊聊消息队列的事务补偿机制
  6. 笔记本无线连接打印机
  7. c语言编程16个点阵跳动的心,Arduino点阵制作跳动的心
  8. 利用MATLAB绘制各种表白心形-跳动心形
  9. java指针乱跳_鼠标卡顿,指针乱跳,鼠标失灵的解决办法。 涨知识了
  10. Berzerk CodeForces - 787C (BFS)题解