Для данной задачи нам понадобится свежий Spreadsheet
на момент написания статьи вот так «phpoffice/phpspreadsheet»: «^1.8»,
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
$reader = new Xlsx();
$spreadsheet = $reader->load($_FILES['upload']['tmp_name']); // тут наш файл с таблицей Excel
$worksheet = $spreadsheet->setActiveSheetIndex(0);
$highestRow = $worksheet->getHighestRow();
$highestCol = $worksheet->getHighestColumn();
// данной строкой мы заносим все строки (начиная с A1) в наш массив
$infoByTableReviews = $worksheet->rangeToArray("A1:$highestCol$highestRow", null, true, false, false);
в итоге получим что-то типа вот такого:
array(2) {
[0]=> array(7) {
[0]=> string(3) "URL"
[1]=> string(6) "Имя"
[2]=> string(143) "Дата"
[3]=> string(28) "Оценка"
[4]=> string(10) "Отзыв"
[5]=> string(68) "Рекомендую продукт (1 = да, 0 = нет)"
[6]=> NULL
}
[1]=> array(7) {
[0]=> string(91) "https://test.ru/products/test-product.htm"
[1]=> string(12) "Андрей"
[2]=> float(44453) // а на самом деле 14.09.2021
[3]=> float(5)
[4]=> string(208) "По всей Москве искал данный продукт. Его очень любят мои питомцы. Только у вас его и нашёл. Большое спасибо."
[5]=> float(1)
[6]=> NULL
}
}
ну а с этим уже, как говорится можно и поработать…
Есть один нюанс с форматом даты в Excel. Он немного отличается от всем нам привычного. Но библиотека и об этом позаботилась. И поможет нам следующий код.
foreach ($array as $tableRow) {
$myDate = date('Y-m-d h:i',\PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($tableRow[2]));
}