У меня есть лист Excel, где я хочу получить диапазон A1:D4
в массив PHP.
Для этого я использую PHPExcel
, как показано ниже. У меня есть простой класс Excel
:
Excel.php
public function __construct($file)
{
if ($file instanceof \SplFileInfo) {
$filename = $file->getRealPath();
} else {
$filename = $file;
}
$this->objPHPExcel = \PhpOffice\PhpSpreadsheet\IOFactory::load($filename);
$this->objPHPExcel->setActiveSheetIndex(0);
}
Затем у меня есть простая функция для получения диапазона с помощью rangeToArray()< /а> функция:
public function getRange($range)
{
$spreadsheet = $this->objPHPExcel;
return $spreadsheet->rangeToArray($range,' ', true, true, true);
}
$excel = new ExcelManipulator(storage_path() . '/app/temp_files/myfile.xlsx');
$array = $excel->getRange($range);
return response()->json(['result' => $array], 200);
Теперь проблема в том, что вышеуказанная функция «переключает» столбцы. См. вывод ниже:
[
'1': [
"A": " ",
"B": " ",
"C": " ",
"D": " "
],
'2': [
"A": "Company",
"B": "Acme Inc",
"C": " ",
"D": " "
],
'3': [
"A": "Address",
"B": "New York",
"C": " ",
"D": " "
],
'4': [
"A": " ",
"B": " ",
"C": " ",
"D": " "
]
]
Как вы можете видеть в массиве для строк 2
и 3
, текст компания и адрес уже начинаются с Column A
, тогда как они должны начинаться с Column B
\PhpOffice\PhpSpreadsheet
- person oliverbj   schedule 20.12.2019$this->objPHPExcel->setActiveSheetIndex(0)
чему-либо? Потому что сейчас похоже, что вы вызываетеrangeToArray
в электронной таблице, а не в рабочем листе. - person D Malan   schedule 20.12.2019$range
? - person Hafez Divandari   schedule 22.12.2019var_dump($spreadsheet->rangeToArray('A1:D4',' ', true, true, true))
,var_dump((array)$spreadsheet->rangeToArray('A1:D4',' ', true, true, true))
иvar_dump($spreadsheet->rangeToArray('A1:D4',' ', true, true, false))
- person mvorisek   schedule 24.12.2019