Я пишу скрипт, который читает файлы .xls и .xlsx из почтовых вложений. Я пытаюсь заставить скрипт переключаться между считывателями на основе расширения файла с помощью метода идентификации.PHPExcel переключатель между xls и xlsx
$strSheetNameResult = 'QA Result';
$strSheetNameComments = 'QA Comments';
foreach($aPaths as $strPath) {
try {
$strFileType = PHPExcel_IOFactory::identify($strPath);
echo $strFileType;
$oReader = PHPExcel_IOFactory::createReader($strFileType);
$oReader->setLoadSheetsOnly($strSheetNameResult);
$oSheetData = $oReader->load($strPath)->getActiveSheet();
.xls работает просто отлично, но как только он встречает .xlsx файл, он не использует правильного чтения и дает мне сообщение об ошибке: `Фатальная ошибка:
Call to a member function getCell() on a non-object in C:\xampp\htdocs\cronjob\Test.php on line 37`
линии 37 :
$aSheetData['strProjectName'] = $oSheetData->getCell('B4')->getValue();
Я думаю, эта ошибка вызвана тем, что она не использует правильный считыватель.
$aPaths
:
Array(
[0] => C:\xampp\tmp\105943-632345.xls
[1] => C:\xampp\tmp\112047-634744.xlsx
[2] => C:\xampp\tmp\112069-634917.xls
[3] => C:\xampp\tmp\113840-634955.xls
[4] => C:\xampp\tmp\115760-635374.xlsx
[5] => C:\xampp\tmp\120294-637780.xls
[6] => C:\xampp\tmp\120801-638144.xls
[7] => C:\xampp\tmp\121098-638118.xls
[8] => C:\xampp\tmp\124831-641137.xlsx
[9] => C:\xampp\tmp\127680-642962.xls
[10] => C:\xampp\tmp\127689-642665.xls
[11] => C:\xampp\tmp\127692-642784.xls
[12] => C:\xampp\tmp\127700-643048.xls
[13] => C:\xampp\tmp\127708-643096.xls
[14] => C:\xampp\tmp\128771-642241.xls
[15] => C:\xampp\tmp\129082-647219.xls
[16] => C:\xampp\tmp\129629-647241.xls
[17] => C:\xampp\tmp\134488-647334.xls
[18] => C:\xampp\tmp\134500-646313.xls
[19] => C:\xampp\tmp\134508-644581.xls
[20] => C:\xampp\tmp\134511-646521.xls
[21] => C:\xampp\tmp\134512-646136.xls
[22] => C:\xampp\tmp\134561-650010.xls
)
Кто-нибудь есть идея, почему это не работает, или другой способ переключения между читателями?
Отдельные вызовы, такие как '$ oSheetData = $ oReader-> load ($ strPath) -> getActiveSheet();' в отдельные строки кода, а не доверять тому, что читатель будет успешным и даст вам активный лист; добавить обработку ошибок; проверьте, что Reader на самом деле возвращается 'ident()' для каждого файла (вы его эхом, но не сообщая нам, что отображается) –
В принципе, ваш код должен работать: но если он не работает, e на самом деле не предоставляет нам никакой информации, чтобы диагностировать проблему любым способом. –
Спасибо за быстрый ответ. Я перепроверял файл, и он был идентифицирован как файл xls, когда он был файлом xlsx. Я удалил файл, и теперь он отлично работает! –