2013-12-12 44 views
2

如何禁用几个单元格,但使用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); 

,但所有我能得到的是禁用或启用的所有文件。 我很确定这可以轻松实现。提前致谢。

+0

你是什么意思的“禁用”?也许这可能对你有帮助? :http://stackoverflow.com/questions/17046207/phpexcel-lock-particular-cell。另外,你为什么逃避PHP的Excel风格? :' - > getProtection() - > setLocked( \ PHPExcel_Style_Protection :: PROTECTION_UNPROTECTED);'这应该是' - > getProtection() - > setLocked( PHPExcel_Style_Protection :: PROTECTION_UNPROTECTED);',不应该吗? – briosheje

+0

为几个单元格禁用单元格编辑,但保留文档的其余部分可编辑。我尝试了示例代码,并且不能像我需要的那样工作。 – androidu

+0

这就是你如何访问名称空间前面的ClassName,所以你不需要在你的php类的顶部写'use'指令。这只是我的IDE自动导入php类的方式。无需担心这一点。 – androidu

回答

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__)); 
+0

我得到了整个文档的保护。无法编辑任何单元格....接下来要做什么? – androidu

+0

我在发布之前进行了测试。我的完整代码在编辑中。 – bishop

+0

确实你的剪辑确实有效。那我一定在做别的事情。感谢您的帮助bishop;) – androidu