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列
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM