java的POI操作Excel文件.pdf
《java的POI操作Excel文件.pdf》由会员分享,可在线阅读,更多相关《java的POI操作Excel文件.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、java 的 POI 操作 Excel 文件(2)现在我要做的东西基本完成啦,我把这段时间使用POI 的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI 基本的使用方法,自己去看文档吧。1、设置分页符的bug POI 里的 HSSFSheet 类提供了 setRowBreak 方法可以设置Sheet的分页符。Bug:如果你要设置分页符的Sheet 是本来就有的,并且你没有在里面插入过分页符,那么调用 setRowBreak 时 POI 会抛出空指针的异常。解决方法:在Excel 里给这个sheet插入一个分页符,用POI 打开后再把它删掉,然后你就可以随意插入分页符了。如果
2、sheet 是由POI 生成的则没有这个问题。我跟踪了setRowBreak 的源代码,发现是Sheet.Java下的 PageBreakRecord rowBreaks 这个变量在搞鬼,如果 Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new 实例,所以只能我们先手工给Excel 插入一个分页符来触发POI 为 rowBreaks 创建实例。2、如何拷贝行我在 gmane.org 的 POI 用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写:/注:this.fWorkbook 是一个 HSSHWorkbook,请自行在外部new p
3、ublic void copyRows(String pSourceSheetName,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
4、;int targetRowFrom;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()-pStartRow+pPosition;targetRowT
5、o=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.getFirstCellNum();j sourceRow.getLastCellNum();j+)targetSheet
6、.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(sourceRow.getHeight();for(j=sourceRow.getFirstCellNum();j=0)result.append(pPOIFormula
7、.substring(0,index);result.append(pPOIFormula.substring(index+cstReplaceString.length();else result.append(pPOIFormula);return result.toString();至于为什么会出现ATTR(semiVolatile),还需要大家的探索精神!4、向 Excel 写入图片的问题。我上 POI 论坛查相关帖子,得到两种结论:1、不支持写入图片;2、支持写入图片,通过EscherGraphics2d 这个 Class 实现。于是我就去查EscherGraphics2d这个 Cl
8、ass,发现这个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)logge
9、r.log(POILogger.WARN,drawImage()not supported);return true;所以我强烈建议大家,以后使用第三方开发包一定尽量下载它的源代码,这样你在碰到问题时,看看它的的内部是怎么实现的,很多时候就可以不必重蹈我的覆辙了。既然POI 不能写入图片,那我们只能把目光投向JXL,我用JXL 写入图片功能是实现了,付出的代价是now()和 today()这些函数丢失掉了,鱼与熊掌不能兼得吧。=jsp操作=response.setHeader(Content-disposition,inline;filename=test1.xls);/以上这行设定传送到前端
10、浏览器时的档名为test1.xls/就是靠这一行,让前端浏览器以为接收到一个excel 档下面正常显示要转化的表-介绍:Jakarta_POI 使用 Java读写 Excel(97-2002)文件,可以满足大部分的需要。因为刚好有一个项目使用到了这个工具,花了点时间顺便翻译了一下POI 本身带的一个 Guide.有一些节减和修改,希望给使用这个项目的人一些入门帮助。POI 下面有几个自项目:HSSF 用来实现Excel 的读写.以下是 HSSF 的主页http:/jakarta.apache.org/poi/hssf/index.html 下面的介绍是基于以下地址的翻译:http:/jakar
11、ta.apache.org/poi/hssf/quick-guide.html 目前的版本为1.51 应该是很长时间之内的一个稳定版,但HSSF 提供的 Sample 不是基于1.51 所写,所以使用的时候需要适当的注意.其实 POI 下面的几个子项目侧重不同读写Word 的 HDF 正在开发当中.XML 下的 FOP(http:/xml.apache.org/fop/index.html)可以输出pdf 文件,也是比较好的一个工具目录:创建一个workbook 创建一个sheet 创建 cells 创建日期cells 设定单元格格式说明:以下可能需要使用到如下的类import org.apa
12、che.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFDataFormat;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.
13、usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;创建 workbook HSSFWorkbook wb=new HSSFWorkbook();/使用默认的构造方法创建workbook FileOutputStream fileOut=new FileOutputStream(workbook.xls);/指定文件名wb.write(fileOut);/输出到文件fileOut.close();创建一个sheet HSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheet1
14、=wb.createSheet(new sheet);/workbook 创建 sheet HSSFSheet sheet2=wb.createSheet(second sheet);/workbook 创建另外的sheet FileOutputStream fileOut=new FileOutputStream(workbook.xls);wb.write(fileOut);fileOut.close();创建 cells HSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheet=wb.createSheet(new sheet);/注意以下的代
15、码很多方法的参数是short 而不是 int 所以需要做一次类型转换HSSFRow row=sheet.createRow(short)0);/sheet 创建一行HSSFCell cell=row.createCell(short)0);/行创建一个单元格cell.setCellValue(1);/设定单元格的值/值的类型参数有多中double,String,boolean,row.createCell(short)1).setCellValue(1.2);row.createCell(short)2).setCellValue(This is a string);row.createCel
16、l(short)3).setCellValue(true);/Write the output to a file FileOutputStream fileOut=new FileOutputStream(workbook.xls);wb.write(fileOut);fileOut.close();-文章出处:http:/ 创建日期cells HSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheet=wb.createSheet(new sheet);HSSFRow row=sheet.createRow(short)0);HSSFCell ce
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java POI 操作 Excel 文件
限制150内