涡阳做网站,wordpress 登录用户信息,网站空间上传教程,建筑材料网介绍 这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案。 Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告。 在这些情况下#xff0c;Java程序员使用POI :-)。 这些报告通常具有严格的样式和数据格式规则。 数据通常是SQL查询执行的结果… 介绍 这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案。 Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告。 在这些情况下Java程序员使用POI :-)。 这些报告通常具有严格的样式和数据格式规则。 数据通常是SQL查询执行的结果。 通常的目标是将其变为 到这个 问题 这里的问题是样式可以基于不同的标准来应用。 例如数字可以用小数点分隔符后面的不同位数来格式化。 日期可能需要使用特殊格式进行格式化。 最后但并非最不重要的是可能需要用颜色选择某些列或行。 在代码中“直接”应用这些样式将导致许多难以阅读和维护的代码。 每次报表样式更改时可能都需要更改许多代码。 如果样式可以像谓词一样具有“样式”并且可以根据该谓词来应用那就太好了。 但是如何执行他的 解 所提出的解决方案解决了谓词问题。 我将此解决方案与POI结合使用来生成报告因此大多数情况下我会假定使用了类似POI的库。 样式图生成 在执行任何文档创建操作之前必须创建样式图。 此样式图将包含映射到键的样式。 键必须包含所有可能影响样式的值。 例如值的类型在Java中行号列号和值本身。 该地图将如下所示 密钥序列生成 这个想法是生成一个键列表java.util.List以正确的顺序进行尝试。 该列表用于定义对象的样式。 列表中的每个键都以迭代顺序进行尝试直到样式图中的一个键值为止。 一般的想法是从更详细的键开始并填写所有值最后以可应用于任何单元格的最通用样式结束。 例如ri是行索引ci是列索引 ListCellStyleKey allKeys new ArrayList();
if (val ! null) {if ((ri ! null) || (ci ! null)) {allKeys.add(new CellStyleKey(val, val.getClass(), ri, ci));allKeys.add(new CellStyleKey(val, val.getClass(), ri, null));allKeys.add(new CellStyleKey(val, val.getClass(), null, ci));allKeys.add(new CellStyleKey(val, val.getClass(), null, null));allKeys.add(new CellStyleKey(null, val.getClass(), ri, ci));allKeys.add(new CellStyleKey(null, val.getClass(), ri, null));allKeys.add(new CellStyleKey(null, val.getClass(), null, ci));allKeys.add(new CellStyleKey(null, val.getClass(), null, null));} else {allKeys.add(new CellStyleKey(val, val.getClass(), null, null));allKeys.add(new CellStyleKey(null, val.getClass(), null, null));}
}
allKeys.add(new CellStyleKey(null, null, ri, ci));
allKeys.add(new CellStyleKey(null, null, ri, null));
allKeys.add(new CellStyleKey(null, null, null, ci));
allKeys.add(new CellStyleKey(null, null, null, null)); 在此代码中最详细的键是包含所有值的键值类行号和列号。 最不详细的键不包含任何值。 样式图生成 对于列表中的每个键列表应尽可能短对样式图执行get操作。 如果样式图具有此键的值则为样式。 结论 此方案允许将样式简单但灵活地分配给Excel文档中的行/列/值/类。 翻译自: https://www.javacodegeeks.com/2019/05/flexible-styling-varying-criteria-poi-created-documents.html