js操作word

利用js操作word2011年06月23日 星期四 下午 2:23       最近做的java项目中有用到word编辑的问题,很是棘手。

       目前它的解决办法包括一下几种:1、使用jacob.dll和jacob.jar在服务器端实现word操作;2、js在客户端操作word;3、掏钱买现成的针对java 语言开发的web office控件来实现。

      我们先采用了第一种方法实现,但是在客户哪里使用起来后发现一个很大的问题,就是经常让tomcat宕机,导致整个系统瘫痪不能使用。其实导致宕机的原因可能很多,有可能是因为word的不稳定导致的,也有可能是jacob的bug导致的,也有可能是我们java写的方法不合理导致的,等等一些原因,总之就是觉得在服务器断操作word一旦有问题就会影响整个程序的运行,所以决定用js来实现word的操作。好了多的废话不说,先上js代码。

 var myDocApp=null;//定义一个全局的变量
function word_onclick()
{
  myDocApp =new ActiveXObject("word.Application"); //创建word对象
  myDocApp.Documents.Open("d://cdb91b95-9f68-4c02-877c-3c481ac2331b.doc");//打开word
  myDocApp.Application.Visible = false; //设置word打开后不可见

//word的标签
  var bookMarks=["certificateNo","clientName","applianceName","mode","outNo","manuFactory","approverImage","supervisorImage","verificateurImage"];

//替换对应标签的值
  var bookMarksValue=["0123456789","we前往额","水杯","250ml","cert-0010","威尔厂","d://402881942d082b8c012d0833bfa200c0.bmp","d://402881942d082b8c012d0833bfa200c0.bmp","d://402881942d082b8c012d0833bfa200c0.bmp"];

//对打开的word中的标签进行遍历替换
  for(var i=0;i<bookMarks.length;i++)
  {
   var booktype="string";//标签的类型,默认是string,还有一种是pic,说明是需要插入图片的标签
   if((bookMarks[i]=="approverImage")||(bookMarks[i]=="verificateurImage")||(bookMarks[i]=="supervisorImage"))
   {booktype="pic"}

//替换标签并赋值
   insertvaluetobookmarks(bookMarks[i],bookMarksValue[i],booktype );
  }

//打开另外一个word并复制其全部内容粘贴到当前打开word的指定位置
 inserTable("insertTable","d://4aac5f0d-16a2-457a-9258-4c260fa15b85.doc");


 fillTable();
  try{
myDocApp.ActiveDocument.SaveAs("d:\\JaveToWord.doc");
}catch(exception){
 alert("浏览器安全设置过高,保存文件到本地失败");
 myDocApp.Documents.close();
 myDocApp.Application.quit();
 myDocApp=null;
 window.close();
}
myDocApp.Documents.close();
myDocApp.Application.quit();
myDocApp=null;
}
//替换标签并赋值
function insertvaluetobookmarks(bookMarksName,insertValue,booktype )
{
    if(myDocApp.ActiveDocument.BookMarks.Exists(bookMarksName))
  {
   if (booktype != null && booktype == "pic") {//图片
            var objDoc = myDocApp.ActiveDocument.BookMarks(bookMarksName).Range.Select();
            var objSelection = myDocApp.Selection;
            //objSelection.TypeParagraph();
   //alert(getRootPath()+content);
            var objShape = objSelection.InlineShapes.AddPicture(insertValue);
    }else{
     myDocApp.ActiveDocument.BookMarks(bookMarksName).Range.Select();
     myDocApp.Application.selection.Text=insertValue;
    }
  }else{
  
   alert("输入的标签不存在");
   return false;
   }
}

function inserTable(bookMarksName,filepath)
{
  //从另外一个word中拷贝,粘贴到当前word指定位置
 //begin
 if(myDocApp.ActiveDocument.BookMarks.Exists(bookMarksName))
 {
  var tableDocApp =new ActiveXObject("word.Application");
  tableDocApp.Documents.Open(filepath);
  tableDocApp.Application.Visible = false;
 
  tableDocApp.Selection.WholeStory();
  tableDocApp.Selection.Copy();
  myDocApp.ActiveDocument.BookMarks(bookMarksName).Range.Select();
  myDocApp.Application.selection.Paste();
 
  tableDocApp.Documents.close();
   tableDocApp.Application.quit();
   tableDocApp=null;
 }else{
    alert(bookMarksName);
    return false;
  }
  //end
}

//动态的给指定表格增加行

function fillTable()
{
  var tableCount=myDocApp.ActiveDocument.Tables.Count;
  alert(tableCount);
  var table=myDocApp.ActiveDocument.Tables(tableCount);
  for(var i=0;i<5;i++)
  {
 
  table.Rows(i+2).Range.Select();
  myDocApp.Selection.Copy();
 
  myDocApp.Selection.MoveDown();
  myDocApp.Selection.Paste();
 
  }


  var rows=table.Rows;//选中table的行对象

  var columns = table.Columns;//选中table的列对象
  var rowcount=rows.Count;
  var columnscount = columns.Count;
   for(var i=0;i<rowcount-1;i++)
   {
    for(var j=0;j<columnscount;j++ )
    {
    
      //table.Cell(i+2,j+1).Range.Text="第"+i+"行,第"+j+"列";
      table.Cell(i+2,j+1).Range.Text=j;//遍历选中table的单元格并对其赋值
     
    }
   }
  
   table.Columns(5).Select();//选中table的第5列
   table.Columns(5).Delete();//删除table的第5列
}
 

 

posted @ 2013-05-20 23:26  Trilyn  阅读(12973)  评论(0编辑  收藏  举报