web-dev-qa-db-ja.com

PHPExcelは特定のセルをロックします

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".

ワークシート全体をロックします。特定のセルのみをロックし、他のセルを編集可能なままにすることはできますか?

18
sravis

最後に、私はそれを行う正しい方法を見つけました。

$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);

これは完全に機能しています!

20
sravis

sravisは私を正しい方向に導いてくれましたが、まだ1つの欠陥が残っています。そのようにすると、パスワードを入力せずにExcelを使用してシートのロックを解除できます(セルをクリックしたときに表示されるように)パスワードでロックされていません)。

Excelシートをパスワードでロックし、いくつかのセルの保護を解除するには、(いくつかのセルではなく)シートを保護してから、いくつかのセルの保護を解除する必要があります。

$sheet->getProtection()->setPassword('password hare');
$sheet->getProtection()->setSheet(true);
$sheet->getStyle('A1:B2')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

そうすれば、Excelを使用してシートの保護を解除しようとするときに、ユーザーはパスワードを入力する必要があります。

3
Select0r

現在PHPExcelの後継であるPhpSpreadsheetを使用している場合、$ sheet-> getStyle( 'A1:B2')-> getProtection()-> setLocked(PHPExcel_Style_Protection :: PROTECTION_UNPROTECTED)により、クラスが見つかりませんというエラーが発生します。

解決策:PhpOffice\PhpSpreadsheet\Style\Protectionを使用します。

$ sheet-> getProtection()-> setSheet(true);

$ sheet-> getStyle( 'A1:A10')-> getProtection()-> setLocked(Protection :: PROTECTION_UNPROTECTED);

これは機能します。

2
manita pote