PHP-PHPExcel Range to Array игнорирует пустой столбец
У меня есть ниже лист Excel, где я хочу получить диапазон A1:D4
в массив PHP.
Для этого я использую PHPExcel
как показано ниже. У меня есть простой Excel
Excel.php
И тогда у меня есть простая функция для получения диапазона, используя функцию rangeToArray() :
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);
}
Теперь проблема заключается в том, что вышеупомянутая функция "переключает" столбцы. Смотрите ниже Выходные данные:
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






Ответы - PHP-PHPExcel Range to Array игнорирует пустой столбец / PHP - PHPExcel Range to Array ignores empty column

19.12.2019 05:16:43
Вы можете попробовать это сделать
function getRange($range, $inputFileName)
{
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFilename);
return $spreadsheet->getActiveSheet()->rangeToArray($range," ", true, true, true);
}
$inputFilename = storage_path() . '/app/temp_files/myfile.xlsx';
$array = getRange($range, $inputFilename);


24.12.2019 06:23:15
Это прекрасно работало для меня, используя php 7.2.26 и phpoffice/phpspreadsheet 1.10.1. Я создал xlsx-файл с теми же значениями ячеек, что и у вас.
$excel = new Excel('file.xlsx');
$range = 'A1:D4';
$array = $excel->getRange($range);
var_dump($array);
class Excel
{
private $objPHPExcel;
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);
}
public function getRange($range)
{
$spreadsheet = $this->objPHPExcel->getActiveSheet();
return $spreadsheet->rangeToArray($range,' ', true, true, true);
}
}
А это уже выход:
array(4) {
[1] =>
array(4) {
'A' =>
string(2) " "
'B' =>
string(2) " "
'C' =>
string(2) " "
'D' =>
string(2) " "
}
[2] =>
array(4) {
'A' =>
string(2) " "
'B' =>
string(7) "Company"
'C' =>
string(8) "Acme Inc"
'D' =>
string(2) " "
}
[3] =>
array(4) {
'A' =>
string(2) " "
'B' =>
string(7) "Address"
'C' =>
string(8) "New York"
'D' =>
string(2) " "
}
[4] =>
array(4) {
'A' =>
string(2) " "
'B' =>
string(2) " "
'C' =>
string(2) " "
'D' =>
string(2) " "
}
}