JScript'ten otomatikleştirme sırasında Quit yöntemi çağrıldıktan sonra Excel kapatılmıyor

Belirtiler

Microsoft JScript'ten Microsoft Excel'i otomatikleştirdiğinizde, Siz Internet Explorer'ı kapatana veya başka bir sayfaya gidene kadar Quit yöntemini çağırdıktan sonra Excel bellekte kalır.

Neden

JScript, Excel başvurularını tutuyor. Çık komutunu yayımladığınızda Excel'de bir başvuru olduğundan, Excel kapatılmaz. JScript bir çöp toplama dilidir, yani değişkenleri NULL olarak ayarladığınızda değil, altyapı belirli bir noktada kendi kendine temizleniyor demektir. Internet Explorer'ı kapattığınızda veya başka bir sayfaya geçtiğinde, altyapı yok edilir. Bu davranış, çöp toplamayı zorlar ve Excel başvurularını serbest kılar.

Çözüm

Bu sorunu geçici olarak çözmek için CollectGarbage yöntemini çağırabilirsiniz. Bu, JScript'in çöp toplama işleminin hemen gerçekleşmesini zorlar ve bu da Excel'e başvuruyu serbest bırakır. Aşağıdaki kod parçacığında CollectGarbage yönteminin nasıl kullanılacağı gösterilmektedir:

<HTML> 
<BODY> 
<INPUT type="button" value="Automate Excel" name=AutomateExcel onclick="StartExcel()"> 
<SCRIPT LANGUAGE=Javascript> 
  var idTmr = "";

function StartExcel() { 
    var oExcel; 

oExcel = new ActiveXObject("Excel.Application"); 
    oExcel.Quit(); 
    oExcel = null;
    idTmr = window.setInterval("Cleanup();",1);
  } 

function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
  }

</SCRIPT> 
</BODY> 
</HTML> 

CollectGarbage yönteminin excel'in Quit yönteminden hemen sonra çağrılmadığını fark edin. CollectGarbage'i çağırmadan önce JScript'e kısa bir süre vermeniz gerekir. Bu örnekte, çöp toplamayı zorlamadan önce kısa süre beklemeyi göstermek için bir zamanlayıcı kullanılır.

Bir diğer geçici çözüm de Microsoft Excel Otomasyonu için VBScript kullanmaktır. JScript'in aksine VBScript çöp toplama dili değildir. Bu nedenle, değişkenleri Nothing olarak ayarladığınızda başvurular serbest bırakılır. VBScript kullanarak, Excel Quit yöntemini çağırdıktan ve değişkenleri serbest bıraktıktan hemen sonra kapanır. Daha fazla bilgi için Başvurular bölümüne bakın.

Not

Belgelenmemiş CollectGarbage yöntemi ECMA-262 belirtiminin bir parçası değildir ve betik altyapısının gelecek sürümlerinde kullanılamayabilir. CollectGarbage çağrısı yaparak çöp toplayıcıyı çalıştırmaya zorladığınızda, bu durum performansı da olumsuz etkileyebilir.

Durum

Microsoft, bu makalenin başında listelenen Microsoft ürünlerinde bunun bir hata olduğunu onayladı.

Yeniden oluşturma adımları

  1. Not Defteri'ni başlatın ve düzenleyiciye aşağıdaki kodu yapıştırın:

     <HTML> 
     <BODY> 
     <INPUT type="button" value="Automate Excel" name=AutomateExcel onclick="StartExcel()"> 
     <SCRIPT LANGUAGE=Javascript> 
       function StartExcel() { 
         var oExcel; 
    
     oExcel = new ActiveXObject("Excel.Application"); 
         oExcel.Quit(); 
         oExcel = null; 
       } 
     </SCRIPT> 
     </BODY> 
     </HTML> 
    
  2. Dosyayı JScriptTest.HTM olarak kaydedin ve Not Defteri'ni kapatın.

  3. Dosyayı Internet Explorer'da yüklemek için JScriptTest.HTM dosyasına çift tıklayın.

  4. Windows Görev Yöneticisi'ni başlatın.

  5. Internet Explorer'da Web sayfasındaki Excel'i Otomatikleştir düğmesine tıklayın. Windows Görev Yöneticisi'ni inceleyin ve Excel'in başlatıldığını ve bellekte kaldığını unutmayın.

  6. Başka bir sayfaya gidin veya Internet Explorer'dan çıkın. Excel'in kapatıldığını ve artık Windows Görev Yöneticisi'nde görünmediğini unutmayın.

Başvurular

Excel Otomasyonu'nu gösteren VBScript kod örneği hakkında daha fazla bilgi için bkz. İstemci tarafı VBScript'ten Excel'i otomatikleştirme.