Excel formula 使用phpExcel读取某些单元格

Excel formula 使用phpExcel读取某些单元格,excel-formula,phpexcel,Excel Formula,Phpexcel,我试图使用过滤器读取一些工作表,但问题是当这些单元格使用单元格时,我无法获取单元格值 $objReader = PHPExcel_IOFactory::createReader('Excel5'); $objReader->setLoadSheetsOnly('Data Sheet #1'); $myFilter = new CellReadFilter(1, 7, range('A', 'F')); $objReader->setReadDataOnly(true

我试图使用过滤器读取一些工作表,但问题是当这些单元格使用单元格时,我无法获取单元格值

  $objReader = PHPExcel_IOFactory::createReader('Excel5');
  $objReader->setLoadSheetsOnly('Data Sheet #1');

  $myFilter = new CellReadFilter(1, 7, range('A', 'F'));
  $objReader->setReadDataOnly(true);
  $objReader->setReadFilter($myFilter);

  $objPHPExcel = $objReader->load('sampleData/example1.xls');

  $loadedSheetNames = $objPHPExcel->getSheetNames();
  foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
     echo $sheetIndex, ' => ', $loadedSheetName, '<br />';
     $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
     var_dump($sheetData);
  }
我的cell filter类如文档示例中所示:

class CellReadFilter implements PHPExcel_Reader_IReadFilter {

   private $_startRow = 0;
   private $_endRow = 0;
   private $_column = array();

   public function __construct($startRow, $endRow, $column) {
      $this->_startRow = $startRow;
      $this->_endRow = $endRow;
      $this->_column = array_merge($column, array('AA'));
   }

   public function readCell($column, $row, $worksheetName = '') {
      if ($row >= $this->_startRow && $row <= $this->_endRow) {
         if (in_array($column, $this->_column)) { return true; }
      }
      return false;
   }

}
类CellReadFilter实现PHPExcel\u Reader\u IReadFilter{ 私有$_startRow=0; 私有$_endRow=0; 私有$_列=数组(); 公共函数构造($startRow、$endRow、$column){ $this->_startRow=$startRow; $this->_endRow=$endRow; $this->_column=array_merge($column,array('AA')); } 公共函数readCell($column,$row,$worksheetName=''){ 如果($row>=$this->\u startRow&&$row\u endRow){ if(在_数组($column,$this->_column)中){return true;} } 返回false; } }
验证对于读取筛选器,修改readCell以测试应用的标准,并确定哪些单元格符合标准以及接受/拒绝的原因:

public function readCell($column, $row, $worksheetName = '') {
    echo 'Testing worksheet ', $worksheetName, 'row ', $row, ' column ', $column, PHP_EOL;
    if ($row >= $this->_startRow && $row <= $this->_endRow) {
        'Cell is within row range',PHP_EOL;
        if (in_array($column, $this->_column)) { 
            'VALID: Cell is within column range',PHP_EOL;
            return true; 
        }
        'INVALID: Cell is outside column range',PHP_EOL;
    } else {
        'INVALID: Cell is outside row range',PHP_EOL;
    }
    return false;
}
公共函数readCell($column、$row、$worksheetName=''){
echo“测试工作表”、$worksheetName、“行”、$row、“列”、$column、PHP_EOL;
如果($row>=$this->\u startRow&&$row\u endRow){
“单元格在行范围内”,PHP_EOL;
如果(在_数组($column,$this->_column)中){
“有效:单元格在列范围内”,PHP_EOL;
返回true;
}
“无效:单元格超出列范围”,PHP_EOL;
}否则{
“无效:单元格超出行范围”,PHP_EOL;
}
返回false;
}

如果没有读取过滤器,它能正常工作吗?@MarkBaker你说得对。如果我不使用过滤器,则输出为预期输出(公式结果值且不为null)。请尝试通过在readCell方法中放置一些回音来验证读取过滤器,以在测试时显示每个单元格引用,以及测试和结果在CellReadFilter类的readCell()方法中放置一些回音语句。。。您确实可以访问它,因为它不是PHPExcel的标准部分,您已经在这里发布了代码。当您不使用readfilter时,PHPExcel正在工作,因此问题在于readfilter筛选器根本不访问单元格,仅访问每个单元格的工作表、行和列引用。。。。并根据是否应过滤该单元格返回true或false
public function readCell($column, $row, $worksheetName = '') {
    echo 'Testing worksheet ', $worksheetName, 'row ', $row, ' column ', $column, PHP_EOL;
    if ($row >= $this->_startRow && $row <= $this->_endRow) {
        'Cell is within row range',PHP_EOL;
        if (in_array($column, $this->_column)) { 
            'VALID: Cell is within column range',PHP_EOL;
            return true; 
        }
        'INVALID: Cell is outside column range',PHP_EOL;
    } else {
        'INVALID: Cell is outside row range',PHP_EOL;
    }
    return false;
}