2013-04-10 12 views
11

Używam Jxls APIjak scalić komórki dynamicznie JXLS API w przekształconej szablonu

mogę teraz tworzyć, przekazywać listy danych do szablonu, który tworzy arkusz wyjściowy Excel jako pożądany

ale teraz mam do scalania komórki, które posiadają tę samą kolumnę wartość

to jest mój dla każdego znacznika powtarzalnych komórek

<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

Hej! Czy znalazłeś rozwiązanie tego problemu? – letalumil

+0

Co masz na myśli przez scalenie? Czy możesz dać przykład? Masz wiele kolumn, scalenie może oznaczać wiele rzeczy tutaj ... – Gi1ber7

Odpowiedz

4

Nie jestem pewien, czy to pomoże. Ale tu jest mój pomysł

  1. wygenerować plik jak pokazałeś powyżej, a następnie zapisz plik
  2. Odśwież plik przy użyciu Apache POI, a następnie wdrożyć logiki połączyć wymagany komórek. UM ma poniżej funkcji, które użyłem

Można użyć sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo); od POI biblioteki

nigdy nie pracował na Jxlx, ale wygląda na to, że nie mają tej funkcji.

0

Wykonuję niestandardową komendę jx:each-merge, aby automatycznie scalać obiekty. Ale trzeba zwrócić uwagę, że używam org.jxls:jxls:2.4.2, org.jxls:jxls-poi:1.0.13 i mając strukturę danych głównych sub-drzew (oznacza to, że dane zostały pogrupowane wcześniej). Można zobaczyć szablon i renderowany wynik z mieszkiem zdjęciu: przykład enter image description here

Kod:

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

można uzyskać kod źródłowy projektu github simter-jxls-ext. Klasa testu to EachMergeCommandTest.java.

Struktura danych jest:

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

Nadzieja jest to pomocne.