1

我有细胞保护方面的问题。

我只想保护一列,例如 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)返回未受保护的列或为空的列。

4

2 回答 2

2

循环很慢,因为您将样式应用于每个单独的单元格,而不是应用于您的

$sheet->getStyle('A1:J2000)->getProtection()->setLocked( PHPExcel_Style_Protection::PROTECTION_UNPROTECTED );

line :为 1000 个单元格设置样式的调用比单独将其应用于 1000 个单元格中的每个单元格快 1000 倍以上。

$sheet->getHighestDataRow(); 

将返回工作表中包含实际数据值的最高行

$sheet->getHighestDataColumn(); 

是列等价物

于 2013-07-23T13:13:00.800 回答
2

首先,您可以保护完整的工作表。之后,您可以保护他人。此代码将保护第一列和第一个

    $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
    $objPHPExcel->getActiveSheet()->getStyle('B2:Z400')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
于 2017-04-25T05:38:53.683 回答