我这两天,因为客户对Excel导出格式有高要求,因为想做的灵活,不想用模板,所有样式,页面打印设置用POI代码实现所以遇到POI设置页边距的一个怪问题,于是下载了POI的源码研究了一下,结果发现肯定是POI的一个Bug。现列出来,大家讨论讨论,如何解决。
sheet.setMargin(HSSFSheet.BottomMargin, 0.5);// 页边距(下)
sheet.setMargin(HSSFSheet.LeftMargin, 0.25);// 页边距(左)
sheet.setMargin(HSSFSheet.RightMargin, 0.25);// 页边距(右)
sheet.setMargin(HSSFSheet.TopMargin, 0.5);// 页边距(上)
sheet.setMargin(HSSFSheet.HeaderMargin, 0.25);// Header 边距
sheet.setMargin(HSSFSheet.FooterMargin, 0.25);// Footer 边距
在org.apache.poi.ss.usermodel.Sheet接口里定义了如下6个常量值
public static final short LeftMargin = 0;
public static final short RightMargin = 1;
public static final short TopMargin = 2;
public static final short BottomMargin = 3;
public static final short HeaderMargin = 4;
public static final short FooterMargin = 5;
但一直跟下去,在org.apache.poi.hssf.record.aggregates.PageSettingsBlock里有这样一个方法:
public void setMargin(short margin, double size) {
Margin m = getMarginRec(margin);
if (m == null) {
switch (margin) {
case InternalSheet.LeftMargin:
_leftMargin = new LeftMarginRecord();
m = _leftMargin;
break;
case InternalSheet.RightMargin:
_rightMargin = new RightMarginRecord();
m = _rightMargin;
break;
case InternalSheet.TopMargin:
_topMargin = new TopMarginRecord();
m = _topMargin;
break;
case InternalSheet.BottomMargin:
_bottomMargin = new BottomMarginRecord();
m = _bottomMargin;
break;
default :
throw new IllegalArgumentException( "Unknown margin constant: " + margin );
}
}
m.setMargin( size );
}
这里只判断了前四种页边距,没有判断设置HeaderMargin 和FooterMargin 两种类型,所以编译期间没有错误。但在运行期间就抛出了IllegalArgumentException: Unknown margin constant: 4;
异常。
我在POI3.6, POI3.7, POI3.8beta3三个版本都试过。这个Bug都没有解决。请问是否有其他的解决办法?
分享到:
相关推荐
POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法
解决POI3.10在添加图片的时候自身有一个BUG。纠结了很久都没解决,今天终于弄好了,文件包中附带了修改好的jar包bsj-poi-ooxml-3.10-FINAL-20140208.jar。主要问题是出在:org.apache.poi.xwpf.usermodel.XWPFRun....
poi jar包 测试使用无bug poi jar包 测试使用无bug
java.lang.NullPointerException at org.apache.poi.openxml4j.opc.OPCPackage.getPart(OPCPackage.java:625) at org.apache.poi.POIXMLDocumentPart....希望有同样问题的人能快速解决问题,所以上传此文档
在地理信息系统中,一个POI可以是一栋房子、 一个商铺、一个邮筒、一个公交站等。 高德POI又名高德兴趣点,来源于高德地图,高德是中国领先的数字地图内容、导航和位置服务解决方 案提供商。拥有导航电子地图...
poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程poi教程
poi excel poi excel poi excel poi excel poi excel poi excel poi excel poi excel
关于poi ,Apache在今年,也就是在2017年9月15日 正式发布了POI 3.17版本, Apache POI团队对于3.17版本进行了一些功能的修复。主要是几个新的功能区域和许多错误修复。 POI 3.17是支持Java 6的最后一个版本。下一个...
easyExcel支持最低的POI版本是3.17,现有项目若已用POI版本比这高的话,希望不改变现有的引用,解决jar包冲突的话,使用该独立版的jar包。该包已改过包名,亲测可兼容使用,网上有说把poi升级到4.1.2但是试了导出...
所以你的文档如果有很多首段空白行的话,不要浪费C币下载啦.---不过我也有处理办法,在demo里面的注释写了哟,亲测有效!---开发测试demo来源于帮我对象写一个工具去处理他们的蒙古文课题内容,开发琢磨不易,希望...
POI数据应用解决方案
这样一来,地图POI呈现的将不再是一张标有地理位置图片,而是一个虚拟的 现实世界。高德地图已经整合了众多深度POI点,这些POI点也就是搜索内容中的多个类别。当浏览、拖拽 地图的时候,如果发现了感兴趣的地点或...
2010年 百度POI 上海百度POI 有全国数据 有历史全国数据 全类目poi 可带门牌号等扩展字段
由于现在版本需要使用poi3.17以上版本,对项目本身有poi3.16的很不友好,jar包冲突,通过修改jar包路径达到目的,解决jar包冲突
基于位置的服务数据,移动互联网位置信息服务,全国POI数据库百度Poi高德poi数据库
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
2016年 高德POI 深圳高德POI 有全国数据 有历史全国数据 全类目poi 可带门牌号等扩展字段
一个POI导出Excel万级数据分页实现 解决内存溢出问题 完整的 project demo 有数据库dmp文件
POI 删除excel列,可以设置多列,POI里怎么没有删除列的API呢