VC 6下word操作心得二---以.dot模板生成.doc文档

  (1)生成Dialog时,要选择ActiveX;

(2)在initdialog中初始化OLE环境

BOOL CDialogTestDlg::OnInitDialog() 中添加

if(!AfxOleInit())
     {
       AfxMessageBox("OLE Initialization Failed");
       return FALSE;
     }

(3)View->ClassWizard->Automation->Add Class From Library:定位到你安装Office的目录找到MSWord.Olb(我的word版本是word2007)

添加_Application、Documents、Document、Window、View、Range、Bookmarks、

Bookmark、Fields、Field类即可,注意,不能像有些文章中说的把所有类都添加,否则会编译不通过。

在用到的.CPP文件中添加头文件,比如我的button消息响应函数在xxxDlg.cpp中,就在文件中添加:

#include "msword.h"

#include //为使用CcomVariant类型的头文件

#include

(4)添加代码

 

	//--------声明 
	_Application   WordApp;     //Word应用程序对象 
	Documents   WordDocs;       //文档对象 
	_Document   WordDoc;         
	Window     window; 
	View   view;   
	Range       range;             
	Bookmarks       bookmarks;   //书签对象 
	Bookmark       bookmark; 
	Fields   fields;               //域对象 
	Field     field; 
	//找到word标签,并将数据写到标签对应之处
	if(WordApp.m_lpDispatch==NULL)
	{
		if( WordApp.CreateDispatch("Word.Application") )
		{
			if(WordDoc.m_lpDispatch==NULL)
			{
				WordApp.SetVisible(true);//true可见,false不可见
				WordApp.SetWindowState(1);//0正常 1最大化 2最小化
				WordDocs=WordApp.GetDocuments();
				//模板文件路径
				variant_t WordTemplate="d:\\xxx.dot";//\\为转义字符
				WordDoc=WordDocs.Add(&WordTemplate,&vtMissing,&vtMissing,&vtMissing);
				window=WordApp.GetActiveWindow();
				view=window.GetView();
				view.SetShowPicturePlaceHolders(false);//不显示图片框
				view.SetShowBookmarks(false);//不显示书签
				view.SetShowFieldCodes(false);//不显示域代码
				bookmarks=WordDoc.GetBookmarks();
				//Office模板中对应书签名
				bookmark=bookmarks.Item(&_variant_t("ch11"));//找到模板中的标签"ch11"
				range=bookmark.GetRange();
				range.SetText(m_r1);//在模板标签"ch11"处添加字符串m_r1的内容
		
				bookmark=bookmarks.Item(&_variant_t("ch12"));
				range=bookmark.GetRange();
				range.SetText(m_r2);
		
				bookmark=bookmarks.Item(&_variant_t("ch13"));
				range=bookmark.GetRange();
				range.SetText(m_r3);

				bookmark=bookmarks.Item(&_variant_t("ch21"));
				range=bookmark.GetRange();
				range.SetText(m_r4);
		
				bookmark=bookmarks.Item(&_variant_t("ch22"));
				range=bookmark.GetRange();
				range.SetText(m_r5);
		
				bookmark=bookmarks.Item(&_variant_t("ch23"));
				range=bookmark.GetRange();
				range.SetText(m_r6);

				_variant_t Report="d:\\xxx.Doc";//报告存放路径
				_variant_t ReportPassWord="";//为报告加密,可在此输入密码
				WordDoc.SaveAs(&Report,&vtMissing,&vtMissing,&ReportPassWord,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing);
				//释放所有占用的资源
				window.ReleaseDispatch();
				view.ReleaseDispatch();
				range.ReleaseDispatch();
				fields.ReleaseDispatch();
				field.ReleaseDispatch();
				bookmark.ReleaseDispatch();
				bookmarks.ReleaseDispatch();
			}
			else
			{
				MessageBox("对不起,上一报表正在处理中,请在当前报表打印完毕之后,再生成新的报表!错误");
			}
		}
	}


参考:

[1] 在VC中利用Word生成测量报告

[2] VC6_0中利用word实现报表功能

你可能感兴趣的:(C++)