javascript Excel.application 过早关闭 Excel

标签 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;

}

最佳答案

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 会关闭,因为工作表和应用程序实例都不存在!

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

解决方案是在全局范围内声明这些变量(即不在函数中声明,一旦函数结束它们就会超出范围),并且不要将这两个变量设置为 null 直到您希望关闭 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";
}

关于javascript Excel.application 过早关闭 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24031393/

相关文章:

excel - Microsoft Explorer 和 dir 命令之间的不同文件排序

excel - 如何在Excel中找到最高值并返回前两个相邻单元格值?

excel - 读取 Excel 文件表名称

javascript - TurboLinks 如何显示响应 HTML?

java - 选择选项后无法创建输入文本框

javascript - 写Javascript时如何处理IE

c++ - C++ 中的 CDBException(错误)处理(VS2010、MFC、Excel/ODBC)

excel - 两个数据集的堆积柱形图 - Excel

Javascript 拦截请求并使用我的 VPS 上的缓存副本

javascript - 如何在javascript中一次出现一个测验问题