




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实用POI操作EXECEl上好的人肉包子新鲜出炉啦,各位妖魔鬼怪赶紧来尝尝鲜首先说说现在我所知道的java编辑Excel文件的两大开源工具:jakarta poi和JavaExcelAPI(简称JXL),这两套工具我都试用了一这段时间,感觉各有优劣吧。poi在某些细节有些小Bug并且不支持写入图片,其他方面都挺不错的;JXL就惨了,除了支持写入图片外,我暂时看不到它比POI好的地方,我碰到的主要的问题就是对公式支持不是很好,很多带有公式的Excel文件用JXL打开后,公式就丢失了(比如now(),today()),在网上看到其他大虾评论说JXL写入公式也有问题,另外,JXL操作Excel文件的效率比POI低一点。经过比较后,我选择了poi开发我的项目。现在我要做的东西基本完成啦,我把这段时间使用poi的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,少熬几个夜,多点时间陪MM:),至于poi基本的使用方法,自己去看文档吧。1、设置分页符的bug。poi里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。如果sheet是由poi生成的则没有这个问题。我跟踪了setRowBreak的源代码,发现是Sheet.java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发poi为rowBreaks创建实例。2、如何拷贝行。我在的poi用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写:/注:this.fWorkbook是一个HSSHWorkbook,请自行在外部newpublic 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;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;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.getFirstCellNum(); 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(sourceRow.getHeight();for (j = sourceRow.getFirstCellNum(); j = 0)result.append(pPOIFormula.substring(0, index);result.append(pPOIFormula.substring(index + cstReplaceString.length();elseresult.append(pPOIFormula);return result.toString();至于为什么会出现ATTR(semiVolatile),希望哪位大侠现身跟我解释一下。4、向Excel写入图片的问题。我上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;所以我强烈建议大家,以后使用第三方开发包一定尽量下载它的源代码,这样你在碰到问题时,看看它的的内部是怎么实现的,很多时候就可以不必重蹈我的覆辙了。既然POI不能写入图片,那我们只能把目光投向JXL,我用JXL写入图片功能是实现了,付出的代价是now()和today()这些函数丢失掉了,鱼与熊掌不能兼得吧,至于怎么解决JXL公式的问题,到下面这个帖子里和我一起守株待兔吧:/Expert/topic/3569/3569340.xml?temp=.8480646好了我所知道得就这些,我接触poi也才几星期时间,上面有些内容可能说得并不正确,希望各位大虾砸砖指正! JAVA使用POI解析WORD,EXCEL的方法2010-04-22 00:20/lewutianJAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法/u/54c1567b010008vhOFFICE文档使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行,不过感觉PDFBOX比较好,而且作者也在更新。水平有限,万望各位指正WORD:-import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.poi.hwpf.extractor.WordExtractor;import java.io.File;import java.io.InputStream;import java.io.FileInputStream;import com.search.code.Index;public Document getDocument(Index index, String url, String title, InputStream is) throws DocCenterException String bodyText = null;try WordExtractor ex = new WordExtractor(is);/is是WORD文件的InputStream bodyText = ex.getText(); if(!bodyText.equals() index.AddIndex(url, title, bodyText); catch (DocCenterException e) throw new DocCenterException(无法从该Mocriosoft Word文档中提取内容, e); catch(Exception e) e.printStackTrace(); return null;-Excel:-import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.poi.hwpf.extractor.WordExtractor;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFCell;import java.io.File;import java.io.InputStream;import java.io.FileInputStream;import com.search.code.Index;public Document getDocument(Index index, String url, String title, InputStream is) throws DocCenterException StringBuffer content = new StringBuffer();try HSSFWorkbook workbook = new HSSFWorkbook(is);/创建对Excel工作簿文件的引用 for (int numSheets = 0; numSheets workbook.getNumberOfSheets(); numSheets+) if (null != workbook.getSheetAt(numSheets) HSSFSheet aSheet = workbook.getSheetAt(numSheets);/获得一个sheet for (int rowNumOfSheet = 0; rowNumOfSheet = aSheet.getLastRowNum(); rowNumOfSheet+) if (null != aSheet.getRow(rowNumOfSheet) HSSFRow aRow = aSheet.getRow(rowNumOfSheet); /获得一个行 for (short cellNumOfRow = 0; cellNumOfRow bin-jakarta-poi-1.5.1-final-bin.zip文件解开后,把jakarta-poi-contrib-1.5.1-final-20020615.jar放到JAVAHOME:j2sdkjrelibext中一切OK!使用POI读取excel的问题-有两个问题: 1 在web应用中,怎么配置POI 2 有读取excel文件的例子吗,在jsp中 - 将poi的.jar文件放在你的应用的WEB-INFlib目录下就可以在本应用中用了. - 1 把poi的包放到web-inf的lib目录下就行了 2 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.FileInputStream; public class ReadXL /* Excel文件的存放位置。注意是正斜线*/ public static String fileToBeRead=D:/JTest/ gongye.xls; public static void main(String argv) try / 创建对Excel工作簿文件的引用 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead); / 创建对工作表的引用。 / 本例是按名引用(让我们假定那张表有着缺省名Sheet1) HSSFSheet sheet = workbook.getSheet(Sheet1); / 也可用getSheetAt(int index)按索引引用, / 在Excel文档中,第一张工作表的缺省索引是0, / 其语句为:HSSFSheet sheet = workbook.getSheetAt(0); / 读取左上端单元 HSSFRow row = sheet.getRow(0); HSSFCell cell = row.getCell(short)0); / 输出单元内容,cell.getStringCellValue()就是取所在单元的值 System.out.println(左上端单元是: + cell.getStringCellValue(); catch(Exception e) System.out.println(已运行xlRead() : + e ); =如何使用Java POI生成Excel表文件 ! 发布者:本站编辑 来源: 浏览: 评论: 字体:大 中 小 / 使用Java POI/ 把要两个JAR文件放到lib/ext下/ code run against the jakarta-poi-1.5.0-FINAL-20020506.jar./ and commons-logging-1.0.jar例子程序:import org.apache.poi.hssf.usermodel.*;import java.io.FileOutputStream;/ code run against the jakarta-poi-1.5.0-FINAL-20020506.jar./ and commons-logging-1.0.jarpublic class PoiTest static public void main(String args) throws Exception FileOutputStream fos = new FileOutputStream(d:foo.xls); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet s = wb.createSheet(); wb.setSheetName(0, Matrix); for(short i=0; i50; i+) HSSFRow row = s.createRow(i); for(short j=0; j50; j+) HSSFCell cell = row.createCell(j); cell.setCellValue(+i+,+j); wb.write(fos); fos.close();Posted on 2008-02-02 17:00 东方求败 阅读(1820) 评论(5) 编辑 收藏 public void test4() throws Exception POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(D:xxx.xls); /打开一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); BufferedImage bufferImg = ImageIO.read(new File(d:pic02.jpg); /打开一个图片文件 ImageIO.write(bufferImg,jpg,byteArrayOut); /HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,0,0,(short) 19,35,(short)(19+3),35+4); HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,0,0,(short) 19,35,(short)(19+3),35+4); /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑工程师岗位面试要点及常见问题解答
- 2025年焊接工艺考试热点钎焊操作规范及安全注意事项
- 2025年水利专业求职者必看初级灌区管理工面试攻略与模拟题解析
- 2025年特岗教师招聘考试指南初中语文教学法
- 2025年旅游策划与管理专业面试预测题及解析
- 2025年信息技术员招聘考试热点解析及模拟题
- 电力交易员基础知识培训课件
- 电刀使用课件
- 电冰箱基础知识培训教材课件
- 2025年特岗教师招聘初中数学面试技巧与预测题解析
- pmc内部培训课件
- 口腔护理教学课件设计与实施要点
- 中医诊所安全管理制度
- 2024年海南三亚市海棠区机关事业单位招聘笔试高频难、易错点备考题库及参考答案详解
- 空管招聘面试题及答案
- 物流投标流程管理制度
- 广东省高州市全域土地综合整治项目(一期)可行性研究报告
- 创伤中心各种管理制度
- 配送企业配送协议书
- 人工智能及机器人课件
- 2024年注会考试《税法》真题及答案
评论
0/150
提交评论