Laravel-excel: [QUESTION] Comment ajouter une protection à une plage de cellules

Créé le 6 sept. 2017  ·  3Commentaires  ·  Source: Maatwebsite/Laravel-Excel

Version paquet, version Laravel

Dernière version, Laravel 5.4

Je ne sais pas si c'est un bug, si je ne le fais pas correctement ou s'il y a quelque chose que je n'ai pas encore fait.

J'ai pu utiliser les méthodes de base et avancées trouvées sur le site maat pour la documentation Excel.

Les méthodes que j'ai utilisées étaient
$sheet->protect() , et c'est une méthode avancée.

Ces méthodes ont pu protéger toute la feuille, mais je n'ai besoin de protéger qu'une plage de cellules.

J'ai vu une méthode de feuille de calcul :
$sheet->protectCells(A1) ; mais cela ne fonctionne pas pour moi. S'il vous plaît aider avec une méthode que je pourrais utiliser pour y parvenir. Merci..

Commentaire le plus utile

Enfin, j'ai trouvé la bonne façon de le faire.

$objPHPExcel = nouveau PHPExcel;
$objSheet = $objPHPExcel->getActiveSheet();

//PROTÉGER LA GAMME CELLULAIRE
$objSheet->protectCells('A1:B1', 'PHP');

// DÉPROTÉGER LA GAMME DE CELLULES
$objSheet->getStyle('A2:B2')->getProtection()
->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

// PROTÉGER LA FEUILLE DE TRAVAIL
$objSheet->getProtection()->setSheet(true);

Cela fonctionne parfaitement !
SOURCE : https://stackoverflow.com/questions/17046207/phpexcel-lock-particular-cell

Dans Laravel j'utilise :

// PROTÉGER avec votre mot de passe
$sheet->protect('mot de passe');

// DÉPROTÉGER la plage de cellules
$sheet->getStyle('F2:F1000')->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

// feuille de calcul PROTÉGER
$sheet->getProtection()->setSheet(true);

Tous les 3 commentaires

Salut @GreenWhiteDev

J'ai vérifié la dépendance sous-jacente avec une recherche sur:
https://github.com/PHPOffice/PHPExcel/search?utf8=%E2%9C%93&q=protectCells&type=

Vous verrez dans les résultats :
https://github.com/PHPOffice/PHPExcel/blob/1c8c2379ccf5ab9dd7cb46be965821d22173bcf4/Examples/05featuredemo.inc.php#L136 -L139

C'est probablement suffisant pour vous faire avancer, je suppose.
Quelque chose comme ça:

$sheet->getActiveSheet()->getProtection()->setSheet(true);  // Needs to be set to true in order to enable any worksheet protection!
$sheet->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');

Edit : ajout de cette référence :
Regarde aussi

https://github.com/PHPOffice/PHPExcel/blob/1c8c2379ccf5ab9dd7cb46be965821d22173bcf4/Classes/PHPExcel/Worksheet.php#L1793 -L1814

    /**
     * Set protection on a cell range
     *
     * <strong i="22">@param</strong>    string            $pRange                Cell (e.g. A1) or cell range (e.g. A1:E1)
     * <strong i="23">@param</strong>    string            $pPassword            Password to unlock the protection
     * <strong i="24">@param</strong>    boolean        $pAlreadyHashed    If the password has already been hashed, set this to true
     * <strong i="25">@throws</strong>    PHPExcel_Exception
     * <strong i="26">@return</strong> PHPExcel_Worksheet
     */
    public function protectCells($pRange = 'A1', $pPassword = '', $pAlreadyHashed = false)

Trois paramètres pour jouer avec cette méthode !

Dis moi comment tu vas ?

Enfin, j'ai trouvé la bonne façon de le faire.

$objPHPExcel = nouveau PHPExcel;
$objSheet = $objPHPExcel->getActiveSheet();

//PROTÉGER LA GAMME CELLULAIRE
$objSheet->protectCells('A1:B1', 'PHP');

// DÉPROTÉGER LA GAMME DE CELLULES
$objSheet->getStyle('A2:B2')->getProtection()
->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

// PROTÉGER LA FEUILLE DE TRAVAIL
$objSheet->getProtection()->setSheet(true);

Cela fonctionne parfaitement !
SOURCE : https://stackoverflow.com/questions/17046207/phpexcel-lock-particular-cell

Dans Laravel j'utilise :

// PROTÉGER avec votre mot de passe
$sheet->protect('mot de passe');

// DÉPROTÉGER la plage de cellules
$sheet->getStyle('F2:F1000')->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

// feuille de calcul PROTÉGER
$sheet->getProtection()->setSheet(true);

@jorgeald77 Ouah ! Cela a fonctionné si cool..

J'ai mis le projet en pause pendant un moment. Je viens de commencer il y a quelques jours.

Je n'étais pas en mesure d'implémenter la sécurité pour la plage de cellules à ce moment-là. J'ai essayé votre solution et cela a fonctionné si bien. J'apprécie tellement cela.

Merci à tous pour votre contribution..

Cette page vous a été utile?
0 / 5 - 0 notes