如果使用rangeToArray,则PHPExcel在调用getHighestRow()时抛出致命错误

如果使用rangeToArray,则PHPExcel在调用getHighestRow()时抛出致命错误,php,phpexcel,Php,Phpexcel,我使用PHPExcel读取excel数据,如果不设置任何RangeTarray,我可以在其中正常调用getHighestRow() 但是如果我对A1:Z2502使用rangeToArray,同样会抛出错误 致命错误:对非对象调用成员函数getHighestRow() 我的代码: $objPHPExcel = $objReader->load($inputFileName); //Read max of 2500 rows... $objSheet=$objPHPExcel->getA

我使用PHPExcel读取excel数据,如果不设置任何RangeTarray,我可以在其中正常调用getHighestRow()

但是如果我对A1:Z2502使用rangeToArray,同样会抛出错误

致命错误:对非对象调用成员函数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;
请试一试

代码

$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);
编辑的代码

$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的最高值。

我找到了一个解决方案

在Excel
COUNTA()
中添加了一个公式以查找填充行数。。 然后按顺序读这一行

$objSheet->getCellByColumnAndRow(2,1)->getCalculatedValue() 

您不必设置
范围数组()
:因此它不可能影响对
getHighestRow()
的后续调用。调用
rangeToArray()
只需将工作表对象中的数据作为标准PHP返回,它不设置任何内容,也不返回任何特殊内容

如果您试图在PHP数组上调用
getHighestRow()
,那么它将返回一个错误,因为PHP数组没有方法。只能对工作表对象调用
getHighestRow()

如果您想知道如何获得PHP数组的大小,可以使用PHP自己的
count()
函数

e、 g

但这仅在范围从第1行开始时有效

编辑

或者,调用
RangeTarray()
,将
$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); 
$inputFileType='Excel5';
$inputFileName='./sampleData/example1.xls';
/**定义一个实现PHPExcel\u Reader\u IReadFilter*/
类MyReadFilter实现PHPExcel\u Reader\u IReadFilter
{ 
公共函数readCell($column,$row,$worksheetName=''){
//仅读取第1至2504行和A至Z列
如果($row>=1&&$row setReadFilter($filterSubset);
/**仅将与我们的筛选器匹配的行和列加载到PHPExcel**/
$objPHPExcel=$objReader->load($inputFileName);
又一次编辑

每当你添加评论时,你想做的事情就会变得越来越不清楚


如果在加载工作表之前需要知道工作表中有多少行和列,那么每个读取器都会实现一个
listWorksheetInfo()
方法返回每个电子表格文件的详细信息数组

rangeToArray
方法返回
数组
。而
getHighestRow
PHPExcel\u工作表
类的方法。因此,在您的情况下不能使用
getHighestRow
。请改用
数组*
函数。@hindmost:查找getHighestRow的等效代码?
getHighestRow
在任何情况下都会返回整个工作表上的最高行号。
rangeToArray
和任何其他方法都不会影响此结果。@hindmost我编写了代码,但他没有尝试。因此,他无法找到。您没有告诉如何查找getHighestRow()?我没有错过。如果您编写这些代码,您将通过getHighestRow方法获得最高行。您有一个错误,它是
致命错误:对非对象调用成员函数getHighestRow()
。我的代码可以处理此问题。您确定吗?
$OBJWorket=$objPHPExcel->setActiveSheetIndex(0)它是什么?为什么我添加了这个?我试过了,还是一样的错误:
致命错误:调用未定义的方法PHPExcel::RangeTarray()
这不是一个解决办法,我完全不明白为什么需要这样做。
RangeTarray()
getHighestRow()的任何调用都没有任何影响,也没有任何影响
getHighestRow()
方法返回PHPExcel\u工作表对象中的最高行号,而不是PHP的最高行号array@MarkBaker:我需要获取特定单元格范围内的最高行值..如果工作表中有其他我在使用
getHighestRow()时未查找的对象
;我不确定是谁投票支持了OEASLAN的答案,这并不能解决我的问题!!你是说
Excel count()
函数?不!我是说PHP count()函数函数,该函数将返回数组中的条目数。只有在将数据存储到数组中之后,才能使用该函数。在将数据存储到数组中之前,我需要使用该函数。因为在将excel数据存储到数组中之前,我需要做一些检查。如果您正在将数据存储到数组中,这就是对
RangeTarray()
的调用所做的
键($objSheet)
适用于任何PHP数组……它返回当前数组元素的键……它与工作表或范围无关,因为PHP没有工作表或范围的概念