2013-06-11 3 views
11

В PHPExcel я был в состоянии заблокировать ячейку,PHPExcel блокировки конкретной ячейки

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

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

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

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

ответ

15

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

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

// ЗАЩИТИТЬ CELL RANGE

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

// незащитил CELL RANGE

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

// ЗАЩИТИТЬ РАБОЧИЙ ЛИСТ

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

Это прекрасно работает!

+0

Thanxs..Its working –

2

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

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

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

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

-2
/* 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);