Estou tentando dimensionar automaticamente as colunas da minha planilha. Estou escrevendo o arquivo 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 funciona. Não altera o tamanho da coluna para caber no texto
ATUALIZAR
O escritor que estou usando$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Se você precisar fazer isso em várias planilhas e várias colunas em cada planilha, veja como você pode iterar por todas elas:
fonte
Aqui está uma variante mais flexível baseada na postagem de @Mark Baker:
Espero que isto ajude ;)
fonte
range('A', 'AB')
retornará apenas um item chamado 'A'. Portanto, usarrange()
neste caso NÃO é uma boa ideia!fonte
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
caso contrário, a última coluna nãoEste é um exemplo de como usar todas as colunas da planilha:
fonte
Este snippet de código dimensionará automaticamente todas as colunas que contêm dados em todas as planilhas. Não há necessidade de usar getter e setter activeSheet.
fonte
para planilha phps:
fonte
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
fonte
No caso de alguém estar procurando por isso.
A resolução abaixo também funciona em
PHPSpreadsheet
sua nova versão do PHPExcel.O que esses métodos fazem:
getHighestColumn($row = null)
- Obtenha a coluna mais alta da planilha.getHighestDataColumn($row = null)
- Obtenha a coluna de planilha mais alta que contém dados.getHighestRow($column = null)
- Obtenha a linha de planilha mais altagetHighestDataRow($column = null)
- Obtenha a linha mais alta da planilha que contém dados.fonte
Se você tentar iterar com
for ($col = 2; $col <= 'AC'; ++ $col){...}
, ou comforeach(range('A','AC') as $col) {...}
ele funcionará para colunas de A a Z, mas falhará, passe o Z (Ex. Iterar entre 'A' para 'AC').Para iterar a passagem 'Z', você precisa converter a coluna para inteiro, incrementar, comparar e obtê-la como string novamente:
Com isso, você pode iterar facilmente, passar a coluna 'Z' e definir o tamanho automático para cada coluna.
fonte
Chegue tarde, mas depois de pesquisar em todos os lugares, criei uma solução que parece ser "a única".
Sabendo que existe um iterador de coluna nas últimas versões da API, mas não sabendo como reajustar o próprio objeto de coluna, basicamente criei um loop para ir da primeira coluna real usada para a última coluna real usada.
Aqui vai:
fonte
você também precisa identificar as colunas para definir as dimensões:
fonte
fonte
Para Spreedsheet + PHP 7, você deve escrever em vez de
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. E no loop é um erro, aí você<
não deve trabalhar<=
. Caso contrário, ele leva uma coluna muito para o loop.fonte
fonte