2009-11-03 28 views

Respuesta

2

Desde el JExcelApi FAQ

¿Cómo puedo hacer el equivilent de de "Formato/Columna/Ajuste automático Selección" Excel?

No hay función de API para hacer esto por usted. Tendrá que escribir un código que escanee las celdas de cada columna, calcule la longitud máxima y luego llame a setColumnView() en consecuencia. Esto te acercará a lo que Excel hace pero no exactamente. Como la mayoría de las fuentes tienen caracteres de ancho variable, para obtener el mismo valor exacto, deberá usar 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. No dude en publicar el código en Yahoo! agrupe o envíelo directamente al autor de las FAQ enumerado en la parte inferior de esta página.

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

37

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

CellView Auto-Size

no estoy seguro de por qué el FAQ no menciona esto, ya que existe muy claramente en la documentación.

Mi código se parecía a los siguientes:

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
celular es sólo un marcador de posición temporal para el regresado CellView objeto
hoja es mi WriteableSheet objeto

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

Espero que esto ayude a alguien.

+0

Gran ... esto está funcionando ... –

+0

Muchas gracias! ¿Podría agregar el tipo de la celda? Eso es CellView? – sboda

2

El método de autoescala de CellView no funciona para mí todo el tiempo. Mi forma de hacerlo es establecer programáticamente el 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 mantiene la longitud más larga de los datos en la columna.

6
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. Pase la columna como un parámetro.

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

Así que cuando va a mostrar su texto, puede establecer la duración específica. Puede ser útil para grandes archivos de Excel.

11

El método se explica por sí mismo y comentó:

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); 
    } 
} 
0

probar este exemple:

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); 
    } 
} 
Cuestiones relacionadas