Sayfamın sütunlarını otomatik olarak boyutlandırmaya çalışıyorum. Dosyayı yazıyorum ve sonunda tüm sütunlarımı yeniden boyutlandırmaya çalışıyorum.
// 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();
Yukarıdaki kod çalışmıyor. Metne sığdırmak için sütun boyutunu değiştirmiyor
GÜNCELLEME
Kullandığım yazar $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Bir sütun AutoSize olarak ayarlanmışsa, PHPExcel sütun genişliğini sütunun hesaplanan değerine (yani herhangi bir formülün sonucuna) ve binlik ayırıcılar gibi biçim maskeleri tarafından eklenen ek karakterlere göre hesaplamaya çalışır.
Varsayılan olarak, bu bir tahmini
genişliktir: GD kullanımına dayalı, kalın ve italik gibi yazı tipi stili özelliklerini de işleyebilen daha doğru bir hesaplama yöntemi mevcuttur; ancak bu çok daha büyük bir ek yüktür, bu nedenle varsayılan olarak kapalıdır. Daha doğru hesaplamayı şu şekilde etkinleştirebilirsiniz
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
Ancak, otomatik boyutlandırma tüm Writer formatları için geçerli değildir... örneğin CSV. Hangi yazıcıyı kullandığınızdan bahsetmiyorsunuz.
Ancak boyutları ayarlamak için sütunları da tanımlamanız gerekir:
foreach(range('B','G') as $columnID) {
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->getColumnDimension()
bir sütun kimliği bekliyor.
$$objPHPExcel->getActiveSheet()->getColumnDimensions(), tanımlanmış tüm sütun boyutu kayıtlarının bir dizisini döndürür; ancak bir sütun boyutu kaydı açıkça oluşturulmamışsa (belki bir şablon yükleyerek veya manuel olarak
getColumnDimension()` çağrısı yaparak), o zaman mevcut olmayacaktır (bellek tasarrufu).
Burada @Mark Baker gönderisine dayanan daha esnek bir varyant var:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
Umarım bu yardımcı olur ;)
Bu, çalışma sayfasındaki tüm sütunların nasıl kullanılacağına örnektir:
$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 );
}