Ecl*_*pse 6 javascript excel activex windows-desktop-gadgets
我正在开发一个需要从excel文档中提取数据的Windows 7小工具.问题是,在我检索到我需要的数据后,Excel进程是不会卸载的.
这是我在初始化函数中使用的代码:
var Excel = new ActiveXObject("Excel.Application");
Excel.Visible = false;
Excel.DisplayAlerts = false;
var workbooks = Excel.Workbooks;
var workbook = workbooks.Open("\\\\SERVER\\Documents\\Sample.xlsx", 0, true);
var activesheet = workbook.ActiveSheet;
var cell = sheet.Cells(1, 1);
var value = cell.Value;
document.getElementById("content").innerHTML = value;
delete value;
value = null;
delete cell;
cell = null;
delete activesheet;
activesheet = null;
delete workbook;
workbook = null;
delete workbooks;
workbooks = null;
Excel.Quit();
delete Excel;
Excel = null;
Run Code Online (Sandbox Code Playgroud)
这都包含在try-catch块中,我可以验证它是否都成功.所有删除和空分配都是我试图释放对COM对象的任何引用,但我似乎缺少了一些东西.有什么办法可以强制Excel进程卸载吗?
这就是Internet Explorer/JScript的工作原理 - 引用会持续一段时间,直到垃圾收集器运行.如果将变量设置为,则应在一段时间后对引用进行垃圾回收null.您还可以使用CollectGarbage()JScript和IE可用的(相对未记录的)方法强制收集它:
var Excel = new ActiveXObject("Excel.Application");
//... blah ...
Excel.Quit();
Excel = null;
window.setTimeout(CollectGarbage, 10);
Run Code Online (Sandbox Code Playgroud)
请注意,在调用之前需要留出少量时间(此处为10ms)CollectGarbage(),否则当您调用该函数时,该变量可能尚未标记为已收集.
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |