PHPExcel锁定特定单元格

sra*_*vis 17 php phpexcel

在phpexcel我能够锁定细胞

$objPHPExcel->getActiveSheet()->protectCells('A1:D1', 'php');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
Run Code Online (Sandbox Code Playgroud)

如果我双击A1到D1之间的任何单元格,它将要求输入密码.
但如果我双击任何其他单元格(例如)A2,它说

"The cell or chart that you are trying to change is protected and therefore 
read-only".
Run Code Online (Sandbox Code Playgroud)

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

sra*_*vis 20

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

$objPHPExcel = new PHPExcel;
$objSheet = $objPHPExcel->getActiveSheet();
Run Code Online (Sandbox Code Playgroud)

//保护细胞范围

$objSheet->protectCells('A1:B1', 'PHP');
Run Code Online (Sandbox Code Playgroud)

//保护细胞范围

$objSheet->getStyle('A2:B2')->getProtection()
->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
Run Code Online (Sandbox Code Playgroud)

//保护工作单

$objSheet->getProtection()->setSheet(true);
Run Code Online (Sandbox Code Playgroud)

这完美地运作!


Sel*_*t0r 5

sravis 让我走上了正轨,但仍然存在一个缺陷:如果你这样做,你仍然可以使用 Excel 删除工作表的锁定,而无需输入密码(就像它告诉你当你单击一个单元格时,该单元格是没有用密码锁定)。

要使用密码锁定 Excel 工作表并取消保护几个单元格,您需要保护工作表(而不是仅保护几个单元格),然后取消保护某些单元格:

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

这样,用户在尝试使用 Excel 取消工作表保护时必须输入密码。