`
ajian528
  • 浏览: 19824 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

POI一Bug详谈,大家讨论一下,有没有解决办法

阅读更多

我这两天,因为客户对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都没有解决。请问是否有其他的解决办法?

分享到:
评论

相关推荐

    easyExcel解决poi冲突更改内使用路劲.rar

    标题提到的问题就是这样一个情况:“easyExcel解决poi冲突更改内使用路径.rar”描述了一个解决方案,即通过调整jar包的路径来解决因版本不兼容导致的冲突问题。 首先,我们需要理解什么是jar冲突。在Java项目中,...

    poi jar包 测试使用无bug

    遇到问题时,开发者可以查阅官方文档,参与讨论论坛,或参考已有的解决方案。 总结来说,Apache POI是Java开发中处理Office文件的强大工具。它提供的API能够满足各种需求,无论是读取现有的文件,还是创建新的文件...

    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导出POI导出POI...

    全国POI数据库百度Poi高德poi数据库解决方案

    POI数据库是一个庞大的地理信息系统(GIS)的一部分,包含大量地点的坐标信息、类别、名称、营业时间、评分等多维度数据。这些数据通常以结构化的形式存储,便于快速检索和分析。POI数据的获取途径多样,包括网络...

    解决POI3.10 添加图片不成功的问题

    解决POI3.10在添加图片的时候自身有一个BUG。纠结了很久都没解决,今天终于弄好了,文件包中附带了修改好的jar包bsj-poi-ooxml-3.10-FINAL-20140208.jar。主要问题是出在:org.apache.poi.xwpf.usermodel.XWPFRun....

    POI操作Excel合并单元格边框问题解决方法

    POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法

    poi-3.17 poi-3.16

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。POI 提供了一套 Java API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件。标题中的"poi-3.17 poi-...

    poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad

    标题中的"poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad"提及的是Apache POI项目中的多个关键组件和目录结构。Apache POI是一个开源的Java库,专门用于读写Microsoft Office...

    高德2017poi 高德历史poi 2017科研poi

    在地理信息系统中,一个POI可以是一栋房子、 一个商铺、一个邮筒、一个公交站等。 高德POI又名高德兴趣点,来源于高德地图,高德是中国领先的数字地图内容、导航和位置服务解决方 案提供商。拥有导航电子地图...

    poi导入到eclipse

    官方的公告讲,这一版主要是追加了一些新的特性和BUG修正,不过稍微有点儿遗憾的是,还不能很好的操作Excel2007。 下载poi的jar包后,就可以导入到eclipse中。在eclipse中,需要创建一个新的Java项目并将poi的jar包...

    JAVA-POI读取word每一段所在页码(附依赖jar包).zip

    所以你的文档如果有很多首段空白行的话,不要浪费C币下载啦.---不过我也有处理办法,在demo里面的注释写了哟,亲测有效!---开发测试demo来源于帮我对象写一个工具去处理他们的蒙古文课题内容,开发琢磨不易,希望...

    poi excel poi excel poi excel

    #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来处理 Microsoft Office 文件格式,特别是针对 Excel(`.xls` 和 `.xlsx`)和 Word(`.doc` 和 `.docx`...

    linux下poi读取word空指针异常问题解决

    ### Linux下使用POI读取Word文件出现空指针异常问题解决方案 #### 问题背景 在使用Apache POI处理Word文档时,在Linux环境下遇到了`java.lang.NullPointerException`异常。异常的具体位置出现在`org.apache.poi....

    poi3.17和poi4.0包含converter.jar

    6. **社区支持和资源**:作为开源项目,Apache POI拥有活跃的开发者社区和丰富的在线资源,包括官方文档、示例代码、论坛讨论等,可以帮助开发者解决使用过程中遇到的问题。 在实际应用中,Apache POI广泛应用于...

    poi jar包 官网下载 最新poi官网资源

    关于poi ,Apache在今年,也就是在2017年9月15日 正式发布了POI 3.17版本, Apache POI团队对于3.17版本进行了一些功能的修复。主要是几个新的功能区域和许多错误修复。 POI 3.17是支持Java 6的最后一个版本。下一个...

    2010年 百度POI 上海百度POI 有全国数据 有历史全国数据

    2010年 百度POI 上海百度POI 有全国数据 有历史全国数据 全类目poi 可带门牌号等扩展字段

    POI poi相关所有jar包 poi jar包 poi最全jar包

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel(.xlsx、.xls)、Word(.doc、.docx)和PowerPoint(.ppt、.pptx)。这个压缩包包含了POI项目中所有必要的jar包,总计十二个,确保了...

    使用poi-tl动态写入目录更新问题解决

    使用poi-tl动态写入目录更新问题解决

    2019版本poi 2019高德poi 2019百度poi

    标题中的“2019版本poi 2019高德poi 2019百度poi”提及的是关于2019年不同来源的POI(Point of Interest)数据,这些数据可能包括了高德地图和百度地图提供的兴趣点信息。POI数据是地理位置信息系统(GIS)中的一个...

    高德历史poi|百度历史poi|高德信息点|百度信息点

    在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。 高德POI又名高德兴趣点,来源于高德地图,高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。拥有导航电子地图甲级...

Global site tag (gtag.js) - Google Analytics