PHPExcel保护单个列

时间:2013-07-23 09:32:42

标签: cell phpexcel

我遇到细胞保护问题。

我想保护一栏,例如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)会使列不受保护或为空。

2 个答案:

答案 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);