需要帮助识别我所面临的奇怪问题。我确实尝试过堆栈溢出,但没有找到任何可能的答案。
以下示例程序可以显示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,相同的程序只迭代一次并停止?它不会在日志或屏幕上显示任何错误。
提前感谢您的帮助!
答案 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"];**