2013-04-10 23 views
11

içinde JXLS API'da dinamik hücreleri birleştirme, I hemen oluşturabilir <a href="http://jxls.sourceforge.net/index.html" rel="noreferrer">Jxls API</a></p> <p>kullanıyorum dönüştürülmüş şablon

arzu edildiği gibi Excel çıkış tabaka oluşturur şablona veri listelerini geçmek ama şimdi birleştirmek için nasıl aynı değer taşıyan kolon hücreleri

bu tekrar eden hücreler

<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> 

için her etiket için benim olayım 0

WHAT I WANT

+0

Hey! Soruna bir çözüm buldunuz mu? – letalumil

+0

Birleştirme ile ne demek istiyorsun? Bir örnek verebilir misin? Çok fazla sütununuz var, birleştirme burada çok şey ifade edebilir ... – Gi1ber7

cevap

4

Yardımcı olur emin değilim. Ama burada apache POI kullanarak dosyayı tekrar yükle dosyayı

  • kaydetmek ve ardından gerekli hücreleri birleştirmek için mantık uygulamak yukarıda ve daha sonra gösterdiğim gibi

    1. dosyası oluşturun benim fikrim. POI Ben Sana Jxlx üzerinde hiç çalışmamış

      POI kitaplığından sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo); kullanabilirsiniz

    kullanmış olduğu işlevi aşağıda vardır, ama bu özelliği yok gibi görünüyor.

  • 0

    Otomatik birleştirme işlemlerini yapmak için özel bir jx:each-merge komutu hazırlıyorum. Ancak, org.jxls:jxls:2.4.2,kullanıyorum ve bir ana alt veri yapısına sahip olduğumu dikkate almanız gerekir (veriler daha önce gruplandırılmış demektir). Sen feryat resimden şablonu ve oluşturulan sonucu görebilirsiniz: enter image description here

    kod örneği:

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

    Sen github proje simter-jxls-ext kaynak kodunu alabilirsiniz. Test sınıfı EachMergeCommandTest.java.

    veri yapısı şöyledir: Bu yardımcı olur

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

    Umut.