PHPExcel 锁定特定单元格

2022-08-30 21:04:11

在phpxcel中,我能够通过以下方式锁定单元格

$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".

它锁定整个工作表, 是否可以只锁定特定单元格并保留其他单元格可编辑?


答案 1

最后,我找到了正确的方法来做到这一点。

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

这是完美的工作!


答案 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取消对工作表的保护时必须输入密码。


推荐