xlsx中的getHighestColumn不起作用

时间:2013-04-09 13:37:02

标签: php phpexcel

使用PHPExcel

获取此代码
    public function getHighestColumn()
    {
      return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
    }

    public function getHighestRow()
    {
      return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
    }

我在.xls和.xlsx中保存了相同的excel文件 它有10列(从B到K)和10行

当我使用getHighestColumn时,在.xls中我得到'K'(正确),但是在.xlsx中我得到了AMK(所有excel工作表中的最后一列) 关于行,使用.xls我得到10,但在.xlsx我得到1024。 我非常确定,除了表格外,工作表的其余部分都是空白的。

为什么我会得到不同的结果?

以下是我正在使用的读者

public function openReader($filePath)
    {
      //aca determinamos cual tipo es para saber que reader es
    $reader_5 = new PHPExcel_Reader_Excel5();
    $reader_07 = new PHPExcel_Reader_Excel2007();

    $inputFileType = $this->canRead(new PHPExcel_Reader_Excel5(), $filePath, self::EXCEL5);

    if($inputFileType === '')
      $inputFileType = $this->canRead(new PHPExcel_Reader_Excel2007(), $filePath, self::EXCEL2007);
    else
    {
      throw new Exception("No se puede procesar el archivo; el formato no es correcto");
    }
    return PHPExcel_IOFactory::createReader($inputFileType);
    }


private function canRead($reader, $path, $readerType)
  {
    return $reader->canRead($path) ? $readerType: '';
  }

public function persist($fileName)
    {
      $filePath = sfConfig::get('sf_upload_dir').'\\'.$fileName;

      $this->objReader = $this->openReader($filePath);
      //Set only first Sheet
      $this->setOnlyFirstSheet();

      $this->createObjPHPExcel($filePath);

      echo $this->getHighestColumn();
      echo $this->getHighestRow();
     }

我已经使用var_dump进行了检查,并且在每种情况下我都使用了正确的读者。

php 5.3.5,PHPExcel 1.7.8,Symfony 1.4

2 个答案:

答案 0 :(得分:19)

行和列由getHighestColumn()getHighestRow()计算,如果它们包含任何内容(包括样式信息),而不是简单地包含内容。加载电子表格时也会计算这些值,因此如果随后向工作表添加新行或列,则可能不准确。

而是使用getHighestDataColumn()getHighestDataRow()方法返回实际包含单元格中数据值的最高行和列。虽然效率较低,但实际上它们在调用时会计算出最高的单元格参考值,这个参考值较慢但始终准确

答案 1 :(得分:1)

$highestColumn = $sheet->getHighestColumn();    
$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn);