2012-04-01 9 views
7

Quiero asegurarme de que no se corte ningún valor en un libro de trabajo producido por phpExcel. Para hacer esto, llamo alphpExcel problema de tamaño de columna

$oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true); 

cada vez que escribo una celda. Esto no parece funcionar: muchas columnas terminan muy pequeñas.

¿Alguien sabe cómo asegurarse de que cada columna en el libro de trabajo sobresaliente se clasifique según su contenido?

Respuesta

12

No haga esto cada vez que escriba una celda ... es una sobrecarga innecesaria. Hazlo solo una vez para cada columna.

Tenga en cuenta que es costoso guardar, porque PHPExcel recorre cada celda de esa columna calculando el ancho necesario según el contenido de esa celda, teniendo en cuenta el cálculo y el formato de la fórmula, y utilizando el tamaño máximo de cualquier celda en esa columna. Incluso entonces no es una solución perfecta: el comportamiento predeterminado es estimar, contar el número de caracteres para mostrar y usar un multiplicador genérico basado en la fuente (Arial, Verdana de Calibri) y un poco de relleno. Para un cálculo más preciso, puede cambiar el método utilizado para el cálculo, y el código luego usa GD para construir un cuadro delimitador ttf y basar el tamaño de la celda en las dimensiones de ese cuadro. Este es un cálculo más preciso, pero mucho más lento.

Puede cambiar el método de cálculo usando:

PHPExcel_Shared_Font::setAutoSizeMethod($method); 

antes de guardar, en donde el método $ es uno de los siguientes:

PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX 
PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT 

Esto todavía no es una solución perfecta, pero es la mejor cálculo que PHPExcel puede hacer.

Una alternativa es llamar calculateColumnWidths de la hoja de trabajo() método de ti mismo antes de guardar directamente ... y luego caminar a través de la dimensión de cada columna aumentando el valor por quizás el 5% para tratar de asegurar que toda la columna se ajusta, antes de guardar.

Cuestiones relacionadas