Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Непонятка с PHPExcel

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: обработка нескольких файлов подряд
kapUstin
Отправлено: 05 Апреля, 2015 - 22:44:18
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Есть файлы xls, все лежат в одной папке, структура столбцов одинаковая, только разное количество строк
Стоит задача объединения их в один файл. Решил сделать через PHPExcel.
Накидал скрипт, который открывает файл, удаляет ненужные строки и столбцы и сохраняет все, что осталось в новый файл.
Но если применяю эти действия в цикле для всех файлов, вылетает ошибка
Notice: Undefined offset: -1 in /PHPExcel_1_8/Classes/PHPExcel.p hp on line 467
Fatal error: Call to a member function removeRow() on a non-object in /parts.php on line 60

В чем может быть проблема?
 
 Top
Sail
Отправлено: 05 Апреля, 2015 - 23:07:42
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




kapUstin пишет:
Notice: Undefined offset: -1 in /PHPExcel_1_8/Classes/PHPExcel.p hp on line 467
Fatal error: Call to a member function removeRow() on a non-object in /parts.php on line 60
В чем может быть проблема?

Чёрным-же по серому написано: предупреждение об отсутствии элемента по индексу '-1' и ошибка вызова метода элемента, не являющегося объектом.
Очевидно, в результате лишней итерации цикла.
 
 Top
kapUstin
Отправлено: 05 Апреля, 2015 - 23:32:03
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Как можно побороть? я не особо шарю
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach ($files_xls as $file_xls) {
  2.     $objReader = new PHPExcel_Reader_Excel5();
  3.     $objPHPExcel = $objReader->load("unzip_price/$file_xls");
  4.     $objPHPExcel->getActiveSheet()->removeRow(1,3);
  5.     $objPHPExcel->getActiveSheet()->removeColumn('E');
  6.     // добавление нового столбца
  7.     $objPHPExcel->getActiveSheet()->insertNewColumnBefore('A', 1);
  8.     // добавить заголовок для нового столбца
  9.     $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Производитель');
  10.  
  11.     // Сохранить все изменения в файл
  12.     $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
  13.     $objWriter->save("write_files/$file_xls");
  14.     unset($objPHPExcel);
  15.  
  16. }
 
 Top
kapUstin
Отправлено: 06 Апреля, 2015 - 09:43:21
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Нормально все, из 30 файлов, один битый был, phpexcel его открыть не мог, вот и ошибка.
Исключил его из обработки, все заработало как надо
 
 Top
RickMan
Отправлено: 06 Апреля, 2015 - 12:30:25
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Если он был битый, то скорее всего после load в objPHPExcel было бы пусто, а не объект. Думаю достаточно было бы проверить на это, или гуглить в направлении "phpexcel load error".
 
 Top
Sail
Отправлено: 06 Апреля, 2015 - 12:35:03
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




kapUstin пишет:
Нормально все, из 30 файлов, один битый был, phpexcel его открыть не мог, вот и ошибка.
Исключил его из обработки, все заработало как надо

Используйте конструкцию try{} catch{} для исключения таких ситуаций.
Например:
PHP:
скопировать код в буфер обмена
  1. foreach ($files_xls as $file_xls) {
  2.     try {
  3.         $objReader = new PHPExcel_Reader_Excel5();
  4.         $objPHPExcel = $objReader->load("unzip_price/$file_xls");
  5.     } catch (Exception $exc) {
  6.         // записать в лог
  7.         continue;
  8.     }
  9. // .....
  10. }
 
 Top
kapUstin
Отправлено: 08 Апреля, 2015 - 10:40:18
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Sail пишет:
kapUstin пишет:
Нормально все, из 30 файлов, один битый был, phpexcel его открыть не мог, вот и ошибка.
Исключил его из обработки, все заработало как надо

Используйте конструкцию try{} catch{} для исключения таких ситуаций.
Например:
PHP:
скопировать код в буфер обмена
  1. foreach ($files_xls as $file_xls) {
  2.     try {
  3.         $objReader = new PHPExcel_Reader_Excel5();
  4.         $objPHPExcel = $objReader->load("unzip_price/$file_xls");
  5.     } catch (Exception $exc) {
  6.         // записать в лог
  7.         continue;
  8.     }
  9. // .....
  10. }


Спасибо сейчас попробую, а-то простое исключение одного файла не айс вариант.
А так все сделал, все работает
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB