文档章节

使用poi读写Excel

白志华
 白志华
发布于 2015/10/18 10:54
字数 714
阅读 10
收藏 0

       对于一个程序员来说,文件操作是经常遇到的,尤其是对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
public void testReadExcel() {
  try {
    // 读取Excel
    Workbook wb = new HSSFWorkbook(new FileInputStream("d:\\2.xls"));

    // 获取sheet数目
    for (int t = 0; t < wb.getNumberOfSheets(); t++) {
      Sheet sheet = wb.getSheetAt(t);
      Row row = null;
      int lastRowNum = sheet.getLastRowNum();

      // 循环读取
      for (int i = 0; i <= lastRowNum; i++) {
        row = sheet.getRow(i);
        if (row != null) {
          // 获取每一列的值
          for (int j = 0; j < row.getLastCellNum(); j++) {
            Cell cell = row.getCell(j);
            String value = getCellValue(cell) ;
            if(!value.equals("")){
              System.out.print(value + " | ");
            }
          }
          System.out.println();
        }
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}
      用到了一个方法:
/***
 * 读取单元格的值
 * 
 * @Title: getCellValue
 * @Date : 2014-9-11 上午10:52:07
 * @param cell
 * @return
 */
private String getCellValue(Cell cell) {
  Object result = "";
  if (cell != null) {
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_STRING:
      result = cell.getStringCellValue();
      break;
    case Cell.CELL_TYPE_NUMERIC:
      result = cell.getNumericCellValue();
      break;
    case Cell.CELL_TYPE_BOOLEAN:
      result = cell.getBooleanCellValue();
      break;
    case Cell.CELL_TYPE_FORMULA:
      result = cell.getCellFormula();
      break;
    case Cell.CELL_TYPE_ERROR:
      result = cell.getErrorCellValue();
      break;
    case Cell.CELL_TYPE_BLANK:
      break;
    default:
      break;
    }
  }
  return result.toString();
}
       解释一下,首先将文件读入到工作簿Workbook中,Workbook是一个接口,他有2个实现:HSSFWorkbook和XSSFWorkbook。前者是用来读取97-03版的Excel,扩展名为xls,后者是读取07及以后的版本,扩展名为xlsx。读入到workbook中,然后循环所有的sheet,在sheet循环所有的有效行和有效列。其中sheet.getLastRowNum()获得最后一行的索引值(从0开始),而sheet.getPhysicalNumberOfRows()则是获取的最后一行的行号(从1开始)。这里要注意的是循环列不是在sheet中循环,而是在row中循环。

       效果图如下:



       代码示例2. 写入Excel文件
public void testWriteExcel() {
  String excelPath = "d:/3.xls";

  Workbook workbook = null;
  try {
    // XSSFWorkbook used for .xslx (>= 2007), HSSWorkbook for 03 .xsl
    workbook = new HSSFWorkbook();// XSSFWorkbook();//WorkbookFactory.create(inputStream);
  } catch (Exception e) {
    System.out.println("创建Excel失败: ");
    e.printStackTrace();
  }
  if (workbook != null) {
    Sheet sheet = workbook.createSheet("测试数据");
    Row row0 = sheet.createRow(0);
    for (int i = 0; i < 6; i++) {
      Cell cell = row0.createCell(i, Cell.CELL_TYPE_STRING);
      cell.setCellValue("列标题" + i );
      //sheet.autoSizeColumn(i);//自动调整宽度
    }
    for (int rowNum = 1; rowNum < 10; rowNum++) {
      Row row = sheet.createRow(rowNum);
      for (int i = 0; i < 6; i++) {
        Cell cell = row.createCell(i, Cell.CELL_TYPE_STRING);
        cell.setCellValue("单元格" + String.valueOf(rowNum + 1)
            + String.valueOf(i + 1));
      }
    }
    try {
      FileOutputStream outputStream = new FileOutputStream(excelPath);
      workbook.write(outputStream);
      outputStream.flush();
      outputStream.close();
    } catch (Exception e) {
      System.out .println("写入Excel失败: ");
      e.printStackTrace();
    }
  }
}
       效果图如下:

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/xiaoxian8023/article/details/40562993

共有 人打赏支持
白志华
粉丝 31
博文 265
码字总数 57524
作品 0
长沙
程序员
私信 提问
使用Apache POI读取Excel文件

网上关于介绍Apache POI操作Excel的文章已经很多了,但都讲得比较复杂。poi的API 与实际使用中的Excel很类似,可以说是POI把Excel中的workbook、sheet、cell等对象化了,在实际使用中极易理解...

zlikun
2013/05/13
0
4
java读写excel之POI篇—001

POI 简单介绍 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML...

Mysoft
2015/09/21
56
0
JavaScript与Excel灵活交互制作Web报表

【IT168 技术】Web报表的开发是一个比较常见的功能,然而在B/S构件上实现这些功能并没有在C/S构架上那些简单,针对这样的问题,本篇文章提供相应的解决方案,在下面的内容中将介绍JS与Excel...

天极网
2012/03/01
0
0
Java使用Apache POI导出Excel

1.POI简单介绍 Apache POI 是用Java 编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对 Microsoft Office 格式档案读和写的功能 HSSF 提供读写Microsoft Excel XLS格式档案...

Mr_欢先生
2017/09/27
0
0
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis学习(1)

JDBC连接方式: 1.底层没有使用连接池,操作数据库需要频繁的创建和关闭连接,消耗资源。 2.写原生的JDBC代码在JAVA中,一旦需要修改SQL的话(比如表增加字段),JAVA需要整体重新编译,不利...

杨健-YJ
15分钟前
0
0
怎么组织文档

可以从以下几个方面考虑组织文档: ☐ 各种分支的界面截图和对应的类及文件 ☐ 框架或类图 ☐ 流程图 ☐ 时序图 ☐ 注意事项

-___-
26分钟前
1
0
分布式之数据库和缓存双写一致性方案解析

引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更...

别打我会飞
28分钟前
5
0
我的oracle11G,12c OCM之路

ocm认证感悟 ---------------------- 距离拿到ocm证书已经过了1年的时间,当初拿到证书的心情到现在还记得。其实在每个DBA心里都有一个成为强者的梦想,需要被认可,我也一样。我干过开发,做...

hnairdb
29分钟前
1
1
手动部署kubernetes集群(1.13.1最新版)

一、机器规划 使用五台机子部署k8s集群,规划如下: master节点3台(同时也是etcd节点) node节点2台 ip分配如下: ip:192.168.10.101,主机名:k8s-etcd01 ip:192.168.10.102,主机名:k8s...

人在艹木中
34分钟前
28
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部