gpt4 book ai didi

javascript Excel.application 过早关闭 Excel

转载 作者:行者123 更新时间:2023-11-28 08:12:23 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com