2009-11-03 6 views

risposta

2

Dal JExcelApi FAQ

come faccio a fare l'equivilent di del "Format/colonna/adattamento automatico Selezione" Excel?

Non esiste alcuna funzione API per farlo. Avrai bisogno di scrivere il codice che analizza le celle in ogni colonna, calcola la lunghezza massima, quindi chiama setColumnView() di conseguenza. Ciò ti avvicina a ciò che fa Excel ma non esattamente. Poiché la maggior parte dei font ha caratteri a larghezza variabile, per ottenere lo stesso valore esatto, è necessario utilizzare FontMetrics per calcolare la larghezza massima di ogni stringa nella colonna. Nessuno ha pubblicato il codice su come farlo ancora. Sentiti libero di inserire il codice su Yahoo! raggruppa o invia direttamente all'autore delle FAQ elencato in fondo a questa pagina.

FontMetrics si riferisce presumibilmente a java.awt.FontMetrics. Dovresti essere in grado di lavorare a qualcosa con il metodo getLineMetrics (String, Graphics) che avrei comunque.

37

So che questa è una domanda vecchia a questo punto, ma stavo cercando la soluzione a questo e ho pensato di pubblicarlo nel caso in cui qualcun altro ne avesse bisogno.

CellView Auto-Size

io non sono sicuro perché le FAQ non menziona questo, perché esiste molto chiaramente nella documentazione.

Il mio codice sembrava seguenti:

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

c memorizza il numero di colonne creato
cellulare è solo un segnaposto temporaneo per la tornata oggetto
foglio CellView è il mio WriteableSheet oggetto

L'Api avverte che questa è una funzione intensiva del processore, quindi probabilmente non è l'ideale per file di grandi dimensioni. Ma per un piccolo file come il mio (< 100 righe) non ci sono voluti tempi notevoli.

Spero che questo aiuti qualcuno.

+0

Grande ... questo sta lavorando ... –

+0

Grazie mille! Potresti aggiungere il tipo di cella? Quello è CellView? – sboda

2

Il metodo di autosize di CellView non funziona sempre per me. Il mio modo di farlo è impostare in modo programmato la dimensione (larghezza) della colonna in base alla lunghezza massima dei dati nella colonna. Quindi eseguire alcune operazioni matematiche.

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

dove highest è un int che detiene la più lunga durata di dati in colonna.

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

Va bene, invece di eseguire la scansione di tutte le colonne. Passa la colonna come parametro.

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

Così, quando si visualizza il testo, è possibile impostare la lunghezza specifica. Può essere utile per enormi file Excel.

11

Il metodo si spiega da sé e ha commentato:

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

Prova questa 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); 
    } 
}