Я пишу сценарий импорта цен, который читает из таблицы Excel.
Таблица генерируется с использованием Office 365 Excel, однако я использую LibreOffice Cal c в Ubuntu 18.04 для просмотра во время разработки - нет вопросы здесь.
Я использую phpoffice/phpspreadsheet
в версии 1.10.1
:
"name": "phpoffice/phpspreadsheet",
"version": "1.10.1",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
"reference": "1648dc9ebef6ebe0c5a172e16cf66732918416e0"
},
Я пытаюсь преобразовать данные каждого листа в электронной таблице в массив.
Существует 3 рабочих листа, каждый из которых представляет «Зоны» - Зона 1, Зона 2 и Зона 3.
Я получаю те же данные для Зоны 2 и Зоны 3, что и для Зоны 1 - рабочий лист заголовок возвращается правильно, однако данные не меняются между листами.
/**
* @param Spreadsheet $spreadsheet
*
* @return array
*/
private function parseZones(Spreadsheet $spreadsheet): array
{
$zones = [];
foreach ([0, 1, 2] as $sheetIndex) {
$sheet = $spreadsheet->getSheet($sheetIndex);
// this is correctly reporting 'Zone 1', 'Zone 2' and 'Zone 3' - sheet title is accurate
$sheetName = $sheet->getTitle();
// sheet 0 is accurate
$sheetData = $sheet->toArray();
// on sheet index 1 and 2 - $sheetData is identical to that of sheet index 0
// the XLSX file in OpenOffice / Excel has distinctly different row data - 50% less rows in both cases
// feels like a memory cache issue / some mis-referencing?
}
// retrieving rows using this approach yields the same result:
foreach ($spreadsheet->getAllSheets() as $sheet) {
// this is correctly reporting 'Zone 1', 'Zone 2' and 'Zone 3' - sheet title is accurate
$sheetName = $sheet->getTitle();
// on sheet index 1 and 2 - $sheetData is identical to that of sheet index 0
$sheetData = $sheet->toArray();
}
return $zones;
}
Есть идеи? Спасибо