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".
ワークシート全体をロックします。特定のセルのみをロックし、他のセルを編集可能なままにすることはできますか?
最後に、私はそれを行う正しい方法を見つけました。
$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);
これは完全に機能しています!
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を使用してシートの保護を解除しようとするときに、ユーザーはパスワードを入力する必要があります。
現在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);
これは機能します。