JavaScript关闭打开中Excel进程的思路
发表于:2009-05-26 | 零回复

在JavaScript中,可以通过ActiveX对Excel进行读写操作。有时,我们可能遇到这种情况:
1、在内存中生成Excel。
2、对Excel写操作后,打开显示该Excel。
3、当用户关闭打开了的Excel后,清空进程。

由于打开显示的Excel是内存中的对象,所以在用户关闭该Excel之前,我们不能将该对象清除。若强制清除的话,打开中的Excel会被关闭。
打开Excel后,我们无法监听到用户的操作(关闭),所以我们不知道在什么时候清除这个对象。

解决思路:
我们可以将内存中的Excel文件保存为临时文件,清除内存中的对象,然后再用新的进程打开这个临时文件。

做法:
 

  1. var idTmr = "";   
  2.  
  3. // 制做Excel文件 
  4. function StartExcel() { 
  5.     try { 
  6.         //删除临时文件夹中指定的Excle文件。(或使用oExcel.DisplayAlerts = false;来屏蔽弹出框保存文件时的提示框。) 
  7.         /*var fso, f1; 
  8.         fso = new ActiveXObject("Scripting.FileSystemObject"); 
  9.  
  10.         try { 
  11.             f1 = fso.GetFile("C:\\abc.xls"); 
  12.             f1.Delete(); 
  13.         } catch (a) { 
  14.         }*/ 
  15.  
  16.         // 生成Excel文件 
  17.         var oExcel = new ActiveXObject ("Excel.Application"); 
  18.         // 在任何情况下都不弹出提示框 
  19.         oExcel.DisplayAlerts = false
  20.         //oExcel.visible = true;//不显示 
  21.         var xlBook = oExcel.Workbooks.Add; 
  22.         var xlsheet = xlBook.Worksheets(1); 
  23.         xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).value="test…"
  24.  
  25.         // 保存文件至临时文件夹 
  26.         xlBook.SaveAs("C:\\abc.xls"); 
  27.  
  28.         // 清除对象 
  29.         xlBook.Close();   
  30.         oExcel.Quit();   
  31.         oExcel = null;   
  32.         idTmr = window.setInterval("Cleanup();",1);    
  33.     } catch (e) { 
  34.     } 
  35.  
  36. // 清除对象 
  37. function Cleanup() {   
  38.     window.clearInterval(idTmr);   
  39.     CollectGarbage(); 
  40.  
  41.     // 打开保存的文件 
  42.     Run("C:\\abc.xls"); 
  43.  
  44. // 打开指定的文件 
  45. function Run(strPath) { 
  46.     try { 
  47.         var objShell = new ActiveXObject("wscript.shell");   
  48.         objShell.Run(strPath); 
  49.         objShell  = null;   
  50.     }   
  51.     catch (e){ 
  52.     } 

调用方法:

  1. <body> 
  2.     <input type="button" id="save" VALUE="save" onclick="StartExcel()"> 
  3. </body> 

 

评论留言