在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".
锁定整个工作表,是否可以仅锁定特定单元格并让其他单元格可编辑?
答案 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);