Столбец gethighest в xlsx не работает
Имейте этот код, используя PHPExcel
public function getHighestColumn()
{
return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
}
public function getHighestRow()
{
return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
}
У меня есть один и тот же файл excel, сохраненный в .xls и .xlsx Он состоит из 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 answers
Строки и столбцы подсчитываются по getHighestColumn()
и getHighestRow()
, если они содержат что-либо (включая информацию о стиле), а не просто содержимое. Эти значения также вычисляются при загрузке электронной таблицы, поэтому могут быть неточными, если впоследствии вы добавите на лист новые строки или столбцы.
Вместо этого используйте методы getHighestDataColumn()
и getHighestDataRow()
для возврата самой высокой строки и столбца, которые фактически содержат значения данных в ячейках. Будучи менее эффективными, они фактически вычисляют самую высокую ячейку ссылка при вызове, что медленнее, но всегда точно
$highestColumn = $sheet->getHighestColumn();
$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn);