beget banner 468x60beget banner 728x90beget banner 930x180kwork banner 468x60kwork banner 728x90kwork banner 930x180etxt banner 468x60etxt banner 728x90etxt banner 930x180

Как сделать чтение и выгрузку excel на php

В профессии разработчика часто приходится сталкиваться с работой с табличными данными (списки товаров, новостей, мероприятий). С точки зрения пользователя проще всего работать с excel или google sheets api и заказчик зачастую может прислать данные для импорта на сайт в одном из этих форматов. Сегодня мы рассмотрим простую библиотеку SimpleXLSX, которая умеет конвертировать excel-файл в формате .xlsx в обычный массив на php.

Скачать библиотеку вы можете по ссылке с github. Я работаю в основном с WordPress, поэтому ее подключение у меня выглядит следующим образом:

require_once get_template_directory() . '/includes/plugin-additions/simplexlsx.class.php';

В качестве примера мы будем использовать простой пример списка городов:

Обработка такого массива может выглядеть следующим образом: первую строку мы собираем в массив заголовков, остальные строки соотносим с этими заголовками, если файла не существует, то возвращаем ошибку.

// Simple XLSX Parser Template
$fileImport = get_stylesheet_directory() . '/data/example.xlsx';
if ( $xlsx = SimpleXLSX::parse( $fileImport )) {
	$sheetData = $xlsx->rows(1);

	$excel = array();
	$names = array();
	foreach ( $sheetData as $keyD => $sheetRow ) {
		if ( $keyD == 0 ) {
			foreach	( $sheetRow as $keyC => $sheetCol ) {
				if ( $sheetCol ) $names[$keyC] = $sheetCol;
			}
		} else {

			if ( $sheetRow['0'] ) $title = $sheetRow['0'];

			foreach	( $sheetRow as $keyC => $sheetCol ) {
				if ( isset( $title ) && $sheetCol ) {
					$excel[$title][$names[$keyC]] = $sheetCol;
				}
			}

			unset( $title );

		} // // end if $keyD != 0
	} // end foreach $sheetData
	var_dump( $excel );

} else {
	var_dump( SimpleXLSX::parse_error() );
}

Итоговый массив $excel в этом примере выглядит так:

array(5) {
  ["Архангельск"]=>
  array(4) {
    ["title"]=>
    string(22) "Архангельск"
    ["english"]=>
    string(11) "Arkhangelsk"
    ["ISO"]=>
    string(6) "RU-ARK"
    ["population"]=>
    string(7) "346 979"
  }
  ["Волгоград"]=>
  array(4) {
    ["title"]=>
    string(18) "Волгоград"
    ["english"]=>
    string(9) "Volgograd"
    ["ISO"]=>
    string(6) "RU-VGG"
    ["population"]=>
    string(9) "1 008 998"
  }
  ["Кемерово"]=>
  array(4) {
    ["title"]=>
    string(16) "Кемерово"
    ["english"]=>
    string(8) "Kemerovo"
    ["ISO"]=>
    string(6) "RU-KEM"
    ["population"]=>
    string(7) "556 382"
  }
  ["Тамбов"]=>
  array(4) {
    ["title"]=>
    string(12) "Тамбов"
    ["english"]=>
    string(6) "Tambov"
    ["ISO"]=>
    string(6) "RU-TAM"
    ["population"]=>
    string(7) "292 140"
  }
  ["Хабаровск"]=>
  array(5) {
    ["title"]=>
    string(18) "Хабаровск"
    ["english"]=>
    string(10) "Khabarovsk"
    ["ISO"]=>
    string(24) "RU-KHA"
    ["population"]=>
    string(24) "616 372"
  }
}

PS. Эта библиотека не умеет писать в excel-файлы и в случае такой необходимости есть отдельная библиотека simplexlsxgen того же автора.

kwork banner 480x320kwork banner 728x90kwork banner 120x600skillbox banner 480x320skillbox banner 728x90skillbox banner 120x600jivo banner 480x320jivo banner 728x90jivo banner 120x600

Читайте также

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 2.4 / 5. Количество оценок: 37

Оценок пока нет. Поставьте оценку первым.

Похожие посты