个人上一篇博文已经说了为何会去整理PoiUtil这个工具类,整理的过程其实也是有趣又漫长(耗时差很少两天)的过程,期间遇到的一些问题作记录以下: java
一、导出多sheet的excel,sheet样式丢失问题 工具
利用低版本poi-3.2-FINAL-20081019,经过多sheet的excel模版,导出excel后,导出的excel文件中,前面8-9个sheet都没有问题,以后的sheet在wps中显示一片空白,用微软的excel查看,数据还在,样式丢失。因为项目中用到的办公套件是金山的,因此微软下样式丢失的问题,这里不予考虑。 spa
上apacha的官网,发现poi的版本都到3.9了,尝试下了最新的poi jar包,居然很完美的解决了wps下导出excel样式丢失的问题(这点网友能够做为参考)。惬意poi 3.5及之后的包都须要jdk1.5及以上的支持,jdk1.4是用不了的。只能说很遗憾,我跟poi3.5+是无缘了。这也是咱们考虑sheet复制的一个技术缘由。 excel
二、单元格背景色和边框色拷贝不对问题 io
在PoiUtil工具类可以完成基本的sheet复制以后,颜色的问题出现了。事情大概是这样的,经过java代码从源sheet的单元格获取的边框和前景色的色值和经过wps查看源excel的色值对应不上,具体说,单元格实际的色值是红色,经过java代码拿到的是粉色,这就形成了复制后sheet跟源sheet仍是有差异的。 jdk
至于为何poi拿到的颜色是不对,这个问题,暂时无法去深究了,做为项目的一个解决方案,在PoiUtil中提供了两个工具方法(setMForeColor修改HSSFColor.YELLOW的色值,setMBorderColor修改PINK的色值),在拷贝sheet以前,手工调用这两个方法,能够定义本身的色值。这样poi在使用YELLOW或者PINK的时候,就是咱们须要的颜色了。 方法
三、对合并区域的处理 技术
网上较早的代码是经过Region来实现单元格的合并,其实这个类已通过时了,在这里我改为了经过CellRangeAddress完成合并单元格的设置。 数据
四、关于cell背景色的色值问题 项目
细心的同窗会发现,经过poi获取单元格的背景色,其色值永远是HSSFColor.AUTOMATIC(index:64)。