JXLS在每个命令中使用if-command时丢失行

时间:2017-05-31 15:17:26

标签: java excel jxls

已使用的版本
poi:3.15
jxls:2.4.0
jxls-poi:1.0.12

这是一个template,可以简单地再现问题 请注意,我正在使用JXLS的多表功能。

if-condition 为真(网站有地址)时,结果会按预期显示
但是如果它是假的并且没有显示地址我丢失了2行,编号7和8,替换为空行。
result

任何人都已经遇到过这样的问题? 我在使用JXLS创建工作表的方式上犯了错误吗?

public class Test {

public static void main(String[] args) throws Exception {
    String first = "Bob";
    String last = "John";
    String phone = "";
    List<Person> personList = new ArrayList<>();
    for (int i=1 ; i<10 ; i++) {
        personList.add(new Person(first + i, last + i, phone + i));
    }

    List<Site> mySites = new ArrayList<>();
    Site site = new Site("site 1", "Paris", "", "rue 1", "rue 2", personList);
    mySites.add(site);
    site = new Site("site 2", "", "Bob", "", "", personList);
    mySites.add(site);

    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    InputStream template = null;
    if (contextClassLoader != null) {
        template = contextClassLoader.getResourceAsStream("test1.xls");
    }

    OutputStream os = new BufferedOutputStream(new FileOutputStream("c:/temp/res.xls"));

    org.jxls.common.Context contextData = PoiTransformer.createInitialContext();

    Map<String, Object> beansData = new HashMap<>();
    List<String> sheetNames = Arrays.asList("site1","site2");
    beansData.put("mySites", mySites);
    beansData.put("sheetNames", sheetNames);
    for (Map.Entry<String, Object> entry : beansData.entrySet())
    {
        contextData.putVar(entry.getKey(), entry.getValue());
    }

    JxlsHelper.getInstance().setUseFastFormulaProcessor(false).processTemplate(template, os, contextData);

    template.close();
    os.flush();
    os.close();


}

}

此致

1 个答案:

答案 0 :(得分:1)

现在问题已解决,修复程序将在下一个Jxls版本v2.4.1中进行。

有关详细信息,请参阅issue#77 JXLS Losing rows when using if-command inside each-command