I'estou a tentar dimensionar automaticamente as colunas da minha folha. I'estou a escrever o ficheiro e no final tento redimensionar todas as minhas colunas.
// 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();
O código acima não't funciona. Doesn't muda o tamanho da coluna para caber no texto
**UPDATE***
O escritor I'm utilizando $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Se uma coluna for definida para AutoSize, o PHPExcel tenta calcular a largura da coluna com base no valor calculado da coluna (assim como no resultado de qualquer fórmula), e quaisquer caracteres adicionais adicionados por máscaras de formato, tais como mil separadores.
Por defeito, esta é uma largura `estimada': está disponível um método de cálculo mais preciso, baseado na utilização de GD, que também pode lidar com características de estilo de fonte como negrito e itálico; mas esta é uma sobrecarga muito maior, por isso é desligada por defeito. É possível activar o cálculo mais preciso utilizando
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
Contudo, autosize doesn't se aplica a todos os formatos Writer... por exemplo CSV. Não menciona'não menciona que escritor utiliza're.
Mas também é necessário identificar as colunas para definir as dimensões:
foreach(range('B','G') as $columnID) {
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->getColumnDimension()
espera um ID de coluna.
$objPHPExcel->getActiveSheet()->getColumnDimensions()
devolverá um conjunto de todos os registos de dimensão de coluna definidos; mas a menos que um registo de dimensão de coluna tenha sido explicitamente criado (talvez carregando um modelo, ou chamando manualmente getColumnDimension()
), então ele ganhou't existe (salvamento de memória).
Aqui uma variante mais flexível baseada em @Mark Baker post:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
Espero que isto ajude;)
Este é um exemplo de como utilizar todas as colunas da folha de trabalho:
$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 );
}