介绍

这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案。 Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告。 在这些情况下,Java程序员使用POI :-)。 这些报告通常具有严格的样式和数据格式规则。 数据通常是SQL查询执行的结果。

通常的目标是将其变为:


到这个:


问题

这里的问题是样式可以基于不同的标准来应用。 例如,数字可以用小数点分隔符后面的不同位数来格式化。 日期可能需要使用特殊格式进行格式化。 最后但并非最不重要的是,可能需要用颜色选择某些列或行。

在代码中“直接”应用这些样式将导致许多难以阅读和维护的代码。 每次报表样式更改时,可能都需要更改许多代码。

如果样式可以像谓词一样具有“样式”,并且可以根据该谓词来应用,那就太好了。 但是如何执行他的?

所提出的解决方案解决了谓词问题。 我将此解决方案与POI结合使用来生成报告,因此大多数情况下,我会假定使用了类似POI的库。

样式图生成

在执行任何文档创建操作之前,必须创建样式图。 此样式图将包含映射到键的样式。 键必须包含所有可能影响样式的值。 例如,值的类型(在Java中),行号,列号和值本身。

该地图将如下所示:


密钥序列生成

这个想法是生成一个键列表(java.util.List),以正确的顺序进行尝试。 该列表用于定义对象的样式。 列表中的每个键都以迭代顺序进行尝试,直到样式图中的一个键值为止。

一般的想法是从更详细的键开始,并填写所有值,最后以可应用于任何单元格的最通用样式结束。

例如(ri是行索引,ci是列索引):

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

POI创建的文档具有不同条件的灵活样式相关推荐

  1. poi动态创建文档_POI创建的文档具有不同条件的灵活样式

    poi动态创建文档 介绍 这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案. Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告. 在这些情况下,Java程序员使 ...

  2. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  3. POI API 创建Excel 文档

    原文来自 http://www.blogjava.net/hezhi/articles/POI.html HSSF提供给用户使用的对象在org.apache.poi.hssf.usermodel包中, ...

  4. 利用POI操作不同版本号word文档中的图片以及创建word文档

    我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...

  5. poi中文api文档

    POI中文API文档 一. POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二. HS ...

  6. java后台处理excel_java后台利用Apache poi 生成excel文档提供前台下载示例

    之前在项目中会用到在java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了.于是乎我在学会用Java在后 ...

  7. Java使用POI将doc文档转为Html

    Java使用POI将doc文档转为Html 前提 几个使用到的类 几个方法的理解 converter.setPicturesManager(xxxx) converter.processDocumen ...

  8. poi操作word文档总结

    POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量. 但是怎么导入word数据. ...

  9. Java 使用word模板创建word文档报告教程

    上面是java 利用word模板生成的一个word报告文档,利用的是第三方类库Poi-tl 是实现的. poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你 ...

最新文章

  1. 服务器返回的json数据,通过本地解析调用SBjson的类
  2. jquery的常用API汇总
  3. Craig离开Webb了
  4. html里,实现图片与文字对齐的最简洁方法
  5. android 网络gif_Android SurfaceView实现GIF动画架包,播放GIF动画
  6. DDL DML DCL 简介
  7. linux下开通ssh
  8. dbf转成excel_DBF Converter将DBF文件转换成Excel表格教程
  9. python数据分析师网易云课堂_网易云课堂 数据分析(一)
  10. 华为手机连电脑当摄像头用_怎么用华为手机当电脑摄像头?
  11. Qt实现提示音以及QSound的使用说明
  12. java矩形碰撞检测_JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】...
  13. SEO优化:关于网站降权的方方面面!!!
  14. Foxmail是否可以隐藏文件夹?【网易企业邮箱申请】
  15. iOS获取设备IP地址(WiFi,蜂窝数据两种情况)
  16. 电脑html接口是什么意思,笔记本电脑这个接口是什么|笔记本电脑常见接口介绍...
  17. 什么是正向代理和反向代理
  18. 百度云服务器BCC中安装pycharm
  19. ajax实现文件的上传(局部刷新页面,文件上传)
  20. mc用什么版本的java_MC版本Java版5大功能优势

热门文章

  1. 牛客练习赛 65 (待补E-网络流)
  2. Codeforces Round #661 (Div. 3)
  3. 【模拟】pjesma(jzoj 1151)
  4. 2-sat模板- 输出可行解
  5. MongoDB新建或删除索引
  6. JAVA后端面试100 QA之第一篇
  7. 达到年薪 40W 必需掌握的技术。
  8. Java线程池,从使用到原理
  9. java中,剩下的这两个内部类不太好理解!
  10. 多线程----join插队