从$ rowData获取值

时间:2013-12-17 12:56:45

标签: php excel

我试图在php中创建一个简单的页面,其中显示来自Excel工作表的数据。

我已经完成了这个link

当我使用foreach循环打印$ rowData的值时,我只打印了一个值。 我的Excel文档由2列出勤和注册号组成,只显示第一个值。

这里有一个使用

的foreach
foreach($rowData as $row){
    foreach($row as $var){
         echo "{$var}<br/>";
    }
}

我搜索了有关rangeToArray方法的信息,但无法获得有关传递给它的参数的信息。请有人解释该方法的工作原理。

编辑:使用print_r时的输出

Array ( 
    [0] => Array ( 
        [0] => Register Number 
        [1] => Attendance 
    ) 
) 
Array ( 
    [0] => Array (
        [0] => UR11CS012 
        [1] => 0.78 
    ) 
) 
Array (
    [0] => Array ( 
        [0] => UR11CS013 
        [1] => 0.65 
    ) 
) Array ( 
    [0] => Array ( 
        [0] => UR11CS015 
        [1] => 0.67
    )
) 

编辑:这里的代码仍然打印最后一个值只有什么错误?我应该将文件保存在seaprate文件夹上传的文件中,而不是从临时文件夹中使用它

<?php
            $name=$_FILES['u_file']['tmp_name'];
                try {
                    $inputFileType = PHPExcel_IOFactory::identify($name);
                    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
                    $objPHPExcel = $objReader->load($name);
                } catch(Exception $e) {
                    die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
                }
            $sheet = $objPHPExcel->getSheet(0); 
            $highestRow = $sheet->getHighestRow(); 
            $highestColumn = $sheet->getHighestColumn();
            for ($row = 1; $row <= $highestRow; $row++){ 
                $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);      
            }
            print_r($rowData);
        ?>

3 个答案:

答案 0 :(得分:1)

我认为你print_r了$行而不是$ rowData,我要做的就是使用这样的list函数

foreach($rowData as $row){
    list($rNum,$atten) = $row;
    echo $rNum .":". $atten ."\n";
}

由于您始终只使用两列使用列表将有助于减少在循环中使用循环。 第一个echo也是列名,因此您可以使用for循环而不是foreach

跳过它
for($i=1;$i<=count($rowData);$i++){
    list($rNum,$atten) = $rowData[$i];
    echo $rNum .":". $atten ."\n";
}

这将启动数组的第二个索引,基本上是跳过列标题

答案 1 :(得分:0)

更改此行

$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);

$rowData[] = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);

注意方括号,这将使它成为一个数组。在每次写一个变量之前......

然后,您将能够使用上面的@Beyerz答案循环遍历$ rowData ...

编辑:快速解释该功能正在做什么。

这是在excel文件中搜索包含数据的最后一个行号,并将其存储在$highestRow

$highestRow = $sheet->getHighestRow(); 

这样做但是列

$highestColumn = $sheet->getHighestColumn();

然后循环从1开始直到达到$ highestRow,并将数据存储在数组的每一列中。

例如,它从第A1行开始,从第A1行的每列获取数据到$highestColumn&lt; - 最后一列包含数据,然后循环并抓取A2中的每一列,然后A3 ......等......

它存储数组$ rowData []中的每一行。 NULL, TRUE, FALSE是您可能不必担心的一些设置,例如,如果单元格包含它们,则计算公式....

希望有帮助...

答案 2 :(得分:-1)

您的$rowData只包含一行。你必须在for循环中输出数据或将数据放在一个额外的数组中:

for ($row = 1; $row <= $highestRow; $row++){ 
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);
    foreach($rowData[0] as $var){ 
        echo "{$var}<br/>";
    }     
}

for ($row = 1; $row <= $highestRow; $row++){ 
    $rowData[] = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);
}
foreach($rowData as $row) {
    foreach($row[0] as $var) {  
        echo "{$var}<br/>";
    }
}