我想用VC实现打印功能,而且打印时可以不vc 退出机制打印预览状态,就像word一样,怎么做?

当前位置:
VC++中调用word进行word表格的填写
VC++中调用word进行word表格的填写
发布日期: 11:28
浏览次数:14774次
标  签:COM
文章评分:5.0
操  作:
称号:未设置简介:...
文章概要:
在实际应用中,编程者往往喜欢程序能自动生成word说明文档,说明程序运行的状况或运行的结果;或者程序能提取数据库的内容生成word表格,使用户能方便的查看和修改,打印。但是VC++中调用word的确不容易,特别是对word中各种函数的使用,本文以作者的工作经验详细介绍一下如何调用word和进行word表格的填写,有同样需求的编友也可查看一下MSDN中的Automation Microsoft Office 97 and Microsoft office 2000。下面介绍以Microsoft Office 2000 Word为例。
在实际应用中,编程者往往喜欢程序能自动生成word说明文档,说明程序运行的状况或运行的结果;或者程序能提取数据库的内容生成word表格,使用户能方便的查看和修改,打印。但是VC++中调用word的确不容易,特别是对word中各种函数的使用,本文以作者的工作经验详细介绍一下如何调用word和进行word表格的填写,有同样需求的编友也可查看一下MSDN中的Automation Microsoft Office 97 and Microsoft office 2000。下面介绍以Microsoft Office 2000 Word为例。
  一个类型库是一个提供COM对象功能信息的文件或文件的一部分,而且类型库包含了有关类的信息。注意,类型库并不存储实际的对象,而只是存储有关这些对象的信息。类型库详细说明了一个自动化客户机为对象需要调用的方法和属性的信息,比如说它详细的描述了接受或返回的值。
  每一个Microsoft Office应用程序都在一个dll文件中提供了多种类型库资源,这种dll文件叫做目标库(*.olb)。下面的表列出了Microsoft Office 97和Microsoft office 2000类型库文件的名字。
Application Version 97 (or 8.0) Version 2000 (or 9.0)
Microsoft Access
Msacc8.olb
Msacc9.olb
Microsoft Excel
Excel8.olb
Excel9.olb
Microsoft Graph
Graph8.olb
Graph9.olb
Microsoft Outlook(R)
Msoutl8.olb
Note: Use Msoutl85.olb for Outlook 98
Msoutl9.olb
Microsoft PowerPoint(R)
Msppt8.olb
Msppt9.olb
Microsoft Word
Msword8.olb
Msword9.olb
在VC++调用word中,我们需要导入msword9.olb才能使用word中的各种功能。
用VC++创建一个自动化客户机
The COleDispatchDriver Class
vc提供了一个COleDispatchDriver类来处理自动化对象的IDispatch接口,关于COleDispatchDrive类的属性和函数请读者自行查阅类库,这里就不再赘述。
  1.创建一个新的Dialog-Base MFC AppWizard Exe工程名为"WordAutomation";注意在MFC AppWizard - Step 2 of 4中的Automaiton选项上打上勾,如下图所示:&
图一 使用AppWizard生成基于对话框的的工程,如上所示选上Automation选项。
&& 2.在View菜单中,点击ClassWizard,然后进入Automation标签中点击Add Class,选择From A Type Library。找到Microsoft Office 2000类型库msword.olb,选择_Application,_Document,_Documents,Selection四个类,如有其他需要(例如画表也可选择其他的类)。
图二 使用ClassWizard从类型库中创建所需的类
  这个过程会在工程中创建两个新的文件:msword8.h和msword8.cpp,这些文件构成了word类型库的所选择的类和类的成员函数。在ClassView视图中查看从word类型库生成的所有的类,然后双击_Application类来查看它的定义,你就会注意到_Application类是来源于COleDispatchDriver。
// _Application wrapper class
class _Application : public COleDispatchDriver
   ......
至于这些类和成员函数的功能和用法,我有一个简便的方法,那就是使用word中工具菜单中的宏的录制功能,把你所想要进行的操作先用宏录制下来,然后查看这些宏代码,你就会清楚要使用哪个类,哪些成员函数和成员函数应该带些什么参数了。虽然这些代码都是用VB写的,但你可以很容易的转换成VC++中的代码。
图三 进行word写的VBA宏代码
VC++会自动地在WordAutomation.cpp中的CWordAutomationApp::InitInstance()中生成如下的代码,使得COM的服务能有效。
if (!AfxOleInit())
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
&&& 3.接下来选择对话框资源IDD_WORDAUTOMATION_DIALOG,在对话框中增加一个按钮命名为IDC_WORD_NEW,在按钮的处理函数中增加如下的代码:
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//开始一个新的Microsoft Word 2000实例
_Application oWordA
if (!oWordApp.CreateDispatch("Word.Application", NULL))
AfxMessageBox("CreateDispatch failed.", MB_OK | MB_SETFOREGROUND);
//创建一个新的word文档
Documents oD
_Document oD
oDocs = oWordApp.GetDocuments();
oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);&
//如果是word 98,则应该带两个参数,如oDocs.Add(vOpt, vOpt)
//把文本添加到word文档
Selection oS
oSel = oWordApp.GetSelection();
oSel.TypeText("one");
oSel.TypeParagraph();
oSel.TypeText("two");
oSel.TypeParagraph();
oSel.TypeText("three");
//保存word文档
_Document oActiveD&
oActiveDoc = oWordApp.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"),&
COleVariant((short)0),
vFalse, COleVariant(""), vTrue, COleVariant(""),
vFalse, vFalse, vFalse, vFalse, vFalse);
//退出word应用程序
oWordApp.Quit(vOpt, vOpt, vOpt); 
  4.在WoreAutomation.cpp中增加包含头文件msword9.h。
#include "msword9.h"
//或者在word98中是 "msword8.h"
注意:增加的头文件应该在stdafx.h文件之后,否则就会导致编译错误。&
&利用VC++进行word表格的填写
我们先利用word的宏的录制功能,把所要进行的表格填写的操作录制下来,查看VBA的代码如下所示:
图四 进行word表格填写的VBA宏代码
其中MoveDown为Selection类所定义对象的成员函数,Unit:=wdParagraph, Count:=1为其所带参数的值。wdParagraph宏的数值是多少,可使用宏的调试器在调试中查出。在VC++中MoveDown所带参数为三个,在VBA的帮助中我们可以查到第三个参数不写会有一个默认值,但在VC++中这个参数不能省略,怎么知道它数值是多少呢?我们可以照葫芦画瓜把它写进宏中,Extend:=wdMove,再在调试中查出,其余的类推。
再次选择对话框资源IDD_WORDAUTOMATION_DIALOG,在对话框中增加一个按钮命名为IDC_WORD_TABLEWRITE,在按钮的处理函数中增加如下的代码:
BeginWaitCursor();
COleVariant vTrue((short)TRUE), vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application m_A//定义Word提供的应用程序对象;
Documents m_D//定义Word提供的文档对象;
Selection m_S//定义Word提供的选择对象;
m_Docs.ReleaseDispatch();
m_Sel.ReleaseDispatch();
m_App.m_bAutoRelease=
if(!m_App.CreateDispatch("Word.Application"))
AfxMessageBox("创建Word2000服务失败!");
//下面是定义VARIANT变量;
COleVariant varFilePath("word表格.doc");
COleVariant varstrNull("");
COleVariant varZero((short)0);
COleVariant varTrue(short(1),VT_BOOL);
COleVariant varFalse(short(0),VT_BOOL);
m_Docs.AttachDispatch(m_App.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来;
m_Docs.Open(varFilePath,varFalse,varFalse,varFalse,
varstrNull,varstrNull,varFalse,varstrNull,
varstrNull,varTrue,varTrue,varTrue);
//打开Word文档;
m_Sel.AttachDispatch(m_App.GetSelection());//将Selection类对象m_Sel和Idispatch接口关联起来;
m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0));
m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("");
m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("李明");
m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("25");
m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("技术员");
m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("本科");
m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0));
m_Sel.TypeText("上海市虹口区民主路315号");
//save word file
_Document oActiveD
oActiveDoc = m_App.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\填写后表格.doc"),
COleVariant((short)0),
vFalse, COleVariant(""), vTrue, COleVariant(""),
vFalse, vFalse, vFalse, vFalse, vFalse);
m_Docs.ReleaseDispatch();//断开关联;
m_Sel.ReleaseDispatch();
//退出WORD
m_App.Quit(vOpt, vOpt, vOpt);
m_App.Quit(vOpt, vOpt, vOpt);
m_App.ReleaseDispatch();
EndWaitCursor();
MessageBox("word表格填写完毕!","提示",MB_ICONEXCLAMATION);
注意:要运行本文提供的源程序,需要预先安装Microsoft Word 2000。
最多还可以输入100字
【VIP年会员制套餐】
【C/C++软件工程师实战能力集训大纲】
VC知识库发布了C/C++业界的“本草纲目”
【牛人都在千人一号群! 加群三步走!!!】
第一步:请必须加VC知识库QQ: 为好友;
第二步:请必须关注本站微博:
第三步:申请加入群:.(必须将关注微博截屏发到QQ方可通过!)
【最新2013:】
全部100% VC++源码提供: E-Form++全新大型SCADA & HMI解决方案源码、CAD解决方案源码、Gis解决方案源码 、电力石油化工仿真与图形建模解决方案源码、大量其他高级制图VC++源码下载!
【 新视频发布】
o o o o o o o o o o
测试驱动开发(TDD)是以测试作为开发过程的中心,它坚持,在编写实际代码之前,先写好基于产品代码的测试代码。开发过程的目标就是首先使测试能够通过,然后再优化设计结构。测试驱动开发式是极限编程的重要组成部分。XUnit,一个基于测试驱动开发的测试框架,它为我们在开发过程中使用测试驱动开发提供了一个方便的工具,使我们得以快速的进行单元测试。XUnit的成员有很多,如JUnit,PythonUnit等。今天给大家介绍的CppUnit即是XUnit家族中的一员,它是一个专门面向C++的测试框架。
在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。...
本文介绍了套接字编程的基本知识。...word里插入图片,艺术字都显示不出来可打印预览状态又可以看到,为什么?怎么办啊?很急啊,我还要做东西呢
word里插入图片,艺术字都显示不出来可打印预览状态又可以看到,为什么?怎么办啊?很急啊,我还要做东西呢
补充:我要的是解决WORD里的问题而不是要我去找其他软件代替
单击菜单“工具----选项”去掉图片框前的勾选
插入艺术字应该可以旋转的上面是个绿色的而我现在是这样的 变方向移动的话很麻烦,怎么办啦?谢谢!
修改一下艺术字的环绕方式,除图中所圈的嵌入式以外的任何一种环绕方式都是可以的
的感言:3扣3扣,,,灰常感谢
其他回答 (2)
那你用PPT啊。
一样的。 有艺术字的那页打印就OK啦。
可能你的office,word文件坏了,重装一下。
相关知识等待您来回答
微软专区领域专家
& &SOGOU - 京ICP证050897号vc++ 实现 word
打印 - 下载频道
- CSDN.NET
&&&&vc++ 实现 word
vc++ 实现 word
利用vc++实现 Word2003 打印功能,导入Word文档,打印预览
并实现打印
若举报审核通过,可奖励20下载分
被举报人:
haokaihaohe110
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行三个VC++程序精灵编程源码实例 三个VC++专用的程序精灵编程源码实例,就像Word中的动画提示一样,出来一个小动物询问你要怎么做,本精灵可设三种状态:变形、散步、休息,像变形金刚,哈。另外能设置是否显示、隐藏它,设置开机自动运行、新闻显示、是否静音、是否全屏幕活动等,除了研究这些小技巧外,你完全可以把它看作一个动画窗体来研究,我觉得挺不错。 - 下载频道
- CSDN.NET
&&&&三个VC++程序精灵编程源码实例 三个VC++专用的程序精灵编程源码实例,就像Word中的动画提示一样,出来一个小动物询问你要怎么做,本精灵可设三种状态:变形、散步、休息,像变形金刚,哈。另外能设置是否显示、隐藏它,设置开机自动运行、新闻显示、是否静音、是否全屏幕活动等,除了研究这些小技巧外,你完全可以把它看作一个动画窗体来研究,我觉得挺不错。
三个VC++程序精灵编程源码实例 三个VC++专用的程序精灵编程源码实例,就像Word中的动画提示一样,出来一个小动物询问你要怎么做,本精灵可设三种状态:变形、散步、休息,像变形金刚,哈。另外能设置是否显示、隐藏它,设置开机自动运行、新闻显示、是否静音、是否全屏幕活动等,除了研究这些小技巧外,你完全可以把它看作一个动画窗体来研究,我觉得挺不错。
三个VC++程序精灵编程源码实例
三个VC++专用的程序精灵编程源码实例,就像Word中的动画提示一样,出来一个小动物询问你要怎么做,本精灵可设三种状态:变形、散步、休息,像变形金刚,哈。另外能设置是否显示、隐藏它,设置开机自动运行、新闻显示、是否静音、是否全屏幕活动等,除了研究这些小技巧外,你完全可以把它看作一个动画窗体来研究,我觉得挺不错。
  压缩内有三个不同样式、不同动画形式的程序精灵,每个都能顺利编译,根据你的喜好和程序类型请自己选择。
若举报审核通过,可奖励20下载分
被举报人:
mirage1982
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行我在word里做了一张表格,预览时也都能显示的,可是为什么打印出来有的字就会不见了呢?_百度知道
我在word里做了一张表格,预览时也都能显示的,可是为什么打印出来有的字就会不见了呢?
提问者采纳
1、纸张大小与WORD对应2、在打印预览里调整页边距,放大100%查看文档是否完整
提问者评价
其他类似问题
为您推荐:
其他2条回答
是不是超过篇幅范围了
修改一下上下左右 边距
打印其它的东西有没有呢??或许是你的打印机没有墨了
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 vc word 的文章

 

随机推荐