poi读写Excel

对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作。

在这里介绍一下我在项目中用到的一个操作Excel的工具——POI。关于POI的一些概念,网络上很多,详细信息大家可以自行百度,我在这里只做简单介绍。POI是apache的类库,主要是为java开发人员提供对Office文件(word、ppt、Excel)处理的支持。我这里主要给出几个例子来说明演示一下。

准备工作

我用的版本是3.10.1,需要的jar有:

  • dom4j.jar
  • log4j-1.2.13.jar
  • poi-3.10.1-20140818.jar
  • poi-ooxml-3.10.1-20140818.jar
  • poi-ooxml-schemas-3.10.1-20140818.jar
  • poi-scratchpad-3.10.1-20140818.jar
       代码示例1.读取Excel
  1. public void testReadExcel() {
  2. try {
  3. // 读取Excel
  4. Workbook wb = new HSSFWorkbook(new FileInputStream("d:\\2.xls"));
  5. // 获取sheet数目
  6. for (int t = 0; t < wb.getNumberOfSheets(); t++) {
  7. Sheet sheet = wb.getSheetAt(t);
  8. Row row = null;
  9. int lastRowNum = sheet.getLastRowNum();
  10. // 循环读取
  11. for (int i = 0; i <= lastRowNum; i++) {
  12. row = sheet.getRow(i);
  13. if (row != null) {
  14. // 获取每一列的值
  15. for (int j = 0; j < row.getLastCellNum(); j++) {
  16. Cell cell = row.getCell(j);
  17. String value = getCellValue(cell) ;
  18. if(!value.equals("")){
  19. System.out.print(value + " | ");
  20. }
  21. }
  22. System.out.println();
  23. }
  24. }
  25. }
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }

用到了一个方法:

  1. /***
  2. * 读取单元格的值
  3. *
  4. * @Title: getCellValue
  5. * @Date : 2014-9-11 上午10:52:07
  6. * @param cell
  7. * @return
  8. */
  9. private String getCellValue(Cell cell) {
  10. Object result = "";
  11. if (cell != null) {
  12. switch (cell.getCellType()) {
  13. case Cell.CELL_TYPE_STRING:
  14. result = cell.getStringCellValue();
  15. break;
  16. case Cell.CELL_TYPE_NUMERIC:
  17. result = cell.getNumericCellValue();
  18. break;
  19. case Cell.CELL_TYPE_BOOLEAN:
  20. result = cell.getBooleanCellValue();
  21. break;
  22. case Cell.CELL_TYPE_FORMULA:
  23. result = cell.getCellFormula();
  24. break;
  25. case Cell.CELL_TYPE_ERROR:
  26. result = cell.getErrorCellValue();
  27. break;
  28. case Cell.CELL_TYPE_BLANK:
  29. break;
  30. default:
  31. break;
  32. }
  33. }
  34. return result.toString();
  35. }

解释一下,首先将文件读入到工作簿Workbook中,Workbook是一个接口,他有2个实现:HSSFWorkbook和XSSFWorkbook。前者是用来读取97-03版的Excel,扩展名为xls,后者是读取07及以后的版本,扩展名为xlsx。读入到workbook中,然后循环所有的sheet,在sheet循环所有的有效行和有效列。其中sheet.getLastRowNum()获得最后一行的索引值(从0开始),而sheet.getPhysicalNumberOfRows()则是获取的最后一行的行号(从1开始)。这里要注意的是循环列不是在sheet中循环,而是在row中循环。

 
       效果图如下:
 
       代码示例2. 写入Excel文件
  1. public void testWriteExcel() {
  2. String excelPath = "d:/3.xls";
  3. Workbook workbook = null;
  4. try {
  5. // XSSFWorkbook used for .xslx (>= 2007), HSSWorkbook for 03 .xsl
  6. workbook = new HSSFWorkbook();// XSSFWorkbook();//WorkbookFactory.create(inputStream);
  7. } catch (Exception e) {
  8. System.out.println("创建Excel失败: ");
  9. e.printStackTrace();
  10. }
  11. if (workbook != null) {
  12. Sheet sheet = workbook.createSheet("测试数据");
  13. Row row0 = sheet.createRow(0);
  14. for (int i = 0; i < 6; i++) {
  15. Cell cell = row0.createCell(i, Cell.CELL_TYPE_STRING);
  16. cell.setCellValue("列标题" + i );
  17. //sheet.autoSizeColumn(i);//自动调整宽度
  18. }
  19. for (int rowNum = 1; rowNum < 10; rowNum++) {
  20. Row row = sheet.createRow(rowNum);
  21. for (int i = 0; i < 6; i++) {
  22. Cell cell = row.createCell(i, Cell.CELL_TYPE_STRING);
  23. cell.setCellValue("单元格" + String.valueOf(rowNum + 1)
  24. + String.valueOf(i + 1));
  25. }
  26. }
  27. try {
  28. FileOutputStream outputStream = new FileOutputStream(excelPath);
  29. workbook.write(outputStream);
  30. outputStream.flush();
  31. outputStream.close();
  32. } catch (Exception e) {
  33. System.out .println("写入Excel失败: ");
  34. e.printStackTrace();
  35. }
  36. }
  37. }

效果图如下:

 

怎么样,很简单吧。只要你使用了poi,不管你有没有安装Office,都可以完美的操作Office文件,小伙伴们,都快来试试看吧。

poi读写Excel的更多相关文章

  1. jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL

    这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...

  2. [转]POI读写Excel 修改

    [转]POI读写Excel 修改 一.Excel基础 二.HSSF概况 三.通过usermodel读取文件 四.通过usermodel写入文件 五.通过eventusermodel读取文件 六.HSS ...

  3. Apache POI 读写 Excel 文件

    目录 写入 Excel 文件 读取 Excel 文件 遍历 Excel 文件 需要的 maven 依赖 完整代码 写入 Excel 文件 // 写入 Excel 文件 // ============= ...

  4. POI读写Excel简述之写入

    二.POI写入Excel文件(以Excel2003版为例,2007版就是根据文件扩展名xlsx将HSSFWorkbook换为XSSFWorkbook,及其Sheet.Row.Cell也相应替换) 1. ...

  5. POI读写Excel简述之读取

    一.POI读取Excel文件(以Excel2003版为例,2007版就是根据文件扩展名xlsx将HSSFWorkbook换为XSSFWorkbook,及其Sheet.Row.Cell也相应替换) // ...

  6. 使用poi读写excel文件

    使用poi库测试了一下读取excel文件,效果不错,跟大家分享一下. 第一列是数值型,第二列是字符型,代码如下: package poi; import java.io.FileInputStream ...

  7. Apache POI读写Excel

    Apache POI是Apache软件基金会的开放源码函式库,POIAPI给Java程序对Microsoft Office格式档案读和写的功能. 官方文档 [https://poi.apache.or ...

  8. 使用poi读写Excel

    对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作. 在这里介绍一下我在项目中用到的一个操作Excel的工具——POI.关于POI的一些概念,网络上很多,详细信息大家可以自行百度, ...

  9. poi读写Excel文件

    jxl 只有excel基本的操作,代码操作比较方便,一般使用jxl就够了,对图片支持较好 poi功能比jxl强大但是比较吃内存,支持计算公式        关于jxl具体可以参考    http:// ...

随机推荐

  1. 【MySQL】二进制分发安装

    操作系统:Red Hat Enterprise Linux Server release 6.5 Mysql安装包:mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz ...

  2. 怎么搭建Hibernate对象持久化框架?

    DBC:(Java Data Base Connectivity)java数据库连接 java.sql包提供JDBC API,可通过它编写访问数据库的程序代码.其中常用的接口和类包括下面内容: Dri ...

  3. 15个最受欢迎的Python开源框架(转)

    原文地址:http://blog.jobbole.com/72306/ Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受 ...

  4. C# 处理URL地址

    calendarset.do?start=1548518400&end=1552147200&_=1546421856958calendarset.do?start=155093760 ...

  5. Windows如何正确的修改administrator用户名

    无论是服务器还是电脑.修改默认的administrator的用户总是好的.话不多少.直接上图 1.win+r  输入:gpedit.msc 2.按照我下图的圈圈找到重命名系统管理员账户并自定义 3.重 ...

  6. Linux学习笔记之 Btrfs文件系统简介及使用

    Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息.而 ext2/3 却避免了这种被称为”错误扩散”的问题. Btrfs相关介绍: Btrf ...

  7. EAS之校验检查

    先了解一下权限接口类提供的有关权限项检查的方法public boolean hasFunctionPermission(IObjectPK userPK,IObjectPK orgPK,String ...

  8. 16.copy_to定制组合field解决cross-fields搜索弊端

    主要知识点: 在index的mapping中加copy_to字段的方法 copy_to搜索方法     用most_fields策略,去实现cross-fields搜索,有3大弊端,为了解决这三个弊端 ...

  9. 【codeforces 792C】Divide by Three

    [题目链接]:http://codeforces.com/contest/792/problem/C [题意] 让你删掉最少的数字使得剩下的数字%3==0 [题解] 看代码..内置题解了现在. [完整 ...

  10. H5音乐播放器

    前段时间无聊用JavaScript基于H5的audio写一个音乐播放器.误喷,技术有限,文笔不好之处希望各位大神海涵. 1.HTML代码: <div id="music" c ...