我正在使用PHPExcel读取excel数据,如果不设置任何rangeToArray,我可以正常调用getHighestRow()。
但是如果我对A1使用rangeToArray,则抛出同样的错误:Z2502。
致命错误:在非对象
上调用成员函数getHighestRow()
我的代码:
$objPHPExcel = $objReader->load($inputFileName);
//Read max of 2500 rows...
$objSheet=$objPHPExcel->getActiveSheet()->rangeToArray("A1:Z2504", null, true, true, true);
$no_of_rows=$objSheet->getHighestRow();echo $no_of_rows;
答案 0 :(得分:0)
请试试。
<强>代码强>
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$objWorksheet->rangeToArray("A1:Z2504", null, true, true, true);
已编辑的代码
$objPHPExcel = $objReader->load($inputFileName);
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true);
如果您使用这些代码,则可以获得最高的Excel值。
答案 1 :(得分:0)
您没有设置 rangeToArray()
:因此它不可能影响对getHighestRow()
的后续调用。对rangeToArray()
的调用只是将工作表对象中的数据作为标准PHP array返回,它不会设置任何内容,也不会返回任何特殊内容。
如果你试图在PHP数组上调用getHighestRow()
,那么它将返回错误,因为PHP数组没有方法。您只能在工作表对象上调用getHighestRow()
。
如果您想知道如何获取PHP数组的大小,可以使用PHP自己的count()
函数
e.g。
$lastRow = count($objSheet);
虽然只有当您的范围从第1行
开始时才会有效修改强>
或者,您使用rangeToArray()
参数作为$returnCellRef
来调用true
,因此生成的数组将被电子表格的行和列编入索引。
这意味着:
end($objSheet); // move the internal pointer to the end of the $objSheet array
$lastRow = key($objSheet); // fetches the key of the element pointed to by the internal pointer
将返回$ lastRow,其中包含$ objSheet数组中最高行号的行号
编辑#2
如何仅从电子表格文件加载单元格A1-Z2504:
$inputFileType = 'Excel5';
$inputFileName = './sampleData/example1.xls';
/** Define a Read Filter class implementing PHPExcel_Reader_IReadFilter */
class MyReadFilter implements PHPExcel_Reader_IReadFilter
{
public function readCell($column, $row, $worksheetName = '') {
// Read rows 1 to 2504 and columns A to Z only
if ($row >= 1 && $row <= 2504) {
if (in_array($column, range('A','Z'))) {
return true;
}
}
return false;
}
}
/** Create an Instance of our Read Filter **/
$filterSubset = new MyReadFilter();
/** Create a new Reader of the type defined in $inputFileType **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/** Tell the Reader that we want to use the Read Filter **/
$objReader->setReadFilter($filterSubset);
/** Load only the rows and columns that match our filter to PHPExcel **/
$objPHPExcel = $objReader->load($inputFileName);
又一次编辑
每当您添加评论时,您尝试做的事情都会变得越来越不清晰。
如果您需要知道 加载前的工作表中有多少行和列,那么每个读者都会实现一个listWorksheetInfo()
方法返回一个有关每个电子表格文件的详细信息
答案 2 :(得分:-2)
我为此找到了解决方案..
在Excel COUNTA()
中添加了一个公式,以查找已填充的行数。
然后按
$objSheet->getCellByColumnAndRow(2,1)->getCalculatedValue()