javascript Excel.application过早关闭excel

时间:2014-06-04 07:22:29

标签: javascript excel

我制作了一个小的javascript,它可以从html表中获取数据并将其发送到excel。使用onclick按钮触发该功能。

<input type='button' value='Export to EXCEL' onclick='write_to_excel();return;'>
到目前为止很棒。数据到达excel,一切都很好。

但是html页面包含很多鼠标过度影响和其他javascript函数。并且很快其中一个被触发excel关闭......

当后面的网页仍在运行脚本时,如何保持excel打开并保留数据?

这是代码:

    function write_to_excel() 
{

str="";

var test=testForActiveX();
 var mytable = document.getElementsByTagName("table")[0];
var rowCount = mytable.rows.length;
var colCount = mytable.getElementsByTagName("tr")[0].getElementsByTagName("td").length; 

var ExcelApp = new ActiveXObject("Excel.Application");
var ExcelSheet = new ActiveXObject("Excel.Sheet");


ExcelSheet.Application.Visible = true;



//  første table læses for at finde overskrifter 
    for(var i=0; i<rowCount; i++) 
    {   
        for(var j=0; j<colCount; j++) 
        {           
            str= mytable.getElementsByTagName("tr")[i].getElementsByTagName("td")[j].innerText ;

            ExcelSheet.ActiveSheet.Cells(i+1,j+1).Value = str;
        }
    }

// anden tabel læses for at finde data 
var mytable = document.getElementsByTagName("table")[1];
var rowCount = mytable.rows.length;
var colCount = mytable.getElementsByTagName("tr")[0].getElementsByTagName("td").length; 


    for(var i=0; i<rowCount; i++) 
    {   
        for(var j=0; j<colCount; j++) 
        {           
            str= '=\"'+ mytable.getElementsByTagName("tr")[i].getElementsByTagName("td")[j].innerText +'\"';


            //if (mytable.getElementsByTagName("tr")[i].getElementsByTagName("td")[j].innerText 


            //str='=value("'+mytable.getElementsByTagName("tr")[i].getElementsByTagName("td")[j].innerText +'")';
            //det lang space er for at undgå excel konvertering 
            ExcelSheet.ActiveSheet.Cells(i+1+1,j+1).Value = str;
        }
    }



ExcelSheet=null;
ExcelApp=null;

}

1 个答案:

答案 0 :(得分:0)

function write_to_excel() 
{
    var ExcelApp = new ActiveXObject("Excel.Application");
    var ExcelSheet = new ActiveXObject("Excel.Sheet");

    ExcelSheet.Application.Visible = true;

    ExcelSheet.ActiveSheet.Cells(1,1).Value = "test";

    ExcelSheet=null;
    ExcelApp=null;
}

这是您的代码的一个非常简化的版本。当我点击按钮时,我会看到Excel弹出然后立即关闭(我不必对页面做任何其他事情,它只是立即关闭)。

原因是你已经告诉它,尽管只是隐含地。你的最后两行是问题所在。工作表和excel本身都是打开的,因为您有包含它们的变量,ExcelSheet和ExcelApp。但最后,你将它们都设置为null - 因此Excel关闭,因为工作表和app-instance都不存在!

我唯一无法回答的问题是为什么它不会立即发生在你身上,而是在你触发其他一些javascript之前保持开放状态。我无法重现 - 无论我尝试做什么,只要两个变量都设置为null,我总会看到Excel窗口关闭。

然后,解决方案是在全局范围内声明这些变量(即,不是在函数结束时它们只会超出范围的函数),而不是将这两个变量设置为null UNTIL您希望Excel关闭。或者,无论如何都不要打扰,只需将其留给用户手动关闭Excel。

var ExcelApp;
var ExcelSheet;

function write_to_excel() 
{
    ExcelApp = new ActiveXObject("Excel.Application");
    ExcelSheet = new ActiveXObject("Excel.Sheet");

    ExcelSheet.Application.Visible = true;

    ExcelSheet.ActiveSheet.Cells(1,1).Value = "test";
}
相关问题