导出到WORD打印
很多情况下,我们需要将数据导出到WORD中进行打印。有的只是将一条数据,导出到WORD中,用数据中的字段替换模板中的内容,然后打印;而有的比较变态的用户会让你将N条数据导出到word中,并套用模板的格式去打印。
现在我们就说一下那种比较变态的打印需求怎么解决:
1.需求:
许多公司在做项目时,都会给自己的客户发送调查函,客户也要给公司发送回函;这个时候项目与函、回函直接就有了一个关系,一个项目对应一个函和一个回函;函与回函的内容中,有它相关的项目名称这一栏是需要填写的,这个时候我们的需求就产生了:根据项目的数据列表,套用函、回函模板,自动为用户填充里面的项目名称这一栏。
2.解决方案
我们可以采用VBA来操作WORD,实现自动填充。
首先介绍一下WORD中的‘宏’的功能,明白宏的功能后,你会发现它真是VERY GOOD.
它就象摄像机一样,可以把你对word的操作录制下来,并将这个过程转化成可以使用的代码,这对于编程人员的帮助无以言表。
转入正题,我们来看一下用于操作WORD 的相关对象,大家看一下微软的文章,Microsofy Word对象我就不用罗嗦了。
我们用到了三个主要的对象Application, Document, Selection。
Application对象就是word程序,我们用Application可以新建或者打开一个word文档(XXX.doc), Selection就是用于选中文档内容的对象。
下面就看一操作步骤:
(1).建立文档模板,也就是函、回函的模板。模板内容根据用户的需求,这里我们要知道,里面会有一个项目名称栏需要填写,在项目名称栏的填写栏填上一个变量[PrjName],这个变量我们在用数据去替换的时候会有用的,说是填充,其实就是替换,将[PjrName]替换成真实的项目名称。
(2).编码
//导出到WORD打印
//声明Application对象和Document对象
var wordApp,wordDoc;
function OutToWord()
{
//获取项目数据列表
var items=GetPrjList();
//声明wordApplication对象(启动word程序)
wordApp = new ActiveXObject("Word.Application");
//模板文件路径
var path ="http://127.0.0.1/";
var url_han =path+"Han.doc";
var url_huihan = path+"HuiHan.doc";
//新建空白文档
wordDoc=wordApp.Documents.Add();
//打开模板
var docHan = wordApp.Documents.Open(url_han);
var docHuiHan = wordApp.Documents.Open(url_huihan);
//根据记录条数,循环,复制模板到新建文档
for(var i=0;i<items.length;i++)
{
//选择模板,复制,粘贴
//函
CopyAndPasteTemplate(docHan);
//回函
CopyAndPasteTemplate(docHuiHan);//默认
}
//关闭模板
docHan.Close();
docHuiHan.Close();
//显示word窗体
wordApp.visible=true;
//替换每页内容
wordApp.Selection.Find.ClearFormatting();
for(var i=1;i<=items.length;i++)
{
//定位到第 2*i-1 页
GoToPage(wordApp.Selection,(2*i-1));
//替换函的内容
ReplaceContent(“[PrjName]“,items[i-1]);
//定位到第 2*i 页
GoToPage(wordApp.Selection,2*i);
//替换回函内容
ReplaceContent(“[PrjName]“,items[i-1]);
}
}
//复制模板并粘贴到打印文档
function CopyAndPasteTemplate(doc)
{
//激活模板
doc.Activate();
//全选模板
wordApp.Selection.WholeStory();
//复制
wordApp.Selection.Copy();
//激活打印文档
wordDoc.Activate();
//插入分页符
//wordApp.Selection.InsertBreak();
//粘贴
wordApp.Selection.PasteAndFormat(wordApp.wdPasteDefault);
}
//替换文本
function ReplaceContent(oldString,newString)
{
wordApp.Selection.Find.Text = oldString;
wordApp.Selection.Find.Execute();
wordApp.Selection.TypeText(newString);
}
<script language="vbscript" >
'定位到第X页
Sub GoToPage(Selection,pageNO)
Selection.GoTo What=pageNO
End Sub
</script>
以上代码所实现的效果就是根据数据记录,套用WORD模板,自动填充里面的内容。
时间仓促,就这些吧。