我试图在php中创建一个简单的页面,其中显示来自Excel工作表的数据。
我已经完成了这个link。
当我使用foreach循环打印$ rowData的值时,我只打印了一个值。 我的Excel文档由2列出勤和注册号组成,只显示第一个值。
这里有一个使用
的foreachforeach($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);
?>
答案 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/>";
}
}