05.04.2014 PHP сортировка массива по значению - array_multisort 02.04.2014 Ошибка php undefined symbol php_json_encode 22.07.2013 Как открыть Excel файл с помощью PHP 29.02.2012 Как проверить пустой массив или нет? 29.02.2012 JQUERY: как вести логи действий пользователя 29.02.2012 PHP: Как через POST передать множественный SELECT 09.04.2011 Работа корзины 22.03.2011 Filter_var или проверка email, url, ip на соответсвие без использования регулярных выражений
#146

Как открыть Excel файл с помощью PHP

Для открытия Excel файлов с помощью PHP существуют несколько библиотек.
Одна из них называется PHPExcel.

Инструмент с достаточно большим функционалом, можно читать, редактировать и создавать Excel документы.
Причем можно выбрать конкретный лист для чтения в документе.

Но существуют и недостатки данного решения - при работе с большими файлами можно положить сервер.
В интернете предлагается несколько решений данной проблемы, но лучше выбрать другой способ, каких в принципе не так мало.

Однако, для файлов небольшого размера библиотеки PHPExcel более чем достаточно.

Скачать и найти документацию можно на официальном сайте.

Минимально необходимый код для открытия документа и чтения его ячеек:
  1. // подключаем один из классов библиотеки
  2. include_once 'PHPExcel/IOFactory.php';
  3.  
  4. // загружаем документ excel.xls 
  5. $objPHPExcel = PHPExcel_IOFactory::load("excel.xls");
  6.  
  7. // выбираем активный лист для работы (начинаются с нуля)
  8. $objPHPExcel->setActiveSheetIndex(0);
  9. $aSheet = $objPHPExcel->getActiveSheet();
  10.  
  11. echo '<table cellpadding="0" cellspacing="0">';
  12.  
  13. // получаем итератор строки и проходим по нему циклом
  14. foreach($aSheet->getRowIterator() as $row){
  15.     echo "<tr>";
  16.  
  17.     // получаем итератор ячеек текущей строки
  18.    $cellIterator = $row->getCellIterator();
  19.  
  20.    // проходим циклом по ячейкам строки
  21.    foreach($cellIterator as $cell){
  22.          // выводим значения
  23.         echo "<td>".$cell->getCalculatedValue()."</td>";
  24.    }
  25.  
  26.    echo "</tr>";
  27. }
  28.  
  29. echo '</table>';


Для удобства, вместо предыдущего кода, можно использовать данную функцию, на выходе получаем массив:
  1. //Функция принимает имя xls файла, считывает его, занося данные ячеек строк в массив, и возвращает этот массыв как результат
  2. 	function getXLS($xls){
  3. 		include_once 'Classes/PHPExcel/IOFactory.php';
  4. 		$objPHPExcel = PHPExcel_IOFactory::load($xls);
  5. 		$objPHPExcel->setActiveSheetIndex(0);
  6. 		$aSheet = $objPHPExcel->getActiveSheet();
  7.  
  8. 		$array = array(); //этот массив будет содержать массивы содержащие в себе значения ячеек каждой строки
  9. 		$array_articles = array();
  10.  
  11. 		//получим итератор строки и пройдемся по нему циклом
  12. 		foreach($aSheet->getRowIterator() as $row){
  13. 			//получим итератор ячеек текущей строки
  14. 			$cellIterator = $row->getCellIterator();
  15. 			//пройдемся циклом по ячейкам строки
  16. 			$item = array();//этот массив будет содержать значения каждой отдельной строки
  17.  
  18. 			$i = 0;
  19. 			foreach($cellIterator as $cell){
  20. 				$i++;
  21.  
  22. 				if($i == 1)
  23. 				{
  24. 				      $array_articles[] = $cell->getCalculatedValue();
  25. 				}
  26.  
  27. 				//заносим значения ячеек одной строки в отдельный массив
  28. 				array_push($item, $cell->getCalculatedValue());
  29. 			}
  30. 			//заносим массив со значениями ячеек отдельной строки в "общий массв строк"
  31. 			array_push($array, $item);
  32. 		}
  33. 		return array($array,$array_articles);
  34. 	}
  35.  
  36. // вызов функции
  37. $xls_url = 'name.xls';
  38. $xlsData = getXLS($_SERVER["DOCUMENT_ROOT"].$xls_url); // извлеаем данные из XLS, подставляем полный путь до документа
  39.  
  40. // обработка полученного массива в цикле
  41. foreach($xlsData[0] as $key=>$value)
  42. {
  43.      echo $value[0].' / '.$value[1].'<br>';
  44. }


Предупреждение:
С некоторыми файлами работает некорректно, отказывается их открывать, выдает белый экран.
Скорей всего, связано это с тем, что структура файлов повреждена, такое может быть если файл создан в MacOS.

Более подробную документацию на русском можно найти здесь.

30.12.2010 PHP обработчик ошибок - php.ini error_reporting 17.12.2009 GDLib и php.ini, как проверить какие форматы поддерживает сервер: 22.03.2011 Засекаем время генерации страницы 22.03.2011 Как определить количество посетителей на сайте онлайн 16.12.2009 О картинках средствами PHP
О сайте