发布于 2012年06月27日
问题背景:
在JavaEE开发中,我们少不了做一些报表导出工作,但最苦恼的莫过于报表的设计,一个像素一个像素的调整给我们带来很多不便。今天一客户指出,我们系统中的其中一个模块导出Excel时,一个字段占用了多个列,用客户的话说:你们不要把单元格合并了嘛,介个样子我们后期处理很麻烦的撒。
问题描述:在背景中所指出的问题,其对象就是一普通的报表,客户所描述的意思是,比如一个姓名字段,我们可以看到它占用了Excel单元格的B列跟C列,有的字段会占用更多的列,之前对这问题没研究过,以至于我想当然的以为是PageHeader或detail部分哪两个元素之间没有紧挨着,尽管这样的确会出现这样的问题,但实际上,今天所遇到的并不是因为这个原因。问题解决:
实际上,iReport会为我们每个Field分配一列,如果上下两个元素(比如上一个元素$P{name}在PageHeader中作为导出表格的表头,下一个元素$V{name}在detail中作为具体的值)宽度相同,而且边缘也对齐的话,那么iReport会将这两个元素分配在同一列中,倘若这两个元素左右边框没有对齐,那么他们左右边框加起来一共有多少个不同的横坐标值,在导出的Excel中就会出现多少个边框线,这里假设为N,那么iReport就会为这两个元素分配N-1列。
注意事项:
一般在pageHeader和detail中,我们都不会忽略这一点,但在title及summary中,同样遵循这个原则,也就是没多出一个元素,如果这个元素的横坐标与其它的都不同,则iReport就会为其多分配一列。