文档章节

使用poi读写Excel

白志华
 白志华
发布于 2015/10/18 10:54
字数 714
阅读 12
收藏 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

白志华
粉丝 34
博文 265
码字总数 57524
作品 0
长沙
程序员
私信 提问
使用Apache POI读取Excel文件

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

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

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

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

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

天极网
2012/03/01
0
0
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

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

长平狐
2012/11/12
1K
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

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部