jxls结果的格式在您之前有一个空列表时不会被"移动"。
请在此处参考模板和输出文件:https://files.fm/u/e68wgub2
List<String> NON_EMPTY_LIST = new ArrayList<String>(Arrays.asList("A", "B", "C"));
List<String> EMPTY_LIST = new ArrayList<String>();
String EMPTY_LIST_NAME = "emptyList";
String NON_EMPTY_LIST_NAME = "nonEmptyList";
String INPUT_FILE_PATH = "./Test_Template.xls";
String OUTPUT_FILE_PATH = "./Output.xls";
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(new File(INPUT_FILE_PATH));
os = new FileOutputStream(OUTPUT_FILE_PATH);
Context context = new Context();
context.putVar(NON_EMPTY_LIST_NAME, NON_EMPTY_LIST);
context.putVar(EMPTY_LIST_NAME, EMPTY_LIST);
JxlsHelper.getInstance().processTemplate(is, os, context);
is.close();
os.flush();
os.close();
System.out.println(OUTPUT_FILE_PATH + " created.");
} catch (IOException e) {
e.printStackTrace();
}
在代码中,您会看到两个列表:一个带有名称为" empty_list_name"的空列表和带有名称" non_empty_list_name"的非空列表。在模板中,您的A8具有较大的单元格式。结果,您仍然具有具有较大单元格格式的A8。但是,单元格A8在结果中不应具有此格式,而是A7,因为由于空白列表,结果转移了。
当单元向下移动而不是向上时,我会得到相同的结果。使用JXLS 2.4.4。
这是JXL设计的方式 - 它基于模板区域变化与结果区域相比,它可以移动单元格。由于列表为空,因此结果面积的高度为0,但原件是1,这就是为什么它移动了。
我可以在创建上下文时建议您检查列表是否为空,然后插入列表字符串,例如"无数据",或者只是空字符串以进行单元格处理并保存。
回答我自己的问题:这是一个错误。应该在新的JXLS版本中进行纠正:https://bitbucket.org/leonate/jxls/issues/100/cell-format-not-being-correctly-shifted