J'essaye de dimensionner automatiquement les colonnes de ma feuille. J'écris le fichier et à la fin j'essaye 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. Ne modifie pas la taille de la colonne pour l'adapter au texte
MISE À JOUR
L'écrivain que j'utilise$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Si vous devez le faire sur plusieurs feuilles et plusieurs colonnes dans chaque feuille, voici comment vous pouvez les parcourir toutes:
la source
$worksheet->getColumnIterator()
pour simplifier les choses ici. Reportez-vous à ma réponseVoici une variante plus flexible basée sur le post de @Mark Baker:
J'espère que cela t'aides ;)
la source
range('A', 'AB')
ne retournera qu'un seul élément nommé 'A'. Donc utiliserrange()
dans ce cas n'est PAS une bonne idée!$sheet->getColumnIterator()
la source
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
sinon la dernière colonne ne prend pas la tailleVoici un exemple comment utiliser toutes les colonnes de la feuille de calcul:
la source
Cet extrait de code dimensionnera 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.
la source
pour phpspreadsheet:
la source
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
Au cas où quelqu'un chercherait ça.
La résolution ci-dessous fonctionne également sur
PHPSpreadsheet
leur nouvelle version de PHPExcel.Que font ces méthodes:
getHighestColumn($row = null)
- Obtenez la colonne de feuille de calcul la plus élevée.getHighestDataColumn($row = null)
- Obtenez la colonne de feuille de calcul la plus élevée contenant des données.getHighestRow($column = null)
- Obtenez la ligne de feuille de calcul la plus élevéegetHighestDataRow($column = null)
- Obtenez la ligne de feuille de calcul la plus élevée contenant des données.la source
la source
Si vous essayez d'itérer avec
for ($col = 2; $col <= 'AC'; ++ $col){...}
, ou avecforeach(range('A','AC') as $col) {...}
cela fonctionnera pour les colonnes de A à Z, mais cela échoue, passez le Z (ex. Itérer entre 'A' et 'AC').Pour parcourir la passe 'Z', vous devez convertir la colonne en entier, incrémenter, comparer et la récupérer sous forme de chaîne:
Avec cela, vous pouvez facilement parcourir la colonne «Z» et définir la taille automatique pour chaque colonne.
la source
Arrivez tard, mais après avoir cherché partout, j'ai créé une solution qui semble être "la bonne".
Sachant qu'il existe un itérateur de colonne sur les dernières versions de l'API, mais ne sachant pas comment ajuster l'objet colonne lui-même, j'ai essentiellement créé une boucle pour passer de la première colonne utilisée à la dernière colonne utilisée.
Voilà:
la source
la source
vous devez également identifier les colonnes pour définir les dimensions:
la source
la source
Pour Spreedsheet + PHP 7, vous devez écrire au lieu de
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. Et à la boucle est une erreur, là, vous<
ne devez pas travailler avec<=
. Sinon, il prend trop une colonne dans la boucle.la source
Toutes ces réponses sont un peu nulles ... n'utilisez pas range () cela ne fonctionnera pas au-delà de la colonne Z.
Utilisez simplement:
Faites cela après avoir écrit vos données afin que l'itérateur de colonne sache combien de colonnes il doit parcourir.
la source