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' 列。
需要帮助来确定我面临的奇怪问题。我确实尝试在堆栈溢出中搜索但没有找到任何可能的答案。
这里是示例程序,可以在 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' 列。