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

时间:2014-03-02 07:23:25

标签: php phpexcel

我正在使用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;

3 个答案:

答案 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()