В профессии разработчика часто приходится сталкиваться с работой с табличными данными (списки товаров, новостей, мероприятий). С точки зрения пользователя проще всего работать с 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 того же автора.