Estoy intentando ajustar automáticamente el tamaño de las columnas de mi hoja. Estoy escribiendo el archivo y al final trato de cambiar el tamaño de todas mis columnas.
// 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();
El código anterior no funciona. No cambia el tamaño de la columna para que se ajuste al texto.
ACTUALIZAR
El escritor que estoy usando$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Si necesita hacer eso en varias hojas y varias columnas en cada hoja, así es como puede iterar a través de todas ellas:
fuente
Aquí una variante más flexible basada en la publicación de @Mark Baker:
Espero que esto ayude ;)
fuente
range('A', 'AB')
solo devolverá un artículo llamado 'A'. ¡Entonces usarlorange()
en este caso NO es una buena idea!fuente
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
contrario la última columna no se dimensionaEste es un ejemplo de cómo usar todas las columnas de la hoja de trabajo:
fuente
Este fragmento de código ajustará automáticamente el tamaño de todas las columnas que contienen datos en todas las hojas. No es necesario utilizar el getter y setter activeSheet.
fuente
para phpspreadsheet:
fuente
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
fuente
En caso de que alguien estuviera buscando esto.
La resolución a continuación también funciona en
PHPSpreadsheet
su nueva versión de PHPExcel.Qué hacen estos métodos:
getHighestColumn($row = null)
- Obtener la columna más alta de la hoja de trabajo.getHighestDataColumn($row = null)
- Obtenga la columna de la hoja de trabajo más alta que contiene datos.getHighestRow($column = null)
- Obtener la fila más alta de la hoja de trabajogetHighestDataRow($column = null)
- Obtenga la fila más alta de la hoja de trabajo que contiene datos.fuente
Si intenta iterar con
for ($col = 2; $col <= 'AC'; ++ $col){...}
, o conforeach(range('A','AC') as $col) {...}
, funcionará para las columnas de la A a la Z, pero no pasa la Z (por ejemplo, iterar entre 'A' y 'AC').Para iterar el pase 'Z', debe convertir la columna a un número entero, incrementar, comparar y obtener como cadena nuevamente:
Con esto, puede iterar fácilmente pasar la columna 'Z' y configurar el tamaño automático para cada columna.
fuente
Llego tarde, pero después de buscar por todas partes, he creado una solución que parece ser "la indicada".
Sabiendo que hay un iterador de columna en las últimas versiones de la API, pero sin saber cómo ajustar el objeto de la columna en sí, básicamente he creado un bucle para pasar de la primera columna utilizada real a la última utilizada real.
Aquí va:
fuente
también necesita identificar las columnas para establecer dimensiones:
fuente
fuente
Para spreedsheet + PHP 7, se debe escribir en lugar de
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. Y en el bucle hay un error, no debe<
trabajar con él<=
. De lo contrario, se mete demasiado en una columna.fuente
fuente