6

有这个代码,使用 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

4

2 回答 2

19

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

相反,使用getHighestDataColumn()andgetHighestDataRow()方法返回实际包含单元格中数据值的最高行和列。虽然效率较低,但它们实际上在调用时会计算最高的单元格引用,虽然速度较慢,但​​始终准确

于 2013-04-09T13:57:24.950 回答
1
$highestColumn = $sheet->getHighestColumn();    
$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn);
于 2015-06-19T09:38:09.297 回答