2013-06-11 15 views
11

W phpexcel udało mi się zablokować komórkę przezPHPExcel zablokować danej komórki

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

Jeśli i dwukrotnie kliknąć na dowolnej komórki od A1 do D1 będzie prosić o hasło, jak powinien.
ale jeśli kliknij dwukrotnie na każdej innej komórce (np) A2 mówi

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

Jego blokujący cały arkusz, Czy to możliwe, aby zablokować tylko konkretnej komórki i pozostawić inne komórki edycji?

Odpowiedz

15

Wreszcie znalazłem właściwą drogę, aby to zrobić ..

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

// PROTECT zakres komórek

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

// UNPROTECT zakres komórek

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

// CHRONIĆ ARKUSZ WARSZTATÓW

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

To działa idealnie!

+0

Thanxs .. Działają –

2

sravis doprowadził mnie na właściwą drogę, ale nadal pozostaje jedna usterka: jeśli zrobisz to w ten sposób, możesz po prostu usunąć blokowanie arkusza za pomocą Excela bez wpisywania hasła (dokładnie tak, jak mówi po kliknięciu) w komórce, która nie jest zablokowana hasłem).

Aby zablokować Excel-kartkę z hasłem i odbezpieczyć kilka komórek, trzeba chronić arkusz (zamiast tylko kilka komórek), a następnie odbezpieczyć niektóre komórki:

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

ten sposób użytkownik będzie musiał wprowadzić hasło podczas próby odblokowania arkusza za pomocą programu 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);