javascript Excel.application过早closuresexcel

我做了一个小的JavaScript,可以从一个HTML表中获取数据,并将其发送到Excel。 该function是使用onclickbutton触发的。

<input type='button' value='Export to EXCEL' onclick='write_to_excel();return;'> 

迄今为止。 数据到达excel,一切都很好。

但是html页面包含了很多鼠标过度效果和其他的javascript函数。 并尽快将其中一个触发excelclosures…

如何保持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; } 

这是你的代码的一个非常简化的版本。 当我点击button时,我看到Excelpopup,然后立即closures(我不必对页面做任何事情,它只是马上closures)。

原因是你已经告诉它 ,尽pipe只是隐含的。 你最后两行是问题。 工作表和Excel本身都只是打开,因为你有variables持有他们,ExcelSheet和ExcelApp。 最后,尽pipe你将它们都设置为null,所以Excelclosures,因为表单和应用程序实例都不存在!

我无法回答的唯一问题是为什么它不会立即发生,而是保持打开状态,直到触发其他JavaScript。 我无法重现 – 无论我尝试做什么,只要两个variables都设置为空,我总是看到Excel窗口closures。

然后,解决scheme是在全局范围内声明这些variables(即不在函数结束时它们刚刚超出范围的函数中),而不是将这两个variables设置为null。直到您想要Excelclosures。 或者,不pipe怎么样,不要打扰,只要把它留给用户手动closuresExcel。

 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"; }