在JavaScript中,可以通过ActiveX对Excel进行读写操作。有时,我们可能遇到这种情况:
1、在内存中生成Excel。
2、对Excel写操作后,打开显示该Excel。
3、当用户关闭打开了的Excel后,清空进程。
由于打开显示的Excel是内存中的对象,所以在用户关闭该Excel之前,我们不能将该对象清除。若强制清除的话,打开中的Excel会被关闭。
打开Excel后,我们无法监听到用户的操作(关闭),所以我们不知道在什么时候清除这个对象。
解决思路:
我们可以将内存中的Excel文件保存为临时文件,清除内存中的对象,然后再用新的进程打开这个临时文件。
做法:
- var idTmr = "";
- // 制做Excel文件
- function StartExcel() {
- try {
- //删除临时文件夹中指定的Excle文件。(或使用oExcel.DisplayAlerts = false;来屏蔽弹出框保存文件时的提示框。)
- /*var fso, f1;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- try {
- f1 = fso.GetFile("C:\\abc.xls");
- f1.Delete();
- } catch (a) {
- }*/
- // 生成Excel文件
- var oExcel = new ActiveXObject ("Excel.Application");
- // 在任何情况下都不弹出提示框
- oExcel.DisplayAlerts = false;
- //oExcel.visible = true;//不显示
- var xlBook = oExcel.Workbooks.Add;
- var xlsheet = xlBook.Worksheets(1);
- xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).value="test…";
- // 保存文件至临时文件夹
- xlBook.SaveAs("C:\\abc.xls");
- // 清除对象
- xlBook.Close();
- oExcel.Quit();
- oExcel = null;
- idTmr = window.setInterval("Cleanup();",1);
- } catch (e) {
- }
- }
- // 清除对象
- function Cleanup() {
- window.clearInterval(idTmr);
- CollectGarbage();
- // 打开保存的文件
- Run("C:\\abc.xls");
- }
- // 打开指定的文件
- function Run(strPath) {
- try {
- var objShell = new ActiveXObject("wscript.shell");
- objShell.Run(strPath);
- objShell = null;
- }
- catch (e){
- }
- }
调用方法:
- <body>
- <input type="button" id="save" VALUE="save" onclick="StartExcel()">
- </body>