前段时间,看在其他的网站上给出Excel文档的导入与导出操作,感觉很酷的样子,所以就学习了一下如何使用POI进行Excel的操作,现在对之前的学习过程进行一个总结。

一、现在普遍使用的Excel文档有xls以及xlsx这两种Excel文档,其中xls格式的Excel文档又分为5.0/95工作簿以及97-2003工作簿这两种。需要注意的是,由于5.0/95工作簿的版本太低,现在的POI文档不再支持这种类型的Excel文档的读取工作,当试图读取这种类型的Excel文档的时候,POI会抛出一个异常(OldExcelFormatException)。我现在使用的POI是3.14版本。

二、Workbook的创建

1、由于Excel中存在xls以及xlsx这两种格式,所以创建方式也有所不同。其中对于xls格式的文档,需要使用HSSFWorkbook来创建工作簿对象,而对于xlsx格式的Excel文档,则需要使用XSSFWrokbook来创建工作簿。有一点需要注意的是,HSSFWorkbook与XSSFWorkbook这两个类其实都是Workbook接口的一个实现类。好了,下面就是创建工作簿对象的代码:

    //创建一个不存在的excel文件
private static Workbook createWorkbookIfNotExist(String fileName) throws Exception {
Workbook wb = null; if(fileName.endsWith(".xls")) {
wb = new HSSFWorkbook();
} else if(fileName.endsWith(".xlsx")) {
wb = new XSSFWorkbook();
} else {
throw new Exception("文件类型错误!");
} try{
OutputStream output = new FileOutputStream(fileName);
wb.write(output);
}catch(FileNotFoundException e) {
System.out.println("文件创建失败,失败原因为:" + e.getMessage());
throw new FileNotFoundException();
}
System.out.println(fileName + "文件创建成功!"); return wb;
} //创建一个新的或者已存在的Excel文档的Workbook
public static Workbook createWorkbook(String fileName) throws Exception {
InputStream input = null;
Workbook wb = null; try{
input = new FileInputStream(fileName);
wb = WorkbookFactory.create(input);
} catch(FileNotFoundException e) {
System.out.println("要打开的文件不存在,正试图创建该文件,请稍后……!");
wb = createWorkbookIfNotExist(fileName);
} catch(OldExcelFormatException e) {
System.out.println("文件打开失败,原因:要打开的Excel文件版本过低!");
throw new OldExcelFormatException("文件版本过低");
} finally {
if(input != null) {
input.close();
}
} return wb;
}

2、创建Sheet的时候,同样的也存在HSSFSheet以及XSSHSheet这两种类型。同样的HSSFSheet以及XSSFSheet这两个类也是Sheet接口的实现类。如果直接使用实现类进行创建Sheet的话,那么,对于不同的格式,需要使用不同的实现方式,尽管实现的方式都一致。由于Java的多态关系,在这里,我使用Sheet接口进行处理。代码:

    //创建sheet
public static Sheet createSheet(Workbook wb , String sheetName) {
Sheet sheet = wb.getSheet(sheetName); if(sheet == null) {
System.out.println("表单" + sheetName + "不存在,试图创建该sheet,请稍后……");
sheet = wb.createSheet(sheetName);
System.out.println("名为" + sheetName +"的sheet创建成功!");
} return sheet;
}

3、对于Row的创建,也是一样,也是使用Row这个接口进行实现。代码:

    //创建行row
public static Row createRow(Sheet sheet , int rowNum) {
Row row = sheet.getRow(rowNum); if(row == null) {
System.out.println("行号为:" + rowNum + "的行不存在,正试图创建该行,请稍后……");
row = sheet.createRow(rowNum);
System.out.println("行号为:" + rowNum + "的行创建成功!");
} return row;
}

4、对于Cell也是一样,同样使用Cell接口进行编程。代码:

   //创建单元格cell
public static Cell createCell(Row row , int cellNum) {
Cell cell = row.getCell(cellNum); if(cell == null) {
System.out.println("该单元格不存在,正在试图创建该单元格,请稍后……");
cell = row.createCell(cellNum);
System.out.println("该单元格创建成功!");
} return cell;
}

以上几个操作就是Workbook、Sheet、Row以及Cell的创建工作。另外,当对Excel文档操作完成之后,需要使用Workbook的write方法保存一下,然后上述的改动才会保存在你创建的Excel文档中。代码:

wb03.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\03styleExcel.xls"));
wb07.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\07styleExcel.xlsx"));

其中wb03就是使用上述方法创建的xls格式的Excel文档,wb07则是xlsx格式的文档。

好了,这篇博文到这里就结束了。如果文章中有什么错误或不足的地方,希望各位大侠多多指点。后面的博文,会陆续介绍如何往Excel文档中写入不同格式的数据,以及边框、图片、合并单元格、隐藏与显示行等操作。

使用POI进行Excel操作的总结一——创建Workbook,Sheet,Row以及Cell的更多相关文章

  1. Excel操作之 导出生成多个sheet页面

    首先需要下载一个NPOI.dll 下载地址:http://download.csdn.net/detail/president810/9503038 using System; using Syste ...

  2. 在Struts2中使用poi进行excel操作下载的时候报getOutputStream() has already been called for this response 错误 [转]

    在项目中用到了poi这个开源的操作excel文件的jar. 项目中用到struts2容器管理servlet.不是单纯的直接用servlet.         workbook.write(os);   ...

  3. 使用POI导入Excel异常Cannot get a text value from a numeric cell 解决

    POI操作Excel时因为Excel数据Cell有不同的类型,会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell ...

  4. 使用poi读取excel文件 Cannot get a text value from a numeric cell

    我这样转换得到一个excel文本域的值 Cell cell = row.getCell(c); cell.setCellType(Cell.CELL_TYPE_STRING); String park ...

  5. Java使用POI导入Excel异常Cannot get a text value from a numeric cell 解决

    异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric c ...

  6. 使用POI导出EXCEL工具类并解决导出数据量大的问题

    POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...

  7. POI打印Excel

    一.POI概述 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 结构:HSSF - 提供读写Mic ...

  8. python中的excel操作

    一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...

  9. 使用poi读取excel数据示例

    使用poi读取excel数据示例 分两种情况: 一种读取指定单元格的值 另一种是读取整行的值 依赖包: <dependency> <groupId>org.apache.poi ...

随机推荐

  1. Struts2接收checkbox的值

    Struts2接收checkbox的值:   HTML: <input type="checkbox" name="ssl" value="B1 ...

  2. 【转】爱普生打印机L358

    原文网址:http://www.chiphell.com/thread-838403-1-1.html 儿子幼儿园老是要打印作业,就决定用他的压岁钱买个打印机,主要以文件打印为主,兼顾照片.昨天网上一 ...

  3. 如何在svn系统中使用git

    如果正在使用svn,打算换到git,又暂时不想放弃已有的svn代码库,可以选择git-svn.说一说我自己从svn到git的经验吧. 开始 安装最新版本的git,从git 1.5.3以后支持git-s ...

  4. hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1389 : Sewage Treatment 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 After years of suffering, people coul ...

  5. HDOJ 2053 Switch Game

    Problem Description There are many lamps in a line. All of them are off at first. A series of operat ...

  6. 需要知道的开源的框架-IOS

    1:SDWebImage,UIImageView+WebCache加载一张图片. 2:UIViewExt用于定位坐标很有用,可以直接拿到bottom,top,left,right. 转:http:// ...

  7. slidingmenu+fragment实现经常使用的側滑效果(包含Fragment状态的保存)

    一.需求 关于fragment的问题,一直想写一篇博客了.应该当初自己也是对这玩意一点都不熟悉到如今也大概知道个日常的使用的地步. 一个側滑的导航栏,内有4个条目.每个选项点击进入相应的界面,每个界面 ...

  8. 黑马程序猿_try-catch-finally

    ------- android培训.java培训.期待与您交流! ---------- try-catch-finally中怎样定义语句呢? 1.try块中主要定义可能出现的异常处理语句 2.catc ...

  9. [Javascript] Intro to the Web Audio API

    An introduction to the Web Audio API. In this lesson, we cover creating an audio context and an osci ...

  10. android shape的使用详解以及常用效果(渐变色、分割线、边框、半透明阴影效果等)

    shape使用.渐变色.分割线.边框.半透明.半透明阴影效果. 首先简单了解一下shape中常见的属性.(详细介绍参看  api文档 ) 转载请注明:Rflyee_大飞: http://blog.cs ...