124 votes

PHPExcel : largeur automatique des colonnes

J'essaie de dimensionner automatiquement les colonnes de ma feuille. J'écris le fichier et à la fin j'essaie de redimensionner toutes mes colonnes.

// Add some data
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('B1', 'test1111111111111111111111')
            ->setCellValue('C1', 'test1111111111111')
            ->setCellValue('D1', 'test1111111')
            ->setCellValue('E1', 'test11111')
            ->setCellValue('F1', 'test1')
            ->setCellValue('G1', 'test1');

foreach($objPHPExcel->getActiveSheet()->getColumnDimension() as $col) {
    $col->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->calculateColumnWidths();

Le code ci-dessus ne fonctionne pas. Il ne modifie pas la taille de la colonne pour l'adapter au texte.

UPDATE Le rédacteur que j'utilise $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

11voto

dmi3x Points 1

Voici un exemple d'utilisation de toutes les colonnes d'une feuille de calcul :

$sheet = $PHPExcel->getActiveSheet();
$cellIterator = $sheet->getRowIterator()->current()->getCellIterator();
$cellIterator->setIterateOnlyExistingCells( true );
/** @var PHPExcel_Cell $cell */
foreach( $cellIterator as $cell ) {
        $sheet->getColumnDimension( $cell->getColumn() )->setAutoSize( true );
}

3 votes

Veuillez ajouter un contexte autour de votre réponse pour expliquer comment elle résout le problème.

10voto

beck kuo Points 71

Pour phpspreadsheet :

$sheet = $spreadsheet->getActiveSheet(); // $spreadsheet is instance of PhpOffice\PhpSpreadsheet\Spreadsheet

foreach (
    range(
         1, 
         Coordinate::columnIndexFromString($sheet->getHighestColumn(1))
    ) as $column
) {
    $sheet
          ->getColumnDimension(Coordinate::stringFromColumnIndex($column))
          ->setAutoSize(true);
}

0 votes

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

3 votes

@WesleyAbbenhuis votre commentaire ne fonctionnera que lorsqu'il n'y a pas plus de 26 colonnes. Lorsque la colonne la plus haute est par exemple : 'AH', la fonction de plage ne fonctionnera pas correctement.

6voto

Ronnie Points 495

Cet extrait de code permet de dimensionner automatiquement toutes les colonnes contenant des données dans toutes les feuilles. Il n'est pas nécessaire d'utiliser le getter et le setter activeSheet.

// In my case this line didn't make much of a difference
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
// Iterating all the sheets
/** @var PHPExcel_Worksheet $sheet */
foreach ($objPHPExcel->getAllSheets() as $sheet) {
    // Iterating through all the columns
    // The after Z column problem is solved by using numeric columns; thanks to the columnIndexFromString method
    for ($col = 0; $col <= PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); $col++) {
        $sheet->getColumnDimensionByColumn($col)->setAutoSize(true);
    }
}

4voto

Gabi Suciu Points 1

Au cas où quelqu'un chercherait ça.

La résolution ci-dessous fonctionne également sur PHPSpreadsheet leur nouvelle version de PHPExcel.

// assuming $spreadsheet is instance of PhpOffice\PhpSpreadsheet\Spreadsheet
// assuming $worksheet = $spreadsheet->getActiveSheet();
foreach(range('A',$worksheet->getHighestColumn()) as $column) {
    $spreadsheet->getColumnDimension($column)->setAutoSize(true);
}

Note : getHighestColumn() peut être remplacé par getHighestDataColumn() ou la dernière colonne actuelle.

Ce que font ces méthodes :

getHighestColumn($row = null) - Obtenir la colonne la plus élevée de la feuille de calcul.

getHighestDataColumn($row = null) - Obtenir la plus haute colonne de la feuille de calcul qui contient des données.

getHighestRow($column = null) - Obtenir la ligne la plus élevée de la feuille de calcul

getHighestDataRow($column = null) - Obtenir la ligne de la feuille de calcul la plus élevée qui contient des données.

3voto

Gyrocode.com Points 34797
// Auto-size columns for all worksheets
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
    foreach ($worksheet->getColumnIterator() as $column) {
        $worksheet
            ->getColumnDimension($column->getColumnIndex())
            ->setAutoSize(true);
    } 
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X