web-dev-qa-db-fra.com

Centrer tout le texte dans PHPSpreadsheet et agrandir les cellules pour les remplir de contexte

Je lutte un peu pour que toutes les cellules définissent le contexte au centre et à l'expansion automatique afin qu'il ne se chevauche pas.

Donc ce que j'essaye de faire c'est:

  1. Définissez les informations dans chaque cellule pour qu'elles soient centrées car elles améliorent l'impression au format PDF/etc.

  2. Agrandir les cellules en fonction de la quantité de texte dans la cellule. Je ne veux pas que les informations contenues dans A passent dans la cellule B.

J'ai essayé ce code mais il ne semble pas fonctionner:

$styleArray = array(
            'borders' => array(
                'outline' => array(
                    'style' => Alignment::HORIZONTAL_CENTER,
                ),
            ),
        );

        $sheet ->getStyle('A1:D30')->applyFromArray($styleArray);

Si je le fais pour une seule cellule (contexte central), cela fonctionne. A fait ça:

$sheet->setCellValue('A2', $activitiesCount)->getStyle('A2')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);

Pour les cellules en expansion, je n'ai pas encore trouvé de solution pour cela.

J'aimerais faire les deux sur toutes mes cellules avec une seule commande si possible.

6
stAMy

Cela ferait l'affaire:

Pour le dimensionnement automatique (expansion automatique de cellule), procédez comme suit:

$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);

NOTE

Vous devez le faire individuellement pour chaque colonne car la méthode getColumnDimension ne peut accepter qu'une seule colonne comme paramètre.

Vous avez déjà compris l'alignement horizontal, mais il convient de noter que vous pouvez définir l'alignement de plusieurs colonnes à l'aide d'une seule commande.

$sheet->getStyle('A:B')->getAlignment()->setHorizontal('center');

En ce qui concerne la définition des valeurs des cellules, je préférerais que vous le fassiez séparément de tout ce qui a trait à la mise en forme et au style, uniquement dans un but de séparation des préoccupations et de lisibilité.

À votre santé.

9
Chukwuemeka Inya

Pour redimensionner automatiquement une plage de colonnes:

foreach(range('A','Z') as $columnID) {
    $sheet->getColumnDimension($columnID)->setAutoSize(true);
}

Définissez les informations dans chaque cellule à centrer:

$alignment_center = \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER;

foreach($sheet->getRowIterator() as $row) {
    foreach($row->getCellIterator() as $cell) {
        $cellCoordinate = $cell->getCoordinate();
        $sheet->getStyle($cellCoordinate)->getAlignment()->setHorizontal($alignment_center);
    }
}

Ces travaux pour:

"phpoffice/phpspreadsheet": "^1.6"
0
Adem Tepe