我制作了一个小型 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/