c++操作Office之Word
目的:通过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相关推荐
- python写word模板_Python3操作Office之Word模板技术
在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...
- 修改了模板文件tpl如何立即生效_Python3操作Office之Word模板技术
在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...
- python套用word模板_Python3操作Office之Word模板技术
在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档.如放假通知.工作日志.工作周报.合同等. 以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复 ...
- Qt5操作Office及Word读写实例
欢迎小伙伴的点评✨✨,相互学习
- python应用系列教程——python操作office办公软件word
全栈工程师开发手册 (作者:栾鹏) python教程全解 python操作office办公软件(doc). 前提条件是电脑已经安装了office办公软件,并且下载安装了pywin32-217.win3 ...
- jacob操作office word简单教程
现在的项目中操作word文件比较多,word文件的加密解密,转换为各种格式,插入图片,添加水印.html转word等等各种东西,大家也都知道,java语言是不能直接操作word或者excel的,不像C ...
- 【C#】C#使用Microsoft.Office.Interop.Word操作Word文档,向表格插入图片
上篇:[C#]C#使用Microsoft.Office.Interop.Word操作Word文档,替换文本 Word模板: 代码: try {Application app = new Applica ...
- 关于.net Microsoft.Office.Interop.Word组建操作word的问题,如何控制word表格单元格内部段落的样式。...
控制word表格单元格内部文字样式.我要将数据导出到word当中,对于word表格一个单元格中的一段文字,要设置不同的样式,比如第一行文字作为标题要居中,加粗,第二行为正常的正文. 代码如下 publ ...
- C#操作Office.word(三)
前面两篇博客讲解了怎么通过程序控制word的生成,包括生成文字.添加表格.添加图片等.这篇博客主要说一下怎么把word图片转换成pdf. using System; using System.Coll ...
最新文章
- poj2112 二分最大流+Floyd
- 【星球知识卡片】图像风格化与翻译都有哪些核心技术,如何对其长期深入学习...
- 登录日志怎么实现_【创新攻关】安全室构建异常登录行为检测审计模型
- java绘制_Java 绘制简单图形的问题
- PHP学习笔记十九【析构函数】
- idea 初始界面_IDEA 初始配置教程
- Consul实践之Consul常见应用场景及方案梳理(FAQ)
- python 人脸识别活体检测_基于Python+Keras+OpenCV实现实时人脸活体检测
- 【LA4728】Square(求凸包(多边形)直径----旋转卡壳)
- 计算机基础1.4习题答案,中职计算机应用基础习题集及答案~.doc
- GVF场下的B-Snake模型
- Python使用matplotlib绘制龟兔赛跑中兔子和乌龟的行走轨迹
- python创建excel并冻结首行
- 成功解决TypeError: only size-1 arrays can be converted to Python scalars
- 【人事】性格内向的人面试注意事项
- SQL Server配置管理器没有任何项目
- 嵌入式Linux入门-手把手教你初始化SDRAM(附代码)
- 虚拟机kali挂主机代理
- U8结账提示出纳系统结账后账务系统才可以结账处理方法
- 关于 Vue.js 的那些事儿
热门文章
- Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)15-28章
- 计算机运行断电 硬盘,电脑突然断电的坏处有哪些?你知道吗?
- 《概率论与数理统计》手写笔记
- ubuntu16.04安装GTX-960M nvidia-384驱动
- 简单聊聊消息队列的事务补偿机制
- 笔记本无线连接打印机
- c语言编程16个点阵跳动的心,Arduino点阵制作跳动的心
- 利用MATLAB绘制各种表白心形-跳动心形
- java指针乱跳_鼠标卡顿,指针乱跳,鼠标失灵的解决办法。 涨知识了
- Berzerk CodeForces - 787C (BFS)题解