在PHPExcel中禁用几个单元格

时间:2013-12-12 12:43:31

标签: php phpexcel

如何使用PHPExcel库禁用几个单元格,但保持其余单元格可编辑? 我尝试使用以下几种组合:

    $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
    $objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
    $objPHPExcel->getActiveSheet()
        ->getStyle('A1:Z50')
        ->getProtection()->setLocked(
            \PHPExcel_Style_Protection::PROTECTION_UNPROTECTED
        );
    $objPHPExcel->getActiveSheet()
        ->getStyle('C7:E7')
        ->getProtection()->setLocked(
            \PHPExcel_Style_Protection::PROTECTION_PROTECTED
        );
    $objPHPExcel->getActiveSheet()->getProtection()->setSheet(false);
    $objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(false);

但是我能得到的就是禁用或启用所有文档。 我很确定这很容易实现。提前谢谢。

1 个答案:

答案 0 :(得分:3)

保护整张纸的解决方案,同时保持特定单元格的可编辑性:

$excel->getActiveSheet()->getProtection()->setSheet(true); 
$excel->getActiveSheet()->getStyle('A12:D50')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); 

完整的例子。在生成的文件中,我只能编辑单元格B2,C2和D2:

$excel = new PHPExcel();
$excel->setActiveSheetIndex(0)
      ->setCellValue('A1', 'Hello')
      ->setCellValue('B2', 'world!')
      ->setCellValue('C1', 'Hello')
      ->setCellValue('D2', 'world!')
  ;
$excel->getActiveSheet()
    ->getProtection()->setSheet(true);
$excel->getActiveSheet()->getStyle('B2:D2')
    ->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$writer->save(str_replace('.php', '.xls', __FILE__));