【问题标题】:PHPExcel lock particular cellPHPExcel锁定特定单元格
【发布时间】:2013-06-11 14:08:18
【问题描述】:

在 phpexcel 中我可以通过

锁定单元格
$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".

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

【问题讨论】:

    标签: php phpexcel


    【解决方案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 取消保护工作表时必须输入密码。

      【讨论】:

        【解决方案3】:

        如果你现在使用的是 PHPExcel 的继承者 PhpSpreadsheet,

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

        将给出类未找到错误。

        解决方案:

        use PhpOffice\PhpSpreadsheet\Style\Protection;
        
        $sheet->getProtection()->setSheet(true);
        
        $sheet->getStyle('A1:A10')->getProtection()
        ->setLocked(Protection::PROTECTION_UNPROTECTED);
        

        这会起作用。

        【讨论】:

          【解决方案4】:
          /* this section lock for all sheet */
          $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
          
          /*  and this section unlock cell rage('A2:Z2') from locked sheet */
          $objPHPExcel->getActiveSheet()->getStyle('A2:Z500')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
          

          【讨论】:

            猜你喜欢
            • 2013-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-07
            • 2015-10-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多