2013-04-10 6 views
11

Sto usando Jxls APIcome unire le cellule in modo dinamico in JXLS API nel modello trasformato

ora posso creare, passare elenchi di dati al modello che crea foglio di uscita di Excel come desiderato

ma ora ho a fondersi le celle della colonna che trasportano stesso valore

questo è il mio per ogni variabile di cellule ripetitive

<jx:forEach items="${dummyData}" var="dummy" groupBy="col1"> 
<jx:forEach items="${group.items}" var="myList123"> 
${myList123.col1} ${myList123.col2} ${myList123.col3} ${myList123.col4} ${myList123.col5} ${myList123.col6} ${myList123.col7} 
</jx:forEach> 
</jx:forEach> 

WHAT I HAve

WHAT I WANT

+0

Ehi! Hai trovato una soluzione al problema? – letalumil

+0

Cosa intendi per unione? Puoi fare un esempio? Hai un sacco di colonne, l'unione può significare un sacco di cose qui ... – Gi1ber7

risposta

4

io non sono sicuro se questo sarà di aiuto. Ma qui è la mia idea

  1. generare il file come hai mostrato sopra e quindi salvare il file
  2. Ricarica il file utilizzando Apache POI e quindi implementare la logica per unire le celle richieste. POI ha sotto la funzione che ho usato

È possibile utilizzare sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo); dalla libreria POI

ho mai lavorato su Jxlx, ma sembra che non hanno questa caratteristica.

0

Faccio un comando personalizzato jx:each-merge per eseguire l'unione automatica delle cose. Ma ho bisogno di prestare attenzione che sto usando org.jxls:jxls:2.4.2, org.jxls:jxls-poi:1.0.13 e con una struttura di dati main-sub (significa che i dati sono stati raggruppati prima). Si può vedere il modello e il risultato reso dalla foto sotto: enter image description here

codice di esempio:

public void xls() throws Exception { 
    // from template 
    InputStream template = getClass().getClassLoader().getResourceAsStream("templates/each-merge.xls"); 

    // output to 
    File out = new File("target/each-merge-result.xls"); 
    if (out.exists()) out.delete(); 
    OutputStream output = new FileOutputStream(out); 

    // template data 
    Map<String, Object> data = generateData(); 

    // render 
    JxlsUtils.renderTemplate(template, data, output); 

    // verify 
    assertThat(out.exists(), is(true)); 
    assertThat(out.getTotalSpace() > 0, is(true)); 
} 

È possibile ottenere il codice sorgente del progetto github simter-jxls-ext. La classe di test è EachMergeCommandTest.java.

La struttura dei dati è:

[ 
    { 
    sn: 1, 
    name: 'row1', 
    subs: [ 
     {sn: '1-1', name: 'row1sub1'}, 
     ... 
    ] 
    }, 
    ... 
] 

Spero che questo è utile.

Problemi correlati