如果使用rangeToArray,则PHPExcel在调用getHighestRow()时抛出致命错误
我使用PHPExcel读取excel数据,如果不设置任何RangeTarray,我可以在其中正常调用getHighestRow() 但是如果我对A1:Z2502使用rangeToArray,同样会抛出错误 致命错误:对非对象调用成员函数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
$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没有工作表或范围的概念