java - JXLS 未写入已处理的 JEXL

标签 java jxls jexl

按照其网站上的示例,http://jxls.sourceforge.net/getting_started.html 。我在尝试写入处理后的文件时遇到了问题。它没有写入应由 JEXL 替换的数据,而是只是再次写入模板文件,就像复制并粘贴模板文件一样。

这就是我的模板文件的样子: Template file

这就是它的输出: Output file

我的代码与指南几乎相同,所以我不确定为什么我的代码的行为与他们的不同。我改变了一件事可能会影响它,那就是使用 createInitialContext()而不是getInitialContext() 。原因是由于某种原因我的 jar 不包含 getInitialContext()方法,尽管 jar 都是相同的(2.0.0),但是,它确实包含 createInitialContext()方法。从我的调试来看,代码确实处理了数据并用正确的数据替换了 JEXL,因为 xls 区域的大小从 4 更改为 63。

我的代码:

InputStream is = getClass().getResourceAsStream("/transactions_template.xls");
OutputStream os = new FileOutputStream(file);
Transformer transformer = TransformerFactory.createTransformer(is, os);
AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
List<Area> xlsAreaList = areaBuilder.build();
Area xlsArea = xlsAreaList.get(0);
Context context = transformer.createInitialContext();
context.putVar("transactions", transactions);
xlsArea.applyAt(new CellRef("Result!A1"), context);
transformer.write();
is.close();
os.close();

TLDR:JXLS 似乎处理 JEXL,但它改为写入模板文件。我确实将原始指南中的 getInitialContext 更改为 createInitialContext,因为 createInitialContext 不在我的版本上,即使指南使用我的版本 2.0.0。

最佳答案

您检查过生成的 Excel 文档的结果工作表吗?

Getting Started guide中的示例不会更改模板表,只是在Result表中生成所有输出,如传递给applyAt方法的CellRef参数所指示

xlsArea.applyAt(new CellRef("Result!A1"), context);

如果您想在模板表中填充数据,您应该为 applyAt 方法提供适当的 CellRef 。例如,如果您的模板表被命名为Template,您应该有这样的内容

xlsArea.applyAt(new CellRef("Template!A1"), context);

关于java - JXLS 未写入已处理的 JEXL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255825/

相关文章:

java - 使用 jxls 写入大量行以在 java 中表现出色

JMeter - jexl2 和 jexl3 之间的区别

java - JEXL 在哪里存储本地变量以及通过什么机制分配本地变量?

java - Spring RequestParam Map<String, String>

java - 为什么我得到 `incompatible types error` ?

java - JButton Action 监听器问题。字段中显示的 slider 值

java - JXLS。如何将不同的集合放入不同的工作表中?

java - 带 JXLS 2 的 SXSSF 变压器

docker - Sonatype Nexus 3内容选择器是否通过docker容器名称进行了命名?

java - 如何在类之间执行 JAVA 回调?