2013-12-12 59 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