Ich versuche, die Spalten meines Blattes automatisch zu dimensionieren. Ich schreibe die Datei und versuche am Ende, die Größe aller meiner Spalten zu ändern.
// 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();
Der obige Code funktioniert nicht. Ändert die Spaltengröße nicht an den Text
UPDATE
Der Autor, den ich benutze$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Wenn Sie dies für mehrere Blätter und mehrere Spalten in jedem Blatt tun müssen, können Sie alle folgenden Schritte durchlaufen:
quelle
Hier eine flexiblere Variante basierend auf @ Mark Baker Post:
Hoffe das hilft ;)
quelle
range('A', 'AB')
nur ein Element mit dem Namen 'A' zurückgegeben wird. So verwendetrange()
in diesem Fall ist keine gute Idee!quelle
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
sonst sein letzte Spalte wird nicht dimensioniertDies ist ein Beispiel für die Verwendung aller Spalten aus dem Arbeitsblatt:
quelle
Dieses Code-Snippet passt automatisch alle Spalten an, die Daten in allen Blättern enthalten. Es ist nicht erforderlich, den ActiveSheet-Getter und -Setter zu verwenden.
quelle
für phpspreadsheet:
quelle
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
quelle
Für den Fall, dass jemand danach suchte.
Die folgende Auflösung funktioniert auch mit
PHPSpreadsheet
der neuen Version von PHPExcel.Was diese Methoden tun:
getHighestColumn($row = null)
- Holen Sie sich die höchste Arbeitsblattspalte.getHighestDataColumn($row = null)
- Holen Sie sich die höchste Arbeitsblattspalte, die Daten enthält.getHighestRow($column = null)
- Holen Sie sich die höchste ArbeitsblattzeilegetHighestDataRow($column = null)
- Holen Sie sich die höchste Arbeitsblattzeile, die Daten enthält.quelle
Wenn Sie versuchen, mit
for ($col = 2; $col <= 'AC'; ++ $col){...}
oder mit zu iterieren ,foreach(range('A','AC') as $col) {...}
funktioniert dies für Spalten von A bis Z, aber es schlägt fehl, das Z zu übergeben (z. B. zwischen 'A' und 'AC' iterieren).Um den Durchgang 'Z' zu wiederholen, müssen Sie die Spalte in eine Ganzzahl konvertieren, inkrementieren, vergleichen und erneut als Zeichenfolge abrufen:
Mit dieser Funktion können Sie die 'Z'-Spalte einfach iterieren und die automatische Größe für jede Spalte festlegen.
quelle
Kommen Sie spät, aber nachdem ich überall gesucht habe, habe ich eine Lösung geschaffen, die "die eine" zu sein scheint.
Da bekannt ist, dass es in den letzten API-Versionen einen Spalteniterator gibt, aber nicht weiß, wie das Spaltenobjekt selbst angepasst werden kann, habe ich im Grunde eine Schleife erstellt, um von der zuerst verwendeten Spalte zu der zuletzt verwendeten Spalte zu wechseln.
Hier kommt's:
quelle
Sie müssen auch die Spalten identifizieren, um die Abmessungen festzulegen:
quelle
quelle
Für Spreedsheet + PHP 7 müssen Sie anstelle von
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. Und an der Schleife liegt ein Fehler, mit dem man<
nicht arbeiten darf<=
. Andernfalls nimmt er eine Spalte zu viel in die Schleife.quelle
quelle