欢迎来到环境100文库! | 帮助中心 分享价值,成长自我!

环境100文库

换一换
首页 环境100文库 > 资源分类 > DOC文档下载
 

POI控制Excel方法技术.doc

  • 资源ID:4001       资源大小:223.73KB        全文页数:24页
  • 资源格式: DOC        下载权限:游客/注册会员/VIP会员    下载费用:0碳币 【人民币0元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信开放平台登录 QQ登录   微博登录  
下载资源需要0碳币 【人民币0元】
邮箱/手机:
温馨提示:
系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
验证码:   换一换

加入VIP,免费下载
 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

POI控制Excel方法技术.doc

888 期货入门网整理 http// POI 操作 Excel----------(转载) java 当初把核心处理设成 Unicode,带来的好处是另代码适应了多语言环境。然而由于老外的英语只有 26 个字母,有些情况下,一些程序员用 8 位的 byte 处理,一不小心就去掉了 CJK 的高位。或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多 java 应用在 CJK 的处理上很烦恼。 期货开户流程 还好 在POI HSSF 中考虑到这个问题,可以设置 encoding 为双字节。 POI 可以到 www.apache.org 下载到。编译好的 jar 主要有这样 4个 poi 包 ,poi Browser 包 ,poi hdf 包 ,poi hssf 例程包。实际运行时,需要有 poi 包就可以了。如果用 Jakarta ant 编译和运行,下载 apache Jakarta POI 的 release 中的 src包,它里面已经为你生成好了 build 文件 了。只要运行 ant 就可以了 ant 的安装和使用在此不说了 。如果是用 Jbuilder 运行,请在新建的项目中加入 poi包。以 Jbuilder6 为例,选择 Tools 菜单项的 config libraries...选项,新建一个 lib。在弹出的菜单中选择 poi 包,如这个 jakarta-poi-1.5.1-final- 20020820.jar,把 poi 添加到 jbuilder 中。然后,右键点击你的项目,在 project的 properties 菜单中 path 的 required Libraries 中,点 add,添加刚 才加入到 jbuilder 中的 poi 到你现在的项目中。如果你仅仅是为了熟悉 POI hssf 的使用,可以直接看 POI 的 samples 包中的源代码,并且运行它。 hssf 的各种对象都 有 例 程 的 介 绍 。 hssf 提 供 的 例 程 在 org.apache.poi.hssf.usermodel.examples 包中,共有 14个,生成的目标 xls都是 workbook.xls。如果 你想看更多的例程,可以参考 hssf 的 Junit test cases,在 poi 的包的源代码中有。 hssf 都有测试代码。 这里只对部分例程的实现做介绍。 HSSF提供给用户使用的对象在 org.apache.poi.hssf.usermodel包中 ,主要部分包括 Excell 对象,样式和格式, 期货如何开户 还有辅助操作。有以下几种对象 HSSFWorkbook excell 的文档对象 HSSFSheet excell 的表单 HSSFRow excell 的行 HSSFCell excell 的格子单元 HSSFFont excell 字体 HSSFName 名 称 HSSFDataat 日期格式 在 poi1.7 中才有以下 2 项 888 期货入门网整理 http// HSSFHeader sheet 头 HSSFFooter sheet 尾 和这个样式 HSSFCellStyle cell 样式 辅助操作包括 HSSFDateUtil 日期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表 仔细看 org.apache.poi.hssf 包的结构,不难发现 HSSF 的内部实现遵循的是 MVC模型。 这里我用 Rose 把 org.apache.poi.hssf.usermodel 包中的对象反向导入并根据相互关系作了整理,详见下面两图 图 1 基本对象 从中不难可以发现每一个基本对象都关联了一个 Record 对象。 Record 对象是一个参考 Office 格式的相关记录。 图 2 HSSFWorkbook HSSFWorkbook 即是一个 Excell 对象。这幅类图体现的是 HSSFWorkbook 和基本对象的相互关系。可见, 期货入门 许多对象中也建 立了 Workbook 的引用。还需要注意的是在 HSSFWorkbook 和 HSSFSheet 中建立了 log 机制 POILogger,而且POILogger 也是使用 apache Log4J 实现的。 先看 poi 的 examples 包中提供的最简单的例子,建立一个空 xls 文件。 [java] view plaincopyprint 1. Java 代码 2. import org.apache.poi.hssf.usermodel.HSSFWorkbook; 3. 4. import java.io.FileOutputStream; 5. 888 期货入门网整理 http// 6. import java.io.IOException; 7. 8. public class NewWorkbook 9. 10. { 11. 12. public static void mainString[] args 13. 14. throws IOException 15. 16. { 17. 18. HSSFWorkbook wb new HSSFWorkbook;//建立新 HSSFWorkbook 对象 19. 20. FileOutputStream fileOut new FileOutputStreamworkbook.xls; 21. 22. wb.writefileOut;//把 Workbook 对象输出到文件 workbook.xls 中 23. 24. fileOut.close; 25. 26. } 27. 28. } 29. 30. 通过这个例子, 商品期货开户 我们建立的是一个空白的 xls 文件(不是空文件)。在此基础上,我们可以进一步看其它的例子。 31. 32. import org.apache.poi.hssf.usermodel.*; 33. 34. import java.io.FileOutputStream; 35. 36. import java.io.IOException; 37. 38. public class CreateCells 39. 888 期货入门网整理 http// 40. { 41. 42. public static void mainString[] args 43. 44. throws IOException 45. 46. { 47. 48. HSSFWorkbook wb new HSSFWorkbook;//建立新 HSSFWorkbook 对象 49. 50. HSSFSheet sheet wb.createSheetnew sheet;//建立新的 sheet 对象 51. 52. // Create a row and put some cells in it. Rows are 0 based. 53. 54. HSSFRow row sheet.createRowshort0;//建立新行 55. 56. // Create a cell and put a value in it. 57. 58. HSSFCell cell row.createCellshort0;//建立新 cell 59. 60. cell.setCellValue1;//设置 cell 的整数类型的值 61. 62. // Or do it on one line. 63. 64. row.createCellshort1.setCellValue1.2;//设置 cell 浮点类型的值 65. 66. row.createCellshort2.setCellValuetest;//设置 cell 字符类型的值 67. 68. row.createCellshort3.setCellValuetrue;//设置 cell 布尔类型的值 69. 70. HSSFCellStyle cellStyle wb.createCellStyle;//建立新的 cell 样式 71. 72. cellStyle.setDataatHSSFDataat.getatm/d/yy hmm;//设置 cell 样式为定制的日期格式 73. 888 期货入门网整理 http// 74. HSSFCell dCell row.createCellshort4; 75. 76. dCell.setCellValuenew Date;//设置 cell 为日期类型的值 77. 78. dCell.setCellStylecellStyle; //设置该 cell 日期的显示格式 79. 80. HSSFCell csCell row.createCellshort5; 81. 82. csCell.setEncodingHSSFCell.ENCODING_UTF_16;//设置 cell 编码解决中文高位字节截断 83. 84. csCell.setCellValue中文测试 _Chinese Words Test;//设置中西文结合字符串 85. 86. row.createCellshort6.setCellTypeHSSFCell.CELL_TYPE_ERROR;//建立错误cell 87. 88. // Write the output to a file 89. 90. FileOutputStream fileOut new FileOutputStreamworkbook.xls; 91. 92. wb.writefileOut; 93. 94. fileOut.close; 95. 96. } 97. 98. } 99. 100.我稍微修改了原来的 examples 包中的 CreateCells 类写了上面的功能测试类。通过这个例子,我们可以清楚的看到 xls文件从大到小包 括了 HSSFWorkbook HSSFSheet HSSFRow HSSFCell这样几个对象。我们 可以在 cell 中设置各种类型的值。尤其要注意的是如果你想正确的显示非欧美的字符时,尤其象中日韩这样的语言,必须 股指期货开户 设置编码为 16 位的即是HSSFCell.ENCODING_UTF_16,才能保证字符的高 8位不被截断而引起编码失真形成乱码。 101. 888 期货入门网整理 http// 102.其他测试可以通过参考 examples 包中的测试例子掌握 poi 的详细用法,包括字体的设置, cell大小和低纹的设置等。需要注意的是 POI是一 个仍 然在完善中的公开代码的项目,所以有些功能正在不断的扩充。如 HSSFSheet 的 getFooter getHeader和setFooterHSSFFooter hsf setHeaderHSSFHeader hsh是在 POI1.7中才有的,而 POI1.5中就没有。运行测试熟悉代码或者使用它做项目时请注意 POI的版本。 103. 104.另外需要注意的是 HSSF 也有它的对 xls 基于事件的解析。可以参考例程中的 EventExample.java。它通过实现 HSSFListener 完成从普通流认知 Xls 中包含的内容,在 apache Cocoon 中的org.apache.cocoon.serialization.HSSFSerializer 中用到了这个解析。因为 Cocoon2 是基于事件的,所以 POI 为了提供快速的解析也提供了相应的事件。当然我们自己也可以实现这个事件接口。 105. 106.因为 POI 还不是一个足够成熟的项目,所以有必要做进一步的开发和测试。但是它已经为我们用纯 java 操作 ole2 对象提供了可能,而且克服了 ole 对象调用的缺陷,提供了服务器端的 Excel解决方案。 107. 108. 109.利用 Java 创建和读取 Excel 文档 110. 111. 为了保证示例程序的运行,必须安装 Java 2 sdk1.4.0 和 Jakarta POI, Jakarta POI的 Web 站点是 http//jakarta.apache.org/poi/ 112. 113. 114.示例 1 将演示如何利用 Jakarta POI API 创建 Excel 文档。 115. 116. 117.示 例 1 程序如下 118.import org.apache.poi.hssf.usermodel.HSSFWorkbook; 119.import org.apache.poi.hssf.usermodel.HSSFSheet; 120.import org.apache.poi.hssf.usermodel.HSSFRow; 121.import org.apache.poi.hssf.usermodel.HSSFCell; 122.import java.io.FileOutputStream; 123.public class CreateXL { 124./** Excel 文件要存放的位置,假定在 D 盘 JTest 目录下 */ 125.public static String outputFileD/JTest/ gongye.xls; 888 期货入门网整理 http// 126.public static void mainString argv[] 127.{ 128.try 129.{ 130.// 创建新的 Excel 工作簿 131.HSSFWorkbook workbook new HSSFWorkbook; 132.// 在 Excel 工作簿中建一工作表,其名为缺省值 133.// 如要新建一名为 效益指标 的工作表,其语句为 134.// HSSFSheet sheet workbook.createSheet效益指标 ; 135.HSSFSheet sheet workbook.createSheet; 136.// 在索引 0的位置创建行(最顶端的行) 137.HSSFRow row sheet.createRowshort0; 138.//在索引 0 的位置创建单元格( 左上端) 139.HSSFCell cell row.createCellshort 0; 140.// 定义单元格为字符串类型 141.cell.setCellTypeHSSFCell.CELL_TYPE_STRING; 142.// 在单元格中输入一些内容 143.cell.setCellValue增加值 ; 144.// 新建一输出文件流 145.FileOutputStream fOut new FileOutputStreamoutputFile; 146.// 把相应的 Excel 工作簿存盘 147.workbook.writefOut; 148.fOut.; 149.// 操作结束,关闭文件 150.fOut.close; 151.System.out.println文件生成 ...; 152. 153. 154. }catchException e { 155.System.out.println已运行 xlCreate e ; 156.} 157.} 158.} 159. 160. 888 期货入门网整理 http// 161.读取 Excel 文档中的数据 162.示例 2将演示如何读取 Excel文档中的数据。假定在 D盘 JTest目录下有一个文件名为 gongye.xls的 Excel 文件。 163.示例 2 程序如下 164.import org.apache.poi.hssf.usermodel.HSSFWorkbook; 165.import org.apache.poi.hssf.usermodel.HSSFSheet; 166.import org.apache.poi.hssf.usermodel.HSSFRow; 167.import org.apache.poi.hssf.usermodel.HSSFCell; 168.import java.io.FileStream; 169.public class ReadXL { 170./** Excel 文件的存放位置。注意是正斜线 */ 171.public static String fileToBeReadD/JTest/ gongye.xls; 172.public static void mainString argv[]{ 173.try{ 174.// 创建对 Excel 工作簿文件的引用 175.HSSFWorkbook workbook new HSSFWorkbooknew FileStreamfileToBeRead; 176.// 创建对工作表的引用。 177.// 本例是按名引用(让我们假定那张表有着缺省名 Sheet1) 178.HSSFSheet sheet workbook.getSheetSheet1; 179.// 也可用 getSheetAtint index按索引引用, 180.// 在 Excel 文档中,第一张工作表的缺省索引是 0, 181.// 其语句为 HSSFSheet sheet workbook.getSheetAt0; 182.// 读取左上端单元 183.HSSFRow row sheet.getRow0; 184.HSSFCell cell row.getCellshort0; 185.// 输出单元内容, cell.getStringCellValue就是取所在单元的值 186.System.out.println左上端单元是 cell.getStringCellValue; 187.}catchException e { 188.System.out.println已运行 xlRead e ; 189.} 190.} 191.} 192. 193. 888 期货入门网整理 http// 194.设置单元格格式 195.在这里,我们将只介绍一些和格式设置有关的语句,我们假定 workbook 就是对一个工作簿的引用。在 Java 196. 197.中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式 198. 199. 1、创建字体,设置其为红色、粗体 200.HSSFFont font workbook.createFont; 201.font.setColorHSSFFont.COLOR_RED; 202.font.setBoldweightHSSFFont.BOLDWEIGHT_BOLD; 203.2、创建格式 204.HSSFCellStyle cellStyle workbook.createCellStyle; 205.cellStyle.setFontfont; 206.3、 应用格式 207.HSSFCell cell row.createCellshort 0; 208.cell.setCellStylecellStyle; 209.cell.setCellTypeHSSFCell.CELL_TYPE_STRING; 210.cell.setCellValue标题 ; 211. 212. 总之,如本篇文章所演示的一样, Java 程序员不必担心 Excel 工作表中的数据了,利用Jakarta POI API, 213. 214.我们就可以轻易的在程序 中存取 Excel 文档。 215. 216. 217. 218.首先说说现在我所知道的 Java 编辑 Excel 文件的两大开源工具 219. 220.jakarta POI 和 JavaExcelAPI(简称 JXL),这两套工具我都试用了一这段时间,感觉各有优劣吧。 POI 在某些细节有些小 Bug并且不支持写入图片,其他方面都挺不错的; 221. 222.JXL 就惨了,除了支持写入图片外,我暂时看不到它比 POI 好的地方,我碰到的 主要的问题就是对公式支持不是很好,很多带有公式的 Excel 文件用 JXL 打开后,公式就丢失了(比如now,today),在网上看到其他大虾评论说 JXL 写入公式也有问题,另外, JXL操作 Excel 文件的效 率比 POI 低一点。经过比较后,我选择了 POI 开发我的项目。 888 期货入门网整理 http// 223. 224.现在我要做的东西基本完成啦,我把这段时间使用 POI 的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于 POI基本的使用方法,自己去看文档吧。 225. 226.1、设置分页符的 bug 227. 228.POI 里 的 HSSFSheet 类提供了 setRowBreak 方法可以设置 Sheet 的分页符。 229. 230.Bug如果你要设置分页符的 Sheet 是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak 时 POI 会抛出空指针的异常。 231. 232.解决方法在 Excel 里给这个 sheet 插入一个分页符,用 POI打开后再把它删掉,然后你就可以随意插入分页符了。 233. 234.如果 sheet 是由 POI生成的则没有这个问题。我跟踪了 setRowBreak 的源代码,发现是 Sheet.Java下的 PageBreakRecord rowBreaks 这个变量在搞鬼,如果 Sheet 里原来没有分页符,开发这个模块的那位兄台忘了为这个对象 new实例,所以只能我们先手工给 Excel 插入一个分页符来触发 POI 为 rowBreaks 创建实例。 235. 236.2、如何拷贝行 237. 238.我在 gmane.org 的 POI 用户论坛翻遍了每个相关的帖子,找遍了 api,也没看到一个拷贝行的方法,没办法,只能自己写 239. 240. 241.//注 this.fWorkbook 是一个 HSSHWorkbook,请自行 在外部 new 242. public void copyRows 243. String pSourceSheetName, 244. String pTargetSheetName, 245. int pStartRow, int pEndRow, 246. int pPosition 247. { 248. HSSFRow sourceRow null; 249. HSSFRow targetRow null; 250. HSSFCell sourceCell null; 888 期货入门网整理 http// 251. HSSFCell targetCell null; 252. HSSFSheet sourceSheet null; 253. HSSFSheet targetSheet null; 254. Region region null; 255. int cType; 256. int i; 257. short j; 258. int targetRowFrom; 259. int targetRowTo; 260. 261. if pStartRow -1 || pEndRow -1 262. { 263. return; 264. } 265. sourceSheet this.fWorkbook.getSheetpSourceSheetName; 266. targetSheet this.fWorkbook.getSheetpTargetSheetName; 267. //拷贝合并的单元 格 268. for i 0; i pStartRow region.getRowTo 0 358. { 359. result.appendpPOIula.substring0, index; 360. result.appendpPOIula.substringindex cstReplaceString.length; 361. } 362. else 363. { 364. result.appendpPOIula; 365. } 366. 367. return result.toString; 368. } 369. 370.至于为什么会出现 ATTRsemiVolatile,还需要大家的探索精神 371. 372.4、向 Excel 写入图片的问题。 373. 374.我上 POI 论坛查相关帖子,得到两种结论 375. 376.1、不支持写入图片; 377. 378.2、支持写入图片,通过 EscherGraphics2d 这个 Class 实现。于是我就去查 EscherGraphics2d 这个 Class,发现 这个 Class 提供了 N 个 drawImage 方法,喜出望外的我开始写代码,结果调了888 期货入门网整理 http// 一天,一直看不到效果,黔驴技穷的我在万般无奈下只好跟踪进 drawImage 这个函数内部,经过 N个函数调用后在最底层函数发现了最终答案 379. 380. 381.public boolean drawImageImage image, int dx1, int dy1, int dx2, int dy2,int sx1, int sy1, 382. int sx2, int sy2, Color bgColor, ImageObserver imageobserver 383. { 384. if logger.check POILogger.WARN 385. logger.logPOILogger.WARN,drawImage not supported; 386. return true; 387. } 388. 389.所以我强烈建议大家,以后使用第三方开发包一定尽量下载它的源代码,这样你在碰到问题时,看看它的的内部是怎么实现的,很多时 候就可以不必重蹈我的 覆辙了。既然 POI 不能写入图片,那我们只能把目光投向 JXL,我用 JXL 写入图片功能是实现了,付出的代价是 now和 today这些函数丢失掉 了,鱼与熊掌不能兼得吧。 390. 391.jsp 操作 392. 393. 394.response.setHeaderContent-disposition,inline; filenametest1.xls; 395. //以上这行设定传送到前端浏览器时的档名为 test1.xls 396. //就是靠这一行,让前端浏览器以为接收到一个 excel 档 397.下面正常显示要转化的表 398. 399.-------------------------------------------------------------------------- 400. 401.介绍 402.Jakarta_POI 使用 Java 读写 Excel97-2002文件,可以满足大部分的需要。 403.因为刚好有一个项目使用到了这个工具,花了点时间顺便翻译了一下 POI 本身 404.带的一个 Guide.有一些节减和修改,希望给使用这个项目的人一些入门帮助。 405.POI 下面有几个自项目 HSSF 用来实现 Excel 的读写 .以下是 HSSF 的主页 406.http//jakarta.apache.org/poi/hssf/index.html 407.下面的介绍是基于以下地址的翻译 888 期货入门网整理 http// 408.http//jakarta.apache.org/poi/hssf/quick-guide.html 409.目前的版本为 1.51 应该是很长时间之内的一个稳定版,但 HSSF 提供的 Sample 不是基于 410.1.51 所写,所以使用的时候需要适当的注意 . 411.其实 POI 下面的几个子项目侧重不同读写 Word 的 HDF正在开发当中 . 412.XML 下的 FOPhttp//xml.apache.org/fop/index.html 413.可以输出 pdf 文件,也是比较好的一个工具 414.目录 415.创建一个 workbook 416.创建一个 sheet 417.创建 cells 418.创建日期 cells 419.设定单元格格式 420. 421.说明 422.以下可能需要使用到如下的类 423.import org.apache.poi.hssf.usermodel.HSSFCell; 424.import org.apache.poi.hssf.usermodel.HSSFCellStyle; 425.import org.apache.poi.hssf.usermodel.HSSFDataat; 426.import org.apache.poi.hssf.usermodel.HSSFFont; 427.import org.apache.poi.hssf.usermodel.HSSFRow; 428.import org.apache.poi.hssf.usermodel.HSSFSheet; 429.import org.apache.poi.hssf.usermodel.HSSFWorkbook; 430.import org.ap

注意事项

本文(POI控制Excel方法技术.doc)为本站会员(蜘蛛互联)主动上传,环境100文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知环境100文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017 环境100文库版权所有
国家工信部备案号:京ICP备16041442号-6

收起
展开