Ich versuche, die Größe der Spalten meines Blattes automatisch anzupassen. Ich schreibe die Datei und am Ende versuche ich, 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 nicht die Spaltengröße, um den Text anzupassen
UPDATE
Der Writer, den ich verwende $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Wenn eine Spalte auf AutoSize eingestellt ist, versucht PHPExcel, die Spaltenbreite auf der Grundlage des berechneten Wertes der Spalte (also des Ergebnisses einer Formel) und aller zusätzlichen Zeichen, die durch Formatmasken wie Tausendertrennzeichen hinzugefügt wurden, zu berechnen.
Standardmäßig handelt es sich dabei um eine "geschätzte" Breite: Es gibt eine genauere Berechnungsmethode, die auf der Verwendung von GD basiert und auch Schriftstilmerkmale wie fett und kursiv verarbeiten kann; dies bedeutet jedoch einen viel größeren Overhead, weshalb sie standardmäßig deaktiviert ist. Sie können die genauere Berechnung aktivieren, indem Sie
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
Allerdings gilt die automatische Größenanpassung nicht für alle Writer-Formate, z. B. CSV. Sie haben nicht erwähnt, welchen Writer Sie verwenden.
Aber Sie müssen auch die Spalten identifizieren, um die Abmessungen festzulegen:
foreach(range('B','G') as $columnID) {
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->getColumnDimension()
erwartet eine Spalten-ID.
$$objPHPExcel->getActiveSheet()->getColumnDimensions()gibt ein Array aller definierten Spaltenabmessungsdatensätze zurück; aber wenn ein Spaltenabmessungsdatensatz nicht explizit erstellt wurde (vielleicht durch das Laden einer Vorlage oder durch den manuellen Aufruf von
getColumnDimension()`), dann wird er nicht existieren (Speicherplatzeinsparung).
Hier eine flexiblere Variante auf der Grundlage des Beitrags von @Mark Baker:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
Hoffentlich hilft das ;)
Dies ist ein Beispiel für die Verwendung aller Spalten eines Arbeitsblatts:
$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 );
}