`
ajian528
  • 浏览: 19929 次
  • 性别: 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数据的获取途径多样,包括网络...

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

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

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

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

    poi-3.17 poi-3.16

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

    POI3.7/POI3.8/POI3.9

    这里提到的"POI3.7/POI3.8/POI3.9"指的是POI项目的不同版本,每个版本都有其特定的功能改进和bug修复。 1. **POI 3.7**: 这是POI项目的一个较早版本,发布于2010年。它支持对Excel(HSSF和XSSF)、Word(HWPF和XWPF...

    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`...

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

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

    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|百度历史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)中的一个...

Global site tag (gtag.js) - Google Analytics