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->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);
  }

我的 Excel 文件,在 F1 单元格上,我使用以下公式:=C2,但我的脚本的输出显示 F1 为 null 而不是预期的 23.45。

 0 => Data Sheet #1

 array (size=3)
   1 => 
array (size=6)
  'A' => string 'Integer Numbers' (length=15)
  'B' => float 123
  'C' => float 234
  'D' => float -345
  'E' => float 456
  'F' => null
  2 => 
array (size=6)
  'A' => string 'Floating Point Numbers' (length=22)
  'B' => float 1.23
  'C' => float 23.45
  'D' => float 3.45E-6
  'E' => float -45.678
  'F' => float 56.78
  3 => 
array (size=6)
  'A' => string 'Strings' (length=7)
  'B' => string 'Hello' (length=5)
  'C' => string 'World' (length=5)
  'D' => null
  'E' => string 'PHPExcel' (length=8)
  'F' => null

我的单元过滤器类看起来像文档示例中的那样:

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;
   }

}

最佳答案

验证您的读取过滤器,修改 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;
}

关于excel-formula - 使用phpExcel读取一些单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200878/

相关文章:

PHPExcel 意外的 float 行为

excel - 如何从 VBA 代码或公式访问 Excel 数据透视表中选定的报表过滤器值?

excel - 在 XIRR 公式的范围(系列)中包含不相邻的单元格

excel - 将文本格式的 "Day Name, Month Name, Date of Month, Year"转换为 "YYYY-MM-DD"日期格式

php - 发送 header 后关闭网页(php)

php - 使用 PHPExcel 脚本时如何以日期格式格式化某些列

string - 从由 & 符号分隔的三个子字符串中提取两个子字符串

Excel求差值和的公式

php - PHPExcel-锁定正在查看的文件

PHPExcel 生成完全顶起的输出