我遇到细胞保护问题。
我想保护一栏,例如B。
所以我试过了:
$sheet->getProtection()->setSheet(true);
$highestRow = $sheet->getHighestRow();
$sheet->getStyle('A1:J2000)->getProtection()->setLocked( PHPExcel_Style_Protection::PROTECTION_UNPROTECTED );
for($i=1;$i<=$highestRow;$i++)
{
$sheet->getStyleByColumnAndRow(1,$i)->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_PROTECTED);
}
但它真的很慢,而且不好,因为如果我需要再次打开我的表
$highestRow = $sheet->getHighestRow();
将返回“J”。
另一个解决方案是获取最后一个非空列,你知道怎么做吗?因为getHighestRow(Column)
会使列不受保护或为空。
答案 0 :(得分:2)
循环很慢,因为您将样式应用于每个单独的单元格,而不是应用于
中演示的单元格范围$sheet->getStyle('A1:J2000)->getProtection()->setLocked( PHPExcel_Style_Protection::PROTECTION_UNPROTECTED );
线 :一次调用为1000个单元格设置样式的速度比单独应用1000个单元格的速度快1000倍。
$sheet->getHighestDataRow();
将返回工作表中包含实际数据值的最高行
$sheet->getHighestDataColumn();
是等效列
答案 1 :(得分:0)
首先,您可以保护整张纸。之后你可以保护他人。此代码将保护第一列和第一列
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->getStyle('B2:Z400')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);