导出到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模板,自动填充里面的内容。

时间仓促,就这些吧。

posted @ 2006-11-27 23:59  meteorcui  阅读(2103)  评论(0编辑  收藏  举报