java的POI操作Excel.doc

上传人:公**** 文档编号:547129526 上传时间:2024-03-20 格式:DOC 页数:12 大小:69.01KB
返回 下载 相关 举报
java的POI操作Excel.doc_第1页
第1页 / 共12页
java的POI操作Excel.doc_第2页
第2页 / 共12页
java的POI操作Excel.doc_第3页
第3页 / 共12页
java的POI操作Excel.doc_第4页
第4页 / 共12页
java的POI操作Excel.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《java的POI操作Excel.doc》由会员分享,可在线阅读,更多相关《java的POI操作Excel.doc(12页珍藏版)》请在金锄头文库上搜索。

1、java的POI操作Excel文件(2)现在我要做的东西基本完成啦,我把这段时间使用POI的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI基本的使用方法,自己去看文档吧。1、设置分页符的bugPOI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。如果sheet是由POI生成的则没有这个问题

2、。我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。2、如何拷贝行我在gmane.org的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写:/注:this.fWorkbook是一个HSSHWorkbook,请自行在外部new public void copyRows (String pSourceSh

3、eetName, String pTargetSheetName, int pStartRow, int pEndRow, int pPosition) HSSFRow sourceRow = null; HSSFRow targetRow = null; HSSFCell sourceCell = null; HSSFCell targetCell = null; HSSFSheet sourceSheet = null; HSSFSheet targetSheet = null; Region region = null; int cType; int i; short j; int ta

4、rgetRowFrom; int targetRowTo; if (pStartRow = -1) | (pEndRow = -1) return; sourceSheet = this.fWorkbook.getSheet(pSourceSheetName); targetSheet = this.fWorkbook.getSheet(pTargetSheetName); /拷贝合并的单元格 for (i = 0; i = pStartRow) & (region.getRowTo() = pEndRow) targetRowFrom = region.getRowFrom() - pSta

5、rtRow + pPosition; targetRowTo = region.getRowTo() - pStartRow + pPosition; region.setRowFrom(targetRowFrom); region.setRowTo(targetRowTo); targetSheet.addMergedRegion(region); /设置列宽 for (i = pStartRow; i = pEndRow; i+) sourceRow = sourceSheet.getRow(i); if (sourceRow != null) for (j = sourceRow.get

6、FirstCellNum(); j sourceRow.getLastCellNum(); j+) targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j); break; /拷贝行并填充数据 for (;i = pEndRow; i+) sourceRow = sourceSheet.getRow(i); if (sourceRow = null) continue; targetRow = targetSheet.createRow(i - pStartRow + pPosition); targetRow.setHeight(

7、sourceRow.getHeight(); for (j = sourceRow.getFirstCellNum(); j = 0) result.append(pPOIFormula.substring(0, index); result.append(pPOIFormula.substring(index + cstReplaceString.length(); else result.append(pPOIFormula); return result.toString(); 至于为什么会出现ATTR(semiVolatile),还需要大家的探索精神!4、向Excel写入图片的问题。我

8、上POI论坛查相关帖子,得到两种结论:1、不支持写入图片;2、支持写入图片,通过EscherGraphics2d这个Class实现。于是我就去查EscherGraphics2d这个Class,发现这个Class提供了N个drawImage方法,喜出望外的我开始写代码,结果调了一天,一直看不到效果,黔驴技穷的我在万般无奈下只好跟踪进drawImage这个函数内部,经过N个函数调用后在最底层函数发现了最终答案:public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgColor, ImageObserver imageobserver) if (logger.check( POILogger.WARN ) logger.log(POILogger.WARN,drawImage() not supported); return true; 所以我强烈建议大家,以后使用第三方开发包一定尽量下载它的源代码,这样你在碰到问题时,看看它的的内部是怎么实现的,很多

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号