VC操作word实例详解

合集下载

vc操作Word

vc操作Word

vc操作Word1、如何用VC将word表格中插入一行Tables tbs=doc.GetTables();Table tb;Rows rs;tb=tbs.Item(1);//取第一个表格rs=tb.GetRows();COleVariantcovOptional((long)DISP_E_PARAMNOTFOUNT,VT_ERRPR);//最主要是这句,实在太感谢了rs.Add(covOptional);//增加一行2、设置字体的样式和字体大小Range wordRange= wordDoc.Range(&varOptional, &varOptional);Selection wordSelec = wordApp.GetSelection();_Font oFont;_ParagraphFormat wordFormat;//////////////设置标题////////////////////////////////////////wordSelec.HomeKey(&varUnit, &varOptional);oFont = wordSelec.GetFont();oFont.SetSize(15);oFont.SetName("黑体");wordFormat = wordSelec.GetParagraphFormat();wordFormat.SetAlignment(1);wordSelec.InsertAfter("力学试验机实验报告");wordSelec.InsertParagraphAfter();wordSelec.EndKey(&varUnit, &varOptional);////////////标题设置完毕/////////////////////////////////////3、在word 中插入表格Range rng;Tables tabs;Table tab;Selection sSel;_Document sDoc;先获得word文档对象,然后就可以对其进行操作了rng =sSel.GetRange();tabs.Add(rng,3,9,vOne,vTwo);//绘制3行9列表格tabs = sDoc.GetTables();tab = tabs.Item(2);for(int i=0;i<9;i++)向表格的第一行的每一个格中添加数据{cel = tab.Cell(1,i+1);rng = cel.GetRange();rng.SetText("长度");}4、过以标签的方式向word写数据Documents oDocs;_Document oDoc;Windows oWindows;Window oWindow;COleVariant tem1,m_olevariant(short(1),VT_I2); COleVariant m_variant1,m_variant2;oWordApp.SetVisible(true);/*******************通过标签设置数据**********************/ Bookmarks bookmarks;Bookmark bookmark;Range range;m_pathname = "c:\\报告样式.doc";COleVariant dot(m_pathname);oDocs=oWordApp.GetDocuments();oWindows=oWordApp.GetWindows();oDoc=oDocs.Add(&dot,&vOpt,m_variant1,m_variant2);oWordApp.Activate();bookmarks=oDoc.GetBookmarks();oWindow=oWindows.Item(m_olevariant);//设置标题tem1.SetString("CompanyName",VT_BSTR);bookmark=bookmarks.Item(&tem1);range=bookmark.GetRange();oWindow.ScrollIntoView(range,&m_olevariant);//要滚动视图是用这句吗?range.SetText("中国四方利通");5、用vc将图片插入word的指定位置下代码,但它总是将图片插在文档的最开始,我在文档中设置了标签“test”,请问怎样将图片插入word中指定的位置?Selection oSel;oSel = oWordApp.GetSelection();InlineShapes shps;//插入图片到指定的位置shps=oSel.GetInlineShapes();shps.AddPicture("C:\\1.jpg",vFalse,vTrue,vOpt);你必须先获得插入位置的range对象,然后addpicture的最后一个参数用range对象替换,就可以了怎样取某doc文档里的第一段和最后一段的内容Paragraphs pg;pg.GetFirst();//取第一段pg.GetLast();。

VC_应用开发中如何对Word文档进行页面设置

VC_应用开发中如何对Word文档进行页面设置

可以试试对其他的格式进行设置。
(作者: 梁海珍 王华)
Delphi 下如何实现窗口在最小化恢复时进行身份验证
如果数据保密性高, 一般应用程序设有密码登录窗口, 在 进入系统前需要验证用户是否是授权用户。 当授权用户离开计算 机几分钟时间内, 如果不想让其他人员偷偷使用程序, 一种简 单的办法是退出应用程序, 等回来后再重新登录。 但是假设用 户正在进行数据录入工作, 而且已经录入一半数据, 这时退出 程序先前的工作就白干了。 那还有没有其他更简单的办法呢?
应用程序在正常启动运行后, Windows 会 自 动 在 任 务 栏 上 创建一个程序按钮, 方便用户在多个应用程序之间切换。 单击 程序按钮时, 如果程序的窗口处于显示状态, 窗口会自动隐藏 到任务栏中。 当再次单击程序按钮时, 隐藏的程序窗口又会自 动恢复到初始显示状态。 那能不能通过编程实现: 当程序窗口 从任务栏恢复前进行身份验证, 验证成功则恢复隐藏的窗口, 验证失败则继续隐藏程序窗口呢?
// 声明用到的 word 中的类对象
_Application Wordapp;
Documents WordDocs;
_Document WordDoc,DocActive;
PageSetup Pagesetup;
// 页面设置对象
(3) 在 IDD_MYPAGE_DIALOG 对 话 框 界 面 中 添 加 控 件 及
“宏” 的录制功能, 把所想宏代码, 虽然这些代码都是用 VB 写 的 , 但 可 以 清 楚 看
出要使用哪些类、 哪些成员函 数 。 每 一 个 Microsoft Office 应 用
程序都在 dll 文件中提供了多种类型库资源, 这种 dll 文件叫做

VC操作Word系列

VC操作Word系列

VC操作Word系列(一)近曰作一个小东西涉及到对汇总结果的打印,由于打印只在一台特定的机器进行所以考虑使用Word来实现,这样比较简单而且很专业。

开始的时候这个东西没有这项功能后来我闲的无聊看看是否可以实现(以前从来没有做过这方面的东西),于是乎搞了一下也不是很难,一点心得大家给指点一二,使用的是Office2000,工程类型是MFC 的对话框。

先看看需要使用到的东东:1.View->ClassWizard->Automation->Add Class From Library:定位到你安装Office的目录找到MSWord9.Olb 2.打开后把所有的类都选中倒入到你的工程(反正也是搞一回彻底一点:P) 3.在你的对话框头文件中加上#include"msword9.h" OK了准备工作搞定之后就可以玩儿转Word了,先来一个简单的void TestWord1(){Application app;COleVariant vTrue((short)TRUE), vFalse((short)FALSE);app.CreateDispatch(_T("Word.Application"));app.SetVisible(FALSE);//Create New DocDocuments docs=app.GetDocuments();CComVarianttpl(_T("")),Visble,DocType(0),NewTemplate(false);docs.Add(&tpl,&NewTemplate,&DocType,&Visble);//Add Content:TextSelection sel=app.GetSelection();sel.TypeText(_T("\t\t\t\t\t第一次玩儿Word\r\n")); sel.TypeText(_T("\t\t\t\t\t\t\t\t----------先来一个简单的\r\n"));sel.ReleaseDispatch();docs.ReleaseDispatch();app.SetVisible(TRUE);app.ReleaseDispatch();}f:\App\CtrlWord\CtrlWord.h(11): fatal error C1083: 无法打开包含文件:“MSWord9.h”: No such file or directory上面的错误已解决,在环境中,不需要加入msowrd9.h,而只要加入用到.h文件就可以了,例子中要加入#include "CApplication.h" //test#include "CDocuments.h" //test#include "CSelection.h" //testVC操作Word系列(二)大家都应该使用过Word提供的表格功能很是专业,如果在作一些数据库开发之类的软件对汇总的数据进行打印是常见的功能,这个如果用Word来实现个人感觉不错,废话少说说练咱就练。

VC 中操作word

VC 中操作word

VC 中操作word 第一步在函数InitInstance() 中加入如下代码1.如果是word 2003if ( CoInitialize(NULL) !=0 ){AfxMessageBox("初始化COM支持库失败");exit(1);}如下图如果是word 2007 ,加入如下代码:if(TRUE != AfxOleInit()){AfxMessageBox("初始化COM支持库失败");exit(1);}如下图第二步3.打开ClassWizard—Add Class—From a type library,选择本机word8.OLB文件(最好先查找一下该文件,word2000为Word9.0LB,office2007 为MSWORD.OLB 一般在安装目录Microsoft Office\Office12 下)。

选择Application、Documents、Document、Window、View 、Range、Bookmarks、Bookmark、Fields、FieId加入新类、头文件word.h、源文件word.cpp。

如下图经过以上的添加后,在系统的存放代码文件的目录下会多出两个文件msword.cpp msword.h。

同时在VC 环境下查看类会发现多出了刚才添加的word里面的一些类,如下图所示打开对应的头文件,在文件的头部添加:#include "comdef.h"#include <AtlBase.h>#include <windows.h>第三步设计模板,准备一个word的模板,即*.dot格式的word文件,可以用word自己创建一个。

在word中用户随意设计好报表的格式,并在相应需要程序修改的位置插入书签,书签用于将程序中想要输出变量的值带入模板中,模板中的书签名字一定要与程序中的一致,笔者建议将程序中变量的名字做为书签。

比较全的一个C#操作word文档示例

比较全的一个C#操作word文档示例

⽐较全的⼀个C#操作word⽂档⽰例最近两天研究了⼀下如何使⽤VS2008(C#语⾔)输出Word⽂档。

以下是⼏点总结:1、⾮常简单。

3、C#⼯程设置。

这⾥的⼯程设置,就是添加com组件。

步骤为:在⼯程资源管理器中"添加引⽤"->"com"选项卡->在下拉列表中选Microsoft word 11.0 Object Library。

ok了,看上去,跟添加⼀般的dll⼀样,但实际上vs2008在这个过程中完成⼀系列复杂的关于.net调⽤com组件的操作,不过,幸好我们不⽤管这个。

4、接下就是写代码了。

在这⾥,使⽤Word的com对像,跟使⽤⼀般的⾮com对像⼀样,⾮常流畅,好像根本就不管它什么com不com的。

为了使代码⽐较简洁,可以在源代码⽂件顶添加这样的⼀条语句:using Word = Microsoft.Office.Interop.Word;5、最好是对word对像模型有⼀定的了解,这样在写代码的时候就不会那么“迷茫”了。

wore对像模型中有⼏个⽐较重要的对像,它们是Application、Document、Selection、Range、Bookmark,以及其它的⼀些对像,如:Paragraph、Section、Table等级。

刚开始学的时候,感觉Selection、Range、Bookmark这⼏个对像有点迷惑⼈,Selection可能好理解,就是表⽰当前的选择区域,如果没有选择就表⽰光标所在位置。

Range和Bookmark,其实在很多地⽅很像,不过也有⼀些区别,在这⾥就不多说了,google⼀下"word.Range"就⾏了。

6、在写代码的过程中,经常会想要实现的⼀些操作,但是由于对word对像不熟悉⽽不知怎么⽤代码实现。

⽐如设置页眉、添加页码什么的,如果在Word 程序⾥⼿动的操作当然很简单,但是要⽤代码来实现,对初学者来说就可能不那么容易了。

(完整word版)VC++6.0运行简单C语言程序的过程

(完整word版)VC++6.0运行简单C语言程序的过程

简单C程序执行过程1打开VC6.02新建一个C源文件,选则File-New,出现新建对话框3在新建对话框选择Files下的c++Source File选项,然后在右边输入所要建立的C源文件名和保存的路径,比如文件名为:c0-1.c,保存路径为:D/cc如下图。

注意,文件扩展名一定是.c4点击OK后,一个C源文件就建好了,如下图5下面在C源文件中编写C程序,如下:6.编辑完后,保存这个源程序文件,接下来是执行这个C程序。

首先是编译,选择Build菜单下的compile c0-1.c项,或者直接点编译图标,然后会出现如下提示:下面提示含义是:编译需要为这个C程序建立一个项目工作空间,你是否要建立项目工作空间?每一个C程序都需要一个项目工作空间,如果你提前不建立,系统就会提示默认建立一个工作空间,这里点是,默认会建立工作空间。

7默认建立的工作空间名为C源文件名,这里是c0-1,如下图所示。

8.编译成功后,VC环境下方会显示是否有错误,如上图中提示0error,0warning,表示没有错误,接下来是连接,选择build-build c0-1.exe 或者直接按连接图标,连接成功后如下图:下方提示:c0-1.exe 0error,0warning,表示连接成功。

9最后是运行C程序,选择build-execute c0-1.exe,或直接按运行图片,运行成功后,出现结果显示界面,程序结果为输出一句话:this is a C program. 输出结果后面的press any key to continue 是系统自带提示,表示按任意键继续。

10,按任意键,回到VC主界面11,接下来可以继续编辑该程序,如不需要编辑则关闭该程序,选择File-Closeworkspace。

12 关闭该C程序后,我们可以从保存的路径中找到刚刚关闭掉的工作空间,比如我们刚刚保存在D/CC路径里,通过File-Openworkspace,在打开的打开对话框中选择D/CC目录如下图,此时就可以看到c0-1.dsw,如下图,这个就是刚刚系统默认建立的工作空间,而我们刚编辑的c0-1.c就包含在这个工作空间中。

VC中进行office编程的-操作word

VC中进行office编程的-操作word

VC中进行office编程的-操作word,可以设置文字的样式,新建表格,这里提供给大家一个类--CWzjWordOffice::CWzjOffice类,用来对WORD进行简单的操作。

正文大家先看一下CWzjWordOffice类怎么使用CWzjWordOffice wd; //定义一个操作word的对象wd.Create(); //创建一个word应用程序增加一个文档wd.SetFont(25,"魏碑",RGB(128, 0, 0)); //设置字体(字号,字体名,颜色)wd.SetFont(1,0,0); //设置字体为粗体,不是斜体,没有下划线wd.SetParaphformat(1); //设置文字为居中对齐wd.WriteText("软件工程成绩"); //写文字wd.m_wdSel.TypeParagraph(); //回车换行//设置表格字体wd.SetFont(9,"宋体");wd.SetFont(0,0,0);wd.CreateTable(2,4); //创建一个2行4列的表格wd.WriteCellText(1,1,"学号"); //往1行1列单元写“学号”wd.WriteCellText(1,2,"姓名"); //往1行2列单元写“姓名”wd.WriteCellText(1,3,"年龄"); //...wd.WriteCellText(1,4,"省份");wd.WriteCellText(2,1,"23020723");wd.WriteCellText(2,2,"汪自军");wd.WriteCellText(2,3,"25");wd.WriteCellText(2,4,"湖北");wd.ShowApp(); //显示word后面是效果图。

vc操作office

vc操作office

vc操作office下面是从CSDN上摘抄过来的,主要是今天调试VC操作Word2003的时候,网上下载的是操作Word 2000,但是参数已经有一些不同了。

下面的代码可以在2003中运行,记录在这里便于以后复习用。

感谢您使用微软产品。

对于您所提的问题,确实可以使用OLE Automation在VC++中对Word Object Model进行操作。

下面这篇知识库文章中给出了如何在VC_++中引入Office TypeLib,并通过程序启动MS Excel.参照这篇文章可以使您建立起程序的框架Q178749 HOWTO: Create Automation Project Using MFC and a Type Library /doc/b96834780.html,/support/kb/articles/q178/7/49.asp以下两篇知识库文章给出了具体的样例,如何操作Word和Excel. 您可以使用其中的方法来完成你自己的操作。

具体的对象模型的操作,您需要参见对应产品的VBA帮助文档。

Q178784 HOWTO: Use Automation to Open and Print a Word Document /doc/b96834780.html,/support/kb/articles/q178/7/84.aspQ179706 HOWTO: Use MFC to Automate Excel and Create/Format a New Workboo/doc/b96834780.html,/support/kb/art icles/q179/7/06.asp这两篇是介绍一些基础的知识以及Office 产品在Automation 上的一些支持以及常见问题。

您可以用作参考。

Q238972 INFO: Using Visual C++ to Automate Office/doc/b96834780.html,/support/kb/articles/q238/9/72.aspQ196776 FAQ: Office Automation Using Visual C++/doc/b96834780.html,/support/kb/art icles/q196/7/76.asp此外,我在以下列出了Q178784中的样例代码,并添加了一些中文注释。

如何用VC在Word中添加、操作表格

如何用VC在Word中添加、操作表格

,VC在WORD中加入文本数据;进行word写的VBA宏代码VC++会自动地在WordAutomation.cpp中的CWordAutomationApp::InitInstance()中生成如下的代码,使得COM的服务能有效。

if (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}// TODO: Add your command handler code hereCOleVariant vTrue((short)TRUE),vFalse((short)FALSE),vTmp,vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//创建Word实例_Application oWordApp;if (!oWordApp.CreateDispatch("Word.Application", NULL)){AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);return;}Range Rng;Table Tbl;Tables Tbls;//创建一个新的word文档Documents oDocs;_Document oDoc;oDocs = oWordApp.GetDocuments();oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);//如果是word 98,则应该带两个参数,如oDocs.Add(vOpt, vOpt)//把文本添加到word文档Selection oSel;oSel = oWordApp.GetSelection();oSel.TypeText("one");oSel.TypeParagraph();oSel.TypeText("two");oSel.TypeParagraph();oSel.TypeText("three");//保存word文档_Document oActiveDoc;oActiveDoc = oWordApp.GetActiveDocument();oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"),COleVariant((short)0),vFalse, COleVariant(""), vTrue, COleVariant(""),vFalse, vFalse, vFalse, vFalse, vFalse,vFalse,vFalse,vFalse,vFalse,vFalse);//退出word应用程序//oWordApp.Quit(vOpt, vOpt, vOpt);二,用VC在WORD中加入表格;COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vTmp,vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//创建Word实例_Application WrdApp;if (!WrdApp.CreateDispatch("Word.Application", NULL)){AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);return;}Documents Docs;_Document Doc;Range Rng;Table Tbl;Tables Tbls;//创建新文档Docs = WrdApp.GetDocuments();Doc = Docs.Add(vOpt, vOpt, vOpt, vOpt);Rng=Doc.GetContent();//{{Tbls=Doc.GetTables(); 必须给这个变量初始化//}}Tbls.Add(Rng,5,5,vOpt,vOpt);/。

vc操作word

vc操作word
DISPID dispid_TypePara; //TypeParagraph method of Selection object
DISPID dispid_ActiveDoc; //ActiveDocument property of Application
//obj
NULL, NULL);
pDispDocs = vResult.pdispVal;
// Invoke the Add method on the Documents collection object
// to create a new document in Word
SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,
0, NULL);
::MessageBox(NULL, (LPCTSTR)lpMsgBuf, "COM Error",
//object
DISPID dispid_Sel; //Selection property of Applicaiton object
DISPID dispid_TypeText; //TypeText method of Selection object
hr = pDispDocs->Invoke(dispid_DocsAdd, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD, &dpNoArgs, &vResult, NULL,
NULL);
LOCALE_USER_DEFAULT, &dispid_Docs);
hr = pDispApp->Invoke (dispid_Docs, IID_NULL, LOCALE_USER_DEFAULT,

VC和CB中操作word方法——Word自动化

VC和CB中操作word方法——Word自动化

VC和CB中操作word方法——Word自动化By comor 摘要:本文简述了实现Word自动化的一般方法,并讨论了在两种开发环境中实现Word自动化的方法。

关键词:COM技术Word自动化本文讨论使用VC++6.0和C++ Builder6.0自动报表生成的探讨。

自动报表属于Office自动化中的技术。

自动化(以前称为OLE(Object Linking and Embedding,对象链接与嵌入))是一种允许您利用现有程序的功能并将其合并到您自己的应用程序中的技术,自动化是建立在的COM(Component Object Model,组件对象模型)技术基础上。

本文首先讨论Office自动化的一般步骤,以Word2003为例,再讨论在VC++ 6.0和C++ Builder6.0中的实现。

1 Word自动化COM技术是将一种功能性的插件做到语言无关、平台无关,程序之间可以互相调用、互相通信的一种技术。

在具有Office自动化功能的程序中对Office文件操作,如同在Word文档中添加一个Viso 图标,在Word中双击这个图标便可以直接使用Viso进行编辑。

使用COM技术进行Word操作,就是通过开发的程序调用Word的类型库,使用库中提供的各种操作完成对Word程序和文档的各种操作,如同在使用Word程序本身操作一样。

在进行程序开发时,首先要将对应的库文件加入工程中。

不同的版本的Office对应不同的库文件,对照如下:Word2003对应的类型库文件为MSWord.olb,在自动化开发前首先要将这个库文件添加进工程。

2 VC++ 6.0中的实现以基于对话框的MFC工程为例。

2.1 初始化新建一个基于对话框的MFC工程,在新建过程中如果勾选“Automation”将自动进行初始化,不勾选的话可以手动添加初始化。

这是在cpp文件中InitInstanse()自动的初始化:// Initialize OLE librariesif (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}不勾选的话,可以在Word操作代码执行前进行初始化,例如可以在*Dlg.cpp中OnInitDialog()中手动初始化:if (!AfxOleInit()){AfxMessageBox(“OLE初始化失败!”);return FALSE;}接着,将Word类型库添加进工程。

vc调用word

vc调用word

(1)使用AppWizard创建一个新的MFC AppWizard(EXE)工程,命名为"office"(2)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持,并且选中active document container 其它都为默认(3)在View菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 在Office目录中选中Microsoft Word 97/2000 类型库Word8.olb或Word9.olb,选中application,document,_document。

单击ok(4)给COfficeCntrItem添加一方法。

GetIDispatch()其源码如下:ASSERT_VALID(this);ASSERT(m_lpObject != NULL);LPUNKNOWN lpUnk = m_lpObject;Run();LPOLELINK lpOleLink = NULL;if (m_lpObject->QueryInterface(IID_IOleLink, (LPVOID FAR*)&lpOleLink) == NOERROR){ASSERT(lpOleLink != NULL);lpUnk = NULL;if (lpOleLink->GetBoundSource(&lpUnk) != NOERROR){TRACE0("Warning: Link is not connected! ");lpOleLink->Release();return NULL;}ASSERT(lpUnk != NULL);}LPDISPATCH lpDispatch = NULL;if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&lpDispatch)!=NOERROR){TRACE0("Warning: does not support IDispatch! ");return NULL;}ASSERT(lpDispatch != NULL);return lpDispatch;(5)。

C_操作Word代码实例

C_操作Word代码实例

C#操作word我们都知道,Office 是基于COM 组件技术开发的,属于非托管程序,然而C# 使用的都是托管程序,那么如何使用非托管的COM 组件就是我们操作WORD 的第一个问题。

所幸的是, .NET FRAMEWORK 提供了一种不同种类类库的转换工具tlbimp,exe ,通过这个转换工具,我们可以把COM 组件转化为 .NET FRAMEWORK 可以直接调用的DLL 文件。

接下来就是转化工作了,Office 组件都可以在C:Program FilesMicrosoft Office 目录下找到,当然安装的Office 版本不同,子目录是不一样的。

笔者使用的是Office 2007 ,可以在C:Program FilesMicrosoft OfficeOffice12 目录下找到MSWORD.OLB ,这个是WORD 组件的类库文件,还可以找到MSACC.OLB 操作ACCESS ,MSPPT.OLB 操作PPT ,XL5CHS32.OLB 操作EXCEL 。

载入不同的组件就可以完成对不同Office 组件的操作。

使用tlbimp,exe 工具转化MSWORD.OLB 文件后可以得到三个DLL 文件,Office ,dll ,Visual BasicIDE.dll ,Word .dll 。

最后在编译文件的时候,记得将这三个DLL 文件载入,命令如下:csc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:office .dll /r:vbide.dll /r:word .dll word .cs笔者使用Visual 2005 编译环境,通过IDE 提供的功能可以大大简化我们对组件转化的工作,并且在编译时也不需要输入那么繁杂的语句,非常方便了。

下面介绍一下IDE 载入Office 组件的方式。

在菜单栏选择“项目”-“添加引用”,弹出的窗口中我们可以选择“ COM ”选项卡,找到Microsoft Office 12.0 Object Library (Office 2003/2007 需要使用12.0 版的,如果你使用的是Office 2000 或者更低的版本,只要载入10.0 版的就可以了),确定后引入. 也可以在“浏览”选项卡下找到我们上面提到的MSWORD.OLB 文件,引入即可。

VC操纵WORD文档详解

VC操纵WORD文档详解

1.打开VC2.单击File->New3. 在Projects标签下选择MFC AppWizard(exe),在右边Project name中填好项目名称:VcToWord,单击OK4.在MFC AppWizard – Step 1中,选中单选框Dialog based,单击Finish5.在New Project Information对话框中单击OK6.删除VcToWord对话框上多余按钮和文本,添加一个按钮,ID改为IDC_GEN_WORD,Caption改为“生成WORD”7.双击该按钮,弹出以下对话框,单击OK8.得到以下代码9.按下快捷键Ctrl+W,弹出MFC ClassWizard对话框,单击Add Class…,选择From a type library…,弹出Import from Type Library对话框,找到你OFFICE软件的安装文件夹(默认是在C盘的Program Files中),在其中找到MSWORD.OLB,单击打开10.在Confirm Classes中按下Ctrl键选中_Application,Documents,_Document,InlineShapes 和Selection,单击OK11.再次单击MFC ClassWizard对话框中的OK,可以看到多了以下几个类12.在VcToWord.cpp的头部添加#include "msword.h"13.在VcToWordDlg.cpp的头部添加#include "msword.h"14.在CvcToWordApp类在InitInstance函数里添加以下几行代码15.由于IDP_OLE_INIT_FAILED未定义,故需在Resource.h中定义如下16.回到OnGenWord函数,在其中添加如下代码17.记得将本文件夹下的csdn.bmp图片复制到C盘的根目录中17.编译链接运行程序,单击“生成WORD”,在C盘根目录中得到VcToWord.doc18.打开VcToWord.doc完毕!!!。

在VC中使用Automation操纵Word和Excel

在VC中使用Automation操纵Word和Excel

在VC中使用Automation操纵Word和Excel在VC中使用Automation操纵Word和Excel最近要在程序中添加一个将程序中的图片和数据输出到Word的功能并且需要将数据导出到Excel,以前从来没弄过,遂首先祭起在CSDN的VC/MFC论坛搜索的法宝。

输入关键字Word得到n篇帖子,一一看过之后得知有两种方法可以做我所需要的事情,一种是使用Office自带的类型库的方法,另一种是直接使用COM的Automation技术。

两种方法比较之后,由于使用类型库所需要导入的类太多,并且对于不同的Office版本的兼容性问题不好掌握,因此在我的程序中使用了COM的Automation技术进行操作。

方法决定了,接下来是具体的编码咯。

先来实现将数据导出到Word,参考MSDN中的Q238393得到了一个AutoWrap函数,这是最有用的。

然后参考Q220911得到了对Word的操作的方法,如画表格、输入文字、分行等,但是Q220911中提供的是使用类型库的方法(其实二者是大同小异,如果你跟踪进入到MSWord.h里面去的话,你会发现MSWord.h里面使用的就是Automation的Invoke函数来调用各个属性或者方法的分发ID来实现功能的,不过是封装了起来而已),因此打开VC自带的工具OLEViewer和Office自带的VBA中文帮助,并且还用到了MSDN 中的Q216388提供的B2CSE.exe来将VBA转化到C++代码。

经过几个工作日的努力终于达到了我所要求的效果。

再来实现将数据导出到Excel的功能,这个要求比较简单。

基本方法同上,也是使用了AutoWrap。

对Excel的操作参考了Q216686,使用SafeArray来对Excel进行填充。

很快也就达到了要求。

总结完了,不知大家能从这篇文章中得到什么呢?。

VC对Office进行操作

VC对Office进行操作

用VC对Office进行操作的介绍已经不少了,但是从来没有把word,excel,powerPoint进进全面的介绍的。

由于工作的需要,我需要对在自己的软件中对word,excel,powerPoint进行操作。

所以把自己的体会写出来和大家分享,希望对大家有所帮助。

当然还有很多不当之处,希望大家指出。

用例子来说明吧,首先创建一个MFC AppWizard(EXE)工程,然后通过在VIEW菜单中,选C lassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 选中Microsoft Office 2 000 类型库:Excel9.olb,MSPPT9.OLB,MSWORD9.OLB(在Microsoft Office\Office目录下) 会将类型库中的所有类添加到你的工程中。

然后写一个类来操作Office吧!ObtGuiGcomOfficePrinter.h#if !defined(AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__ INCLUDED_)#defineAFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__INCLUDED _#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "comdef.h"#include "ObtGuiGcomMsWord9.h"#include "ObtGuiGcomMsPpt9.h"#include "ObtGuiGcomExcel9.h"class AFX_EXT_CLASS ObtGuiGcomOfficePrinter{public:ObtGuiGcomOfficePrinter();virtual ~ObtGuiGcomOfficePrinter();//Operatorpublic:BOOL WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);BOOL ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);BOOL PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);};#include "stdafx.h"#include "ObtGuiGcomOfficePrinter.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////ObtGuiGcomOfficePrinter::ObtGuiGcomOfficePrinter(){}ObtGuiGcomOfficePrinter::~ObtGuiGcomOfficePrinter(){}BOOL ObtGuiGcomOfficePrinter::PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter){_PptApplication m_powerpointApp;Presentations m_powerpointPres;_Presentation m_powerpointPre;m_powerpointPres.ReleaseDispatch();m_powerpointPre.ReleaseDispatch();if(!m_powerpointApp.CreateDispatch("PowerPoint.Application")){AfxMessageBox("创建PowerPoint服务失败!");return FALSE;}m_powerpointApp.m_bAutoRelease=true;m_powerpointApp.SetVisible(TRUE);//对于PowerPoint必须设置为TRUEm_powerpointPres.AttachDispatch(m_powerpointApp.GetPresentations());m_powerpointPres.Open(lpszFileName,-1,-1,-1);m_powerpointPre.AttachDispatch(m_powerpointApp.GetActivePresentation(),TRUE);m_powerpointPre.PrintOut(-1,-1,"",long(1),-1);m_powerpointApp.Quit();m_powerpointPre.ReleaseDispatch();m_powerpointPres.ReleaseDispatch();m_powerpointApp.ReleaseDispatch();return TRUE;}BOOL ObtGuiGcomOfficePrinter::ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter) {_ExcelApplication m_excelApp;//定义Excel提供的应用程序对象Workbooks m_excelBooks;_Workbook m_excelBook;m_excelBooks.ReleaseDispatch();m_excelBook.ReleaseDispatch();m_excelApp.m_bAutoRelease=true;//创建Excel 2000服务器(启动Excel)if (!m_excelApp.CreateDispatch("Excel.Application")){AfxMessageBox("创建Excel服务失败!");return FALSE;}m_excelApp.SetVisible(FALSE); //设置为隐藏//利用模板文件建立新文档m_excelBooks.AttachDispatch(m_excelApp.GetWorkbooks(),true);m_excelBook.AttachDispatch(m_excelBooks.Add(_variant_t(lpszFileName)));//m_excelApp.SetActivePrinter(lpszActivePrinter); //设置当前打印机COleVariant covTrue((short)TRUE), covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//定义打印机并打印m_excelBook.PrintOut(covOptional,covOptional,COleVariant(long(1)),covFalse,covOptional,covOptional,covOpt ional,covOptional);m_excelApp.Quit();//退出m_excelBook.ReleaseDispatch();m_excelBooks.ReleaseDispatch();m_excelApp.ReleaseDispatch();return TRUE;}BOOL ObtGuiGcomOfficePrinter::WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter) {_WordApplication m_wordApp;//定义Word提供的应用程序对象Documents m_wordDocs;//定义Word提供的文档对象_Document m_wordDoc; //当前的的文档对象m_wordDocs.ReleaseDispatch();m_wordDoc.ReleaseDispatch();m_wordApp.m_bAutoRelease=true;if(!m_wordApp.CreateDispatch("Word.Application")) //创建Word应用服务{AfxMessageBox("创建Word应用服务失败!");return FALSE;}m_wordApp.SetVisible(FALSE); //设置为隐藏//下面是打开文件定义VARIANT变量;COleVariant varFilePath(lpszFileName);COleVariant varstrNull("");COleVariant varZero((short)0);COleVariant varTrue(short(1),VT_BOOL);COleVariant varFalse(short(0),VT_BOOL);m_wordDocs.AttachDispatch(m_wordApp.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来;m_wordDocs.Open(varFilePath,varFalse,varFalse,varFalse,varstrNull,varstrNull,varFalse,varstrNull,varstrNull,varTrue,varTrue,varTrue);m_wordDoc.AttachDispatch(m_wordApp.GetActiveDocument()); //得到当前激活的Document对象m_wordApp.SetActivePrinter(lpszActivePrinter); //设置当前打印机COleVariant covTrue((short)TRUE), covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //定义打印属性m_wordDoc.PrintOut(covFalse,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,COleVariant((long)1),covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);m_wordApp.Quit(covOptional,covOptional,covOptional);//退出m_wordDoc.ReleaseDispatch(); //断开关联;m_wordDocs.ReleaseDispatch();m_wordApp.ReleaseDispatch();return TRUE;}以上是用Office打开相应的文档进行打印的操作,如果你需要进行相应的其他操作,你可以用Office里面的宏进行录制然后转化为相应的代码。

VC操作word实例详解

VC操作word实例详解

VC操作word实例详解我们操纵Word需要通过类型库中的MFC类。

而这些类,应该都是基于一个叫COleDispatchDriver的类。

至少我所了解到的都是这样。

COleDispatchDriver没有基类。

COleDispatchDriver类实现OLE自动化中的客户方。

OLE调度接口为访问一个对象的方法和属性提供了途径。

COleDispatchDriver的成员函数连接,分离,创建和释放一个IDispatch类型的调度连接。

其它的成员函数使用变量参数列表来简化调用IDispatch::Invoke。

学习如何自动化控制 Word、Excel 和 Powerpoint 的对象模型的最佳方法是使用这些 Office 应用程序中的宏录制器:从工具菜单上的宏选项中选择录制新宏,然后执行您感兴趣的任务。

从工具菜单上的宏选项中选择停止录制。

完成录制后,从工具菜单上的宏选项中选择宏,选择您录制的宏,然后单击编辑。

您将看到生成的 VBA 代码,该代码可完成您所录制的任务。

记住,录制的宏在大多数情况下并不是最佳代码,但它可以提供快捷可用的示例。

Application:代表 Microsoft Word 应用程序。

Application 对象包含可返回最高级对象的属性和方法。

例如,ActiveDocument 属性可返回当前活动的Document 对象。

Documents:由Word 当前打开的所有Document(文档)对象所组成的集合。

Document:代表一篇文档。

Document 对象是Documents 集合中的一个元素。

Documents 集合包含Word 当前打开的所有Document 对象。

Selection:该对象代表窗口或窗格中的当前所选内容。

所选内容代表文档中被选定(或突出显示的)的区域,若文档中没有所选内容,则代表插入点。

每个文档窗格只能有一个活动的Selection 对象,并且整个应用程序中只能有一个活动的 Selection 对象。

VC++2010操作Word2010

VC++2010操作Word2010

环境:win7+vs2010+office2010/20131、创建MFC工程,非Unicode。

2、添加Word的类库添加所有的接口,可以作为一个文件夹,以后再使用只要加入该文件夹就可以了。

由于函数命名冲突,需要在生成的头文件中做相应处理,即://#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace #import"C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace\ raw_interfaces_only \rename("FindText", "_FindText") \rename("Rectangle", "_Rectangle") \rename("ExitWindows", "_ExitWindows")对于不同版本的office,其默认的类型库位置如下表所示:特别的,word2013在vc2010下必须手动指定类型库文件位置。

3、在stdafx中添加调用的头文件#include"Word2010/CApplication.h"// word程序对象#include"Word2010/CDocuments.h"// 文档集对象#include"Word2010/CDocument0.h"// 单个docx对象#include"Word2010/CSelection.h"// 该对象代表窗口或窗格中的当前所选内容,使用率最高#include"Word2010/CCell.h"// 表格单元格#include"Word2010/CCells.h"// 表格单元格集合#include"Word2010/CRange.h"// 该对象代表文档中的一个连续范围#include"Word2010/CTable0.h"// 单个表格#include"Word2010/CTables0.h"// 表格集合#include"Word2010/CFont0.h"// 字体#include"Word2010/CParagraphs.h"// 段落集合#include"Word2010/CParagraphFormat.h"// 段落样式#include"Word2010/CParagraph.h"// 单个段落#include"Word2010/CnlineShape.h"// Inline图形对象集合#include"Word2010/CnlineShapes.h"// 单个Inline图像对象#include"Word2010/CRow.h"// 单个行#include"Word2010/CRows.h"// 行集合#include"Word2010/CFields.h"#include"Word2010/CPane0.h"// 页眉等设置#include"Word2010/CWindow0.h"// 页眉等设置#include"Word2010/CView0.h"// 页眉等设置#include"Word2010/CPageSetup.h"// 页面设置4、注销每个引入的头文件的import行//#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace不过如果使用wdMove等参数的话,只需要在CApplication.h文件中改为://#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace#import"C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace\ raw_interfaces_only \rename("FindText", "_FindText") \rename("Rectangle", "_Rectangle") \rename("ExitWindows", "_ExitWindows")否则,如果没有上面一段,则报错提示为(即全部头文件都注销import的情况下):但是上述的方法会带来一个问题,就是当word版本改变时会出现问题,解决办法就是上述报错的变量都用其数值代替就不会有问题了(写代码时可以加上用以查看wdMove等变量的值),如下面一些:wdAlignParagraphLeft = 0wdAlignParagraphCenter = 1wdAlignParagraphRight = 2wdAlignParagraphJustify = 3wdParagraph = 4wdMove = 0wdStyleHeading1 = -2wdStory = 6页面纵向wdOrientPortrait=0页面横向wdOrientLandscape=1enum WdUnits{wdCharacter = 1, // 字母wdWord = 2, // 单词wdSentence = 3, // 句子wdParagraph = 4, // 段落wdLine = 5, // 行wdStory = 6, // 所选区域wdScreen = 7, // 当前屏幕wdSection = 8, // 部分wdColumn = 9, // 列wdRow = 10, // 行wdWindow = 11, // 窗口wdCell = 12, // 单元格wdCharacterFormatting = 13, // 字体格式wdParagraphFormatting = 14, // 段落格式wdTable = 15, // 表格wdItem = 16 // 项目};具体可以参考手册或者通过VBA代码查看。

VC++操作OfficeWord中Saveas()函数应用说明

VC++操作OfficeWord中Saveas()函数应用说明

VC++操作OfficeWord中Saveas()函数应用说明在VC++操作word中经常用到_Document下的saveas(),但是其包含的参数个数缺老有问题,在某些版本11个可以运行,有些12个,有些需要16个。

由于小弟初学,只搞了16个参数的,所以在此举例说明:void _Document::SaveAs (VARIANT* FileName,VARIANT* FileFormat,VARIANT* LockComments,VARIANT* Password,VARIANT* AddT oRecentFiles,VARIANT* WritePassword,VARIANT* ReadOnlyRecommended,VARIANT* EmbedTrueTypeFonts,VARIANT* SaveNativePictureFormat,VARIANT* SaveFormsData,VARIANT* SaveAsAOCELetter,VARIANT* Encoding,VARIANT* InsertLineBreaks,VARIANT* AllowSubstitutions,VARIANT* LineEnding,VARIANT* AddBiDiMarks)具体参数说明设置如下:FileName文档的名称。

默认值是当前文件夹名和文件名。

如果文档在以前没有保存过,则使用默认名称(例如,Doc1.doc)。

如果已经存在具有指定文件名的文档,则会在不先提示用户的情况下改写文档。

FileFormat文档的保存格式。

可以是任何 WdSaveFormat 值。

要以另一种格式保存文档,请为 SaveFormat 属性指定适当的值。

LockComments如果为 true,则锁定文档以进行注释。

默认值为 false。

Password用来打开文档的密码字符串。

(请参见下面的备注。

)AddToRecentFiles如果为true,则将该文档添加到“文件”菜单上最近使用的文件列表中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC操作word实例详解[转]我们操纵Word需要通过类型库中的MFC类。

而这些类,应该都是基于一个叫COleDispatchDriv er的类。

至少我所了解到的都是这样。

COleDispatchDriv er没有基类。

COleDispatchDriv er类实现OLE自动化中的客户方。

OLE调度接口为访问一个对象的方法和属性提供了途径。

COleDispatchDriv er的成员函数连接,分离,创建和释放一个IDispatch类型的调度连接。

其它的成员函数使用变量参数列表来简化调用IDispatch::Inv oke。

学习如何自动化控制Word、Excel 和Powerpoint 的对象模型的最佳方法是使用这些Off ice 应用程序中的宏录制器:从工具菜单上的宏选项中选择录制新宏,然后执行您感兴趣的任务。

从工具菜单上的宏选项中选择停止录制。

完成录制后,从工具菜单上的宏选项中选择宏,选择您录制的宏,然后单击编辑。

您将看到生成的VBA 代码,该代码可完成您所录制的任务。

记住,录制的宏在大多数情况下并不是最佳代码,但它可以提供快捷可用的示例。

Application:代表Microsof t Word 应用程序。

Application 对象包含可返回最高级对象的属性和方法。

例如,Activ eDocument 属性可返回当前活动的Document 对象。

Documents:由Word 当前打开的所有Document(文档)对象所组成的集合。

Document:代表一篇文档。

Document 对象是Documents 集合中的一个元素。

Documents 集合包含Word 当前打开的所有Document 对象。

Selection:该对象代表窗口或窗格中的当前所选内容。

所选内容代表文档中被选定(或突出显示的)的区域,若文档中没有所选内容,则代表插入点。

每个文档窗格只能有一个活动的Selection 对象,并且整个应用程序中只能有一个活动的Selection 对象。

例子1:#include "msword9.h" //为了使代码集中,方便阅读,所以把头文件放到了这里v oid CStep1Dlg::OnOK(){_Application app; //定义一个WORD的应用对象if(!app.CreateDispatch(_T("Word.Application"))) //启动WORD{AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));return;}AfxMessageBox(_T("WORD 已经运行启动啦,你可以用Ctrl+Alt+Del查看"));app.SetVisible(TRUE); //设置WORD可见。

//当然,如果你想要悄悄地调用WORD的功能,则注释掉这条语句AfxMessageBox(_T("现在你已经看到WORD的程序界面了吧"));AfxMessageBox(_T("WORD准备要退出啦"));VARIANT Sav eChanges,OriginalFormat,RouteDocument; //定义调用QUIT时使用的参数Sav eChanges.v t=VT_BOOL; //设置退出WORD时候的保存参数Sav eChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置::VariantInit(&OriginalFormat); //清空变量RouteDocument.vt=VT_EMPTY; //清空变量的另一种方法//调用Quit退出WORD应用程序。

当然不调用也可以,那样的话WORD还在运行着那app.Quit(&Sav eChanges,&OriginalFormat,&RouteDocument);app.ReleaseDispatch(); //释放对象指针。

切记,必须调用AfxMessageBox(_T("Step1执行完成。

接着请学习Setp2"));}例子2:#include "msword9.h"#include <AtlBase.h> //新增加了一个头文件,为使用CComVariant替代VARIANT做准备v oid CStep2Dlg::OnOK(){//以下3行代码,同Step1。

就不解释啦_Application app;//为了简单,没有判断返回值。

如果没有成功,记得检查你有没有Af xOleInit()呀?app.CreateDispatch(_T("Word.Application"));app.SetVisible(TRUE);AfxMessageBox(_T("WORD已经启动,现在要退出啦"));AfxMessageBox(_T("怎么和Step1没有什么区别呀?"));AfxMessageBox(_T("嘿嘿,是没什么区别,但是使用方式简单了很多呀。

看看源程序吧"));//准备调用_Application::Quit函数了,需要定义3个参数。

//但是,这次我们使用CComVariant,这是一个模板类。

//在定义的时候直接调用带参数的构造函数,比VARIANT使用简单多了吧CComVariant Sav eChanges(f alse),OriginalFormat,RouteDocument;//使用CComVariant 的不带参数的构造函数,默认就是使用VT_EMPTY,设置为空类型//另外,除了CComVariant,你还可以使用COleVariant和_v ariant_t,但我个人最喜欢前者app.Quit(&Sav eChanges,&OriginalFormat,&RouteDocument);app.ReleaseDispatch();AfxMessageBox(_T("下面该学习Setp3了"));}例子3:#include "msword9.h"#include <AtlBase.h>v oid CStep3Dlg::OnOK(){////////////// 这次,我们要控制在WORD中输入一些字符了//////////////////////************* WORD 录制的宏,新建一个空文档,然后输入一些文字************ Documents.Add Template:= _"C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates\Normal.dot" _ , NewTemplate:=False, DocumentTy pe:=0Selection.Ty peText Text:="HELLO"Selection.Ty peParagraphSelection.Ty peText Text:="大家好"***************************************************************************/_Application app;app.CreateDispatch(_T("Word.Application"));app.SetVisible(TRUE);AfxMessageBox(_T("看好了,就要新建一个空白文档了"));//通过WORD宏可以知道,由于要使用Documents,于是我们定义一个并从app中取得Documents docs=app.GetDocuments();//准备调用Documents::Add函数了,需要定义4个参数。

//从WORD宏可以看出来3个参数的类型为://Template字符,NewTemplate布尔,Document Ty pe数值//但Add函数还需要一个参数是Visible,傻子也能看出来这个值表示是否显示出新文档//并且可以给默认值(VT_EMPTY)CComVariant Template(_T("")); //为了简单,没有使用WORD的文档模板CComVariant NewTemplate(f alse),DocumentTy pe(0),Visible;docs.Add(&Template,&NewTemplate,&DocumentTy pe,&Visible);AfxMessageBox(_T("下面,程序要向WORD发送字符啦"));//通过WORD宏可以知道,由于要使用Selection,于是我们定义一个并从app中取得//Selection表示输入点,即光标闪烁的那个地方Selection sel=app.GetSelection();//调用函数Selection::Ty peText 向WORD发送字符sel.Ty peText(_T("HELLO\r\n大家好呀"));AfxMessageBox(_T("看见了吗?我要退出啦"));sel.ReleaseDispatch(); //Selection 不用了,一定要释放docs.ReleaseDispatch(); //Documents 也不用了CComVariant Sav eChanges(f alse),OriginalFormat,RouteDocument;app.Quit(&Sav eChanges,&OriginalFormat,&RouteDocument);app.ReleaseDispatch();AfxMessageBox(_T("下面该学习Setp4了"));}例子4:#include "msword9.h"#include <AtlBase.h>v oid CStep4Dlg::OnOK(){_Application app;app.CreateDispatch(_T("Word.Application"));app.SetVisible(TRUE);Documents docs=app.GetDocuments();CComVariant Template(_T(""));CComVariant NewTemplate(f alse),DocumentTy pe(0),Visible;docs.Add(&Template,&NewTemplate,&DocumentTy pe,&Visible);Selection sel=app.GetSelection();COleVariant v arstrRange("");COleVariant v arConf irmConv ersions(short(0),VT_BOOL);COleVariant v arLink(short(0),VT_BOOL);COleVariant v arAttachment(short(0),VT_BOOL);sel.InsertFile("C:\\M y Project\\WordOperator\\doc\\fjjb.doc",v arstrRange,v arConf irmConv ersions,v arLink,varAttachment);sel.Mov eUp(COleVariant((short)5),COleVariant((short)2),COleVariant((short)0));sel.Ty peText("123456789 ");sel.Mov eRight(COleVariant((short)12),COleVariant((short)1),COleVariant((short)0));sel.Ty peText(_T("HELLO"));sel.Mov eRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));sel.Ty peText("123456789");AfxMessageBox(_T("好了,我要保存到c:\\hello.doc中了"));/**************** 这是在WORD中录制的新建文档直到另存的宏*************Documents.Add Template:= _"C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates\Normal.dot" _, NewTemplate:=False, DocumentTy pe:=0Selection.Ty peText Text:="Hello"Selection.Ty peParagraphSelection.Ty peText Text:="大家好"ChangeFileOpenDirectory "C:\"Activ eDocument.Sav eAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _, LockComments:=False, Password:="", AddToRecentFiles:=True, _WritePassword:="", ReadOnly Recommended:=False, EmbedTrueTy peFonts:=False, _Sav eNativ ePictureFormat:=False, Sav eFormsData:=False, Sav eAsAOCELetter:= _ False*********************************************************************//**************** 程序思路******************************************另存为的函数是Activ eDocument.Sav eAs,显然表示的是对当前活跃的文档进行保存,在我们的类中没有Activ eDocument,其实它对应的是_Document,而这个可以由_Application 的GetActiv eDocument()得到。

相关文档
最新文档