PHPExcel блокирует определенную ячейку

В phpexcel я смог заблокировать ячейку

$objPHPExcel->getActiveSheet()->protectCells('A1:D1', 'php'); $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); 

Если я дважды щелкнул по любой ячейке между A1 и D1, он попросит пароль как следует.
Но если я дважды щелкнул по любой другой ячейке (например) A2, она говорит

 "The cell or chart that you are trying to change is protected and therefore read-only". 

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

Наконец, я нашел правильный способ сделать это.

 $objPHPExcel = new PHPExcel; $objSheet = $objPHPExcel->getActiveSheet(); 

// ЗАЩИТА ДАННЫХ КЛЕТОК

 $objSheet->protectCells('A1:B1', 'PHP'); 

// УЛУЧШИТЬ ДИАПАЗОН КЛЕТОК

 $objSheet->getStyle('A2:B2')->getProtection() ->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); 

// ЗАЩИТА ЛИСТОВ МАСТЕРСТВА

 $objSheet->getProtection()->setSheet(true); 

Это работает отлично!

sravis заставил меня на правильном пути, но все же остается один недостаток: если вы это сделаете, вы можете просто удалить блокировку листа с помощью Excel без ввода пароля (так же, как он сообщает вам, когда вы нажимаете на ячейку, не заблокирован с паролем).

Чтобы заблокировать лист Excel с паролем и снять защиту с нескольких ячеек, вам необходимо защитить лист (а не только пару ячеек), а затем снять защиту с некоторых ячеек:

 $sheet->getProtection()->setPassword('password hare'); $sheet->getProtection()->setSheet(true); $sheet->getStyle('A1:B2')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); 

Таким образом, пользователь должен будет ввести пароль при попытке снять защиту с помощью Excel.

 /* this section lock for all sheet */ $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); /* and this section unlock cell rage('A2:Z2') from locked sheet */ $objPHPExcel->getActiveSheet()->getStyle('A2:Z500')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);