Как заблокировать конкретную ячейку с помощью phpspreadsheet

#phpspreadsheet #phpoffice

#phpspreadsheet #phpoffice

Вопрос:

Изначально все ячейки на листе заблокированы. Затем я разблокирую все ячейки и пытаюсь заблокировать только некоторые из них.

 $spreadsheet->getActiveSheet()->getStyle('A1')->getLocked()->applyFromArray(
      [
          'locked' => TRUE,
          'hidden' => FALSE
     ]);
  

Но в итоге получается эта ошибка.

Неперехваченная ошибка: вызов неопределенного метода PHPOfficePhpSpreadsheetStyleStyle::getLocked()

Заранее спасибо.

Ответ №1:

Этот код способен заблокировать нужную нам ячейку.

 $sheet->getStyle('A1')->getProtection()->setLocked(PhpOfficePhpSpreadsheetStyleProtection::PROTECTION_INHERIT);
  

или

  $sheet->getStyle('A1')->getProtection()->setLocked(PhpOfficePhpSpreadsheetStyleProtection::PROTECTION_PROTECTED);
  

Тем не менее, я хотел бы знать, почему applyFromArray не работает для блокировки ячейки. Кто знает ответ, может опубликовать свой ответ. Спасибо.

Ответ №2:

Мне пришлось сделать это в два этапа. Шаг 1 при создании листа я сказал «На этом листе есть несколько диапазонов блокировки, но они не блокируются по умолчанию»

     $spreadsheet->getActiveSheet()->getProtection()->setSheet(true);
    $spreadsheet->getDefaultStyle()->getProtection()->setLocked(false);
  

Затем ApplyFromArray сработал

 $spreadsheet->getActiveSheet()->getStyle('A1')->applyFromArray(
    array(
        'protection' => array('locked' => PhpOfficePhpSpreadsheetStyleProtection::PROTECTION_PROTECTED),
    )
);