PHPExcel 遍历行和列

PHPExcel loop through rows and columns

需要帮助来确定我面临的奇怪问题。我确实尝试在堆栈溢出中搜索但没有找到任何可能的答案。

这里是示例程序,可以在 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 循环结束之前添加任何内容。它只迭代一次并在不抛出任何 php 错误的情况下停止。

例如

.....

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 同一个程序只迭代一次就停止了?它不会在日志或屏幕上显示任何错误。

在此先感谢您的帮助!。

由于您对 Excel 迭代中的行号和 select 查询的结果使用相同的变量 $row,因此您运行 成问题.....

保存 Excel 行号的整数值正在被您从 SQL 查询中获得的数组覆盖,然后您试图使用该结果数组作为下一个Excel行数

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

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

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

为了迭代传递 'Z',您需要将列转换为整数、递增、比较,然后再次将其作为字符串获取:

$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);
}

有了这个,您可以轻松迭代传递 'Z' 列。