PHPSpreadsheet - не можете обновить существующую электронную таблицу, но можете писать в новую электронную таблицу? - PullRequest
0 голосов
/ 15 февраля 2019

, поэтому я использую PHPSpreadsheet для записи в существующую электронную таблицу, но по какой-то причине я продолжаю получать эту ошибку:

PHP Fatal error:  Uncaught Error: Call to a member function setValue() on null in /home/joe/vendor/phpoffice/phpspreadsheet/samples/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php:1127
Stack trace:
#0 /home/joe/vendor/phpoffice/phpspreadsheet/samples/server.php(90): PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->setCellValue('b15', '6429093')
#1 {main}
  thrown in /home/joe/vendor/phpoffice/phpspreadsheet/samples/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php on line 1127

Я получаю эту ошибку только при попытке загрузки из существующей электронной таблицы, а не когдазагрузка из новой таблицы.Код выглядит следующим образом:

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','aa','ab','ac','ad','ae','af','ag','ah','ai','aj','ak','al','am','an','ao','ap','aq','ar','as','at','au','av','aw','ax','ay','az','ba','bb','bc','bd','be'];

    $numColumns = count($letters);

    foreach($rows as $row) {

        foreach($row as $key => $value) {

            if(isset($value) && $value != null) {

                $sheet->setCellValue($letters[$key].$i, $value);
            }

            //print_r();
        }

        $i++;
    }

Электронная таблица, из которой я загружаю, содержит несколько форматов ячеек и некоторые ячейки, в которых уже есть данные. Любая помощь, которую вы можете предложить, была бы полезна: -)

1 Ответ

0 голосов
/ 15 февраля 2019

Буквы должны быть в верхнем регистре, а не в нижнем регистре, этот метод должен получить символ с помощью кода ASCIIИ преобразовать это в, чтобы получить его символ с функцией chr.

ASCII код .
функция php chr

$letters = range(65, 90) // A-Z ascii code

foreach($rows as $i => $row) {

   foreach($row as $j => $value) {

     if(isset($value) && $value != null) {

        // array start from 0, but spreadsheet line start from 1. then $i+1  
        $sheet->setCellValue( chr($letters[$j]).($i+1) , $value); // A1, $value
     }

     //print_r();
   }
 }
...