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ı
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>
Dosyayı JScriptTest.HTM olarak kaydedin ve Not Defteri'ni kapatın.
Dosyayı Internet Explorer'da yüklemek için JScriptTest.HTM dosyasına çift tıklayın.
Windows Görev Yöneticisi'ni başlatın.
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.
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin