使用 while 循环使用 PhpExcel 获取行

Using a while loop to get rows using PhpExcel

我希望使用 PHPExcel 创建 javascript 数组,其中的行取自 xlsx 传播 sheet。

这是我的代码

$document.ready({
    var rows = new Array();
    var vals = new Array();

    var i = 0;
while(){
    rows[i] = getRow(i);
    vals[i] = getVal(i);
    i++;
}
});

function getRow(i){
    if(window.XMLHttpRequest){
        xmlhttp= new XMLHttpRequest();
    }else{
        xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');
    }


    xmlhttp.onreadystatechange = function (){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            return xmlhttp.responseText;
        }

    }


    xmlhttp.open('GET', 'data.inc.php?x='+i, true);
    xmlhttp.send();

}   

function getVal(i){
    if(window.XMLHttpRequest){
        xmlhttp= new XMLHttpRequest();
    }else{
        xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');
    }


    xmlhttp.onreadystatechange = function (){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            return xmlhttp.responseText;
        }

    }


    xmlhttp.open('GET', 'include.inc.php?x='+i, true);
    xmlhttp.send();

}   

我不确定在 while 循环的参数中检查什么(我假设我们不知道传播中有多少行sheet)

这是我唯一的问题还是解决方法不对?

还有函数 getRow return 整行和 getVal returns 一列,这在页面的其他地方很重要。

您可以使用不同的方法:

1) 同步您的请求:

function getRow(i, rows){
    ...

    xmlhttp.onreadystatechange = function (){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            if xmlhttp.responseText != '' {
                rows[i] = xmlhttp.responseText;
                getRow(i+1, rows)
            } else {
                // call function that works with rows.
            }
        }
    }
    ...
}   

此函数仅通过 getRows(0, rows) 调用(无循环!)。

这绝对是最慢的方法,因为每个请求都会在前一个请求完成后立即启动。

2)先发送行数:

您可以在第一个请求或每个请求中发送行数,因此 javascript 知道有多少行。然后您可以像现在一样遍历行并创建异步调用。

3) 一次发送所有行:

我不知道你的用例,但单独调用每一行看起来很浪费时间。为什么不使用换行符作为分隔符(或其他适合您的数据的东西)一次调用 return 所有数据。如果您的数据真的很大,您仍然可以将数据分解成大块并将其与选项 1 或选项 2 结合使用。

4) 在页面加载时发送数据:

不确定这是否是一个选项,因为您在 document.ready 上执行了您的函数,所以看起来确实如此。您可以考虑将您的数据写入一个特殊的隐藏 div 并从那里(使用 javascript)读取数据到您的变量中。这样你就可以避免所有 ajax 调用。如果您想加载所有数据,这可能是最快的。

注意:您可以考虑使用 jQuery,这样可以更轻松地使用 ajax。例如检查 jQuery get