我制作了一个小的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;
}
答案 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";
}