PHP-PHPExcel Range to Array игнорирует пустой столбец

PHP-PHPExcel Range to Array игнорирует пустой столбец

17.12.2019 10:39:26 Просмотров 15 Источник

У меня есть ниже лист Excel, где я хочу получить диапазон A1:D4в массив PHP.

enter image description here

Для этого я использую 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

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59369572/php-phpexcel-range-to-array-ignores-empty-column#comment105038869_59369572
Привет @oliverbj, просто проверяю, используете ли вы пакет phpoffice/phpspreadsheet, а не устаревший phpoffice/phpexcel, верно?
https://stackoverflow.com/questions/59369572/php-phpexcel-range-to-array-ignores-empty-column#comment105092429_59369572
Проблема, вероятно, исходит из переменной $range. Не могли бы вы добавить немного больше контекста ?

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

Fabrice Fabiyi

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);
https://stackoverflow.com/questions/59369572/php-phpexcel-range-to-array-ignores-empty-column/59411535#comment105099865_59411535
Это сработало и для меня тоже.
diegowc

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) "  "
  }
}
Закрыть X