PHPExcel锁定特定单元格

时间:2013-06-11 14:08:19

标签: php 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".

锁定整个工作表,是否可以仅锁定特定单元格并让其他单元格可编辑?

4 个答案:

答案 0 :(得分:19)

最后,我找到了正确的方法......

$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);

这完美无缺!

答案 1 :(得分: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 :(得分:1)

如果您现在正在使用PHPExcel的后继者PhpSpreadsheet, $ sheet-> getStyle('A1:B2')-> getProtection()-> setLocked(PHPExcel_Style_Protection :: PROTECTION_UNPROTECTED) 将给出未找到类的错误。

解决方案: 使用PhpOffice \ PhpSpreadsheet \ Style \ Protection;

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

$ sheet-> getStyle('A1:A10')-> getProtection() -> setLocked(Protection :: PROTECTION_UNPROTECTED);

这将起作用。

答案 3 :(得分:-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);