PHPExcel循环遍历行和列

时间:2015-07-11 06:17:25

标签: php mysql phpexcel

需要帮助识别我所面临的奇怪问题。我确实尝试过堆栈溢出,但没有找到任何可能的答案。

以下示例程序可以显示UI上的所有行和列

<?php

date_default_timezone_set('America/Los_Angeles');
require_once 'PHPExcel-1.8/Classes/PHPExcel.php';
include 'PHPExcel-1.8/Classes/PHPExcel/IOFactory.php';

$path = 'demo.xlsx';

$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
 $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
for ($row = 2; $row <= $highestRow; ++ $row) {
    $val=array();
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
   $cell = $worksheet->getCellByColumnAndRow($col, $row);
   $val[] = $cell->getValue();
 //End of For loop   
}

$Col1 = $val[0] ;
$Col2 = $val[1] ;
$Col3 = $val[2];

echo $Col1;
echo $Col2;
echo $Col3;
echo "<br>";

//End of for loop
}
?>

这个程序可以很好地打印n-lenght

的所有列和行

问题 - 现在我们的要求是获取Col1,Col2,Col3的值并使用mysql_query比较到数据库并执行进一步操作。

我们在上面添加任何内容// for for循环结束。它只迭代一次并停止而不会抛出任何php错误。

e.g。

.....

echo $Col1;
echo $Col2;
echo $Col3;
echo "<br>";

**$sql = mysql_query("select COALESCE(MAX(SrNo), 0)  AS Max_No from TABLEA where ColumnA = 1 and ColumnB = '$Col3'");
    $row = mysql_fetch_array($sql);


    echo $row["Max_No"];**

//End of for loop
}
?>

如果我们添加上面的SQL,相同的程序只迭代一次并停止?它不会在日志或屏幕上显示任何错误。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

如果您尝试使用for ($col = 2; $col <= $highestColumn; ++ $col){...}进行迭代,它将适用于从A到Z的列,但它无法通过Z(例如,在&#39; A&#39;到&#39; AB&#之间的迭代39。)

为了迭代传递&#39; Z&#39;,你需要将列转换为整数,增量,比较,并再次将其作为字符串:

$MAX_COL = $sheet->getHighestDataColumn();
$MAX_COL_INDEX = PHPExcel_Cell::columnIndexFromString($MAX_COL);
    for($index=0 ; $index <= $MAX_COL_INDEX ; $index++){
    $col = PHPExcel_Cell::stringFromColumnIndex($index);

    // do something, like set the column width...
    $sheet->getColumnDimension($col)->setAutoSize(TRUE);
}

通过这种方式,您可以轻松地通过&#39; Z&#39;列。

答案 1 :(得分:3)

由于您在Excel迭代中对行号使用相同的变量$row,并且对于您的选择查询的结果,因此您遇到问题并不奇怪......

保存Excel行号的整数值将被您从SQL查询中获取的数组覆盖,然后您尝试将该结果数组用作下一个Excel行号

解决方案:为这两个元素使用不同的变量。

$rowData = mysql_fetch_array($sql);
echo $rowData["Max_No"];**