PHPExcel не может загрузить электронную таблицу с формулой

1

При попытке создать читатель для файла я получаю некоторые странные ошибки. Я использовал ветвь dev-master, затем переключился на 1.8.1, но это, похоже, не имело никакого значения, поэтому я думаю, что это электронная таблица, что проблема.

Существует довольно много формул, используемых в электронной таблице, например:

=IFERROR(VLOOKUP($A$1*1,'List'!A:H,P5,FALSE),"")
=IF(A15>0,1,"")
=IFERROR(VLOOKUP($A15,'Master'!$A:$R,18,FALSE)*P15,"")
=IF(A16=0,"",IFERROR(VLOOKUP($A16,'Master'!$A:$O,2,FALSE),"Not Available"))

PHP:

$objReader = \PHPExcel_IOFactory::createReaderForFile($filename);
$r = $objReader->load($filename);

Ошибка:

PHP Notice:  Undefined index: $ in
/var/www/html/myApp/vendor/phpoffice/phpexcel/Classes/PHPExcel/Cell.php
on line 809 PHP Stack trace: PHP   1. {main}()
/var/www/html/myApp/app/console:0 PHP   2.
Symfony\Component\Console\Application->run()
/var/www/html/myApp/app/console:22 PHP   3.
Symfony\Bundle\FrameworkBundle\Console\Application->doRun()
/var/www/html/myApp/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:121
PHP   4. Symfony\Component\Console\Application->doRun()
/var/www/html/myApp/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:96
PHP   5. Symfony\Component\Console\Application->doRunCommand()
/var/www/html/myApp/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:191
PHP   6. Symfony\Component\Console\Command\Command->run()
/var/www/html/myApp/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:904
PHP   7. App\MyApp\ImportBundle\Command\ImportCommand->execute()
/var/www/html/myApp/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:244
PHP   8. App\MyApp\ImportBundle\ImportService->import()
/var/www/html/myApp/src/App/MyApp/ImportBundle/Command/ImportCommand.php:35
PHP   9. App\MyApp\ImportBundle\Other\Importer->import()
/var/www/html/myApp/src/App/MyApp/ImportBundle/ImportService.php:44 PHP
10. App\MyApp\ImportBundle\Other\Importer->createAllocation() /var/www/html/myApp/src/App/MyApp/ImportBundle/Other/Importer.php:43
PHP  11.
App\MyApp\ImportBundle\Other\AllocationImporter->import()
/var/www/html/myApp/src/App/MyApp/ImportBundle/Other/Importer.php:70
PHP  12.
App\MyApp\ImportBundle\AbstractSpreadsheetReader->loadSpreadsheet()
/var/www/html/myApp/src/App/MyApp/ImportBundle/Other/AllocationImporter.php:26
PHP  13. PHPExcel_Reader_Excel2007->load()
/var/www/html/myApp/src/App/MyApp/ImportBundle/AbstractSpreadsheetReader.php:31
PHP  14. PHPExcel_Worksheet_AutoFilter->setRange()
/var/www/html/myApp/vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel2007.php:1012
PHP  15. PHPExcel_Cell::rangeBoundaries()
/var/www/html/myApp/vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet/AutoFilter.php:131
PHP  16. PHPExcel_Cell::columnIndexFromString()
/var/www/html/myApp/vendor/phpoffice/phpexcel/Classes/PHPExcel/Cell.php:729
  • 0
    начните работать с пустой электронной таблицей, начните добавлять свои формулы один за другим и посмотрите, какая из них вызывает рвоту phpexcel. может быть, вы нашли ошибку ...
Теги:
composer-php
import-from-excel
phpexcel

1 ответ

2
Лучший ответ

Одна из проблем - это такие формулы, как

=IFERROR(VLOOKUP($A$1*1,'List'!A:H,P5,FALSE),"")

PHPExcel не полностью поддерживает ссылки на строки или столбцы, такие как 'List'!A:H или 'Master'!$A:$R

Однако он поддерживает ссылки на диапазон, поэтому 'List'!A1:H1000 или 'Master'!$A1:$R1024 будет действителен

РЕДАКТИРОВАТЬ

Однако из дампа стека это выглядит как проблема в автофильтре

В качестве "быстрого и грязного" взлома вы можете проверить файл Classes/PHPExcel/Cell.php и метод rangeBoundaries() на линии 715 или вокруг rangeBoundaries() (в зависимости от конкретной версии/сборки, в которой вы работаете), найдите

// Uppercase coordinate
$pRange = strtoupper($pRange);

и попробуйте изменить его на:

// Uppercase coordinate
$pRange = strtoupper(str_replace('$', '', $pRange));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню