write writableworkbook poi jexcel examples example ejemplos jxl

writableworkbook - Formato de celda JXL



jxl write (7)

De las preguntas FAQ JExcelApi

¿Cómo hago el equivalente de "Formato / Columna / Selección de ajuste automático de Excel"?

No hay una función API para hacer esto por ti. Necesitará escribir código que escanee las celdas en cada columna, calcule la longitud máxima y luego llame a setColumnView () en consecuencia. Esto te acercará a lo que hace Excel pero no exactamente. Como la mayoría de las fuentes tienen caracteres de ancho variable, para obtener el mismo valor exacto, necesitaría utilizar FontMetrics para calcular el ancho máximo de cada cadena en la columna. Nadie ha publicado un código sobre cómo hacer esto todavía. Siéntase libre de publicar código en el Yahoo! agrupar o enviarlo directamente a los autores de las Preguntas frecuentes que se encuentran al final de esta página.

FontMetrics probablemente se refiere a java.awt.FontMetrics . Sin embargo, debería poder resolver algo con el método getLineMetrics (String, Graphics).

¿Cómo ajustar automáticamente el contenido en la celda utilizando jxl api?


El método de tamaño automático de CellView no me funciona todo el tiempo. Mi forma de hacerlo es mediante la programación del tamaño (ancho) de la columna en función de la mayor longitud de datos en la columna. Luego realiza algunas operaciones matemáticas.

CellView cv = excelSheet.getColumnView(0); cv.setSize((highest + ((highest/2) + (highest/4))) * 256);

donde highest es un int que contiene la mayor cantidad de datos en la columna.


El método es autoexplicativo y comentado:

private void sheetAutoFitColumns(WritableSheet sheet) { for (int i = 0; i < sheet.getColumns(); i++) { Cell[] cells = sheet.getColumn(i); int longestStrLen = -1; if (cells.length == 0) continue; /* Find the widest cell in the column. */ for (int j = 0; j < cells.length; j++) { if ( cells[j].getContents().length() > longestStrLen ) { String str = cells[j].getContents(); if (str == null || str.isEmpty()) continue; longestStrLen = str.trim().length(); } } /* If not found, skip the column. */ if (longestStrLen == -1) continue; /* If wider than the max width, crop width */ if (longestStrLen > 255) longestStrLen = 255; CellView cv = sheet.getColumnView(i); cv.setSize(longestStrLen * 256 + 100); /* Every character is 256 units wide, so scale it. */ sheet.setColumnView(i, cv); } }



Prueba este ejemplo:

expandColumns(sheet, 3); workbook.write(); workbook.close(); private void expandColumn(WritableSheet sheet, int amountOfColumns){ int c = amountOfColumns; for(int x=0;x<c;x++) { CellView cell = sheet.getColumnView(x); cell.setAutosize(true); sheet.setColumnView(x, cell); } }


Sé que esta es una pregunta antigua en este momento, pero estaba buscando la solución a esto y pensé que la publicaría en caso de que alguien más la necesitara.

CellView Auto-Size

No estoy seguro de por qué las Preguntas frecuentes no mencionan esto, porque existe muy claramente en los documentos.

Mi código se parecía a lo siguiente:

for(int x=0;x<c;x++) { cell=sheet.getColumnView(x); cell.setAutosize(true); sheet.setColumnView(x, cell); }

c almacena el número de columnas creadas
La celda es solo un CellView posición temporal para el objeto CellView devuelto CellView
hoja es mi objeto WriteableSheet

El Api advierte que esta es una función de procesador intensivo, por lo que probablemente no sea ideal para archivos grandes. Pero para un archivo pequeño como el mío (<100 filas) no tomó tiempo notable.

Espero que esto ayude a alguien.


for(int x=0;x<c;x++) { cell=sheet.getColumnView(x); cell.setAutosize(true); sheet.setColumnView(x, cell); }

Está bien, en lugar de escanear todas las columnas. Pasa la columna como parámetro.

void display(column) { Cell = sheet.getColumnView(column); cell.setAutosize(true); sheet.setColumnView(column, cell); }

Entonces, cuando esté mostrando su texto, puede establecer la longitud particular. Puede ser útil para grandes archivos de Excel.