使用while循环使用PhpExcel

时间:2016-07-15 13:31:52

标签: javascript php phpexcel

我希望使用PHPExcel创建包含从xlsx电子表格中获取的行的javascript数组。

这是我的代码

$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循环的参数中要检查什么(我假设我们不知道电子表格中有多少行)

这是我唯一的问题还是错误的方法呢?

此函数getRow返回整行,getVal返回一个在页面的其他位置重要的列。

1 个答案:

答案 0 :(得分:0)

您可以使用不同的方法:

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)一次发送所有行:

我不知道你的用例,但分别打电话给每一行似乎是浪费时间。为什么不进行一次调用并使用换行符作为分隔符(或其他适合您的数据的其他内容)一次性返回所有数据。如果您的数据非常庞大,您仍然可以将数据分解为大块,并将其与选项1或选项2结合使用。

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

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

注意:您可能会考虑使用jQuery,这使得使用ajax变得更加容易。例如,请检查jQuery get