使用POI进行Excel操作的总结一——创建Workbook,Sheet,Row以及Cell
前段时间,看在其他的网站上给出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的更多相关文章
- Excel操作之 导出生成多个sheet页面
首先需要下载一个NPOI.dll 下载地址:http://download.csdn.net/detail/president810/9503038 using System; using Syste ...
- 在Struts2中使用poi进行excel操作下载的时候报getOutputStream() has already been called for this response 错误 [转]
在项目中用到了poi这个开源的操作excel文件的jar. 项目中用到struts2容器管理servlet.不是单纯的直接用servlet. workbook.write(os); ...
- 使用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 ...
- 使用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 ...
- Java使用POI导入Excel异常Cannot get a text value from a numeric cell 解决
异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric c ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- POI打印Excel
一.POI概述 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 结构:HSSF - 提供读写Mic ...
- python中的excel操作
一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...
- 使用poi读取excel数据示例
使用poi读取excel数据示例 分两种情况: 一种读取指定单元格的值 另一种是读取整行的值 依赖包: <dependency> <groupId>org.apache.poi ...
随机推荐
- c# 循环语句练习题;
1. 求100以内质数的和 2. 兔子问题 3. 九九乘法表: 一行一行打印: 4. 有一张超大的纸: 纸质的厚度是0.01: 对折多少次,可以达到珠峰的高度: 按照8848来计算: ...
- 揭开Linux操作系统的Swap交换区之谜
揭开Linux操作系统的Swap交换区之谜 Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap ...
- 吉哥系列故事――临时工计划(dp)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- POJ-3468-A Simple Problem with Integers(区间更新,求和)-splay或线段树
区间更新求和 主要用来练习splay树区间更新问题 //splay树的题解 // File Name: 3468-splay.cpp // Author: Zlbing // Created Time ...
- Binary Tree Inorder Traversal ——LeetCode
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- 敏捷开发 and 敏捷测试
名词解释 agile: 敏捷的:灵活:敏捷开发. scrum: 扭打,混打:并列争球:参加并列争球. sprint: 冲刺,全速跑. backlog: 积压的工作:积压待办的事务. retrospe ...
- PL/SQL Developer 与tnsnames.ora
PL/SQL Developer 是一款流行的oracle开发与管理的IDE. 在登录PL/SQL Developer时所选择的数据库依赖于tnsnames.ora文件中的信息. 如果我们安装了多个o ...
- MyBatis(4):动态SQL
什么是动态SQL MyBatis的一个强大特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件串联SQL字符串在一起是多么地痛苦,确保不能忘了空格或者在列表的最后的 ...
- Ken Norton和软件工程师打交道的10个秘诀
How to work with software engineers - by Ken Norton Deflect praise Absorb blame Sweat the details In ...
- WebChat 清爽来袭 -- JavaChat系统Ⅳ
题记: WebChat 依然搭配的是 JavaChat 服务器,在不修改原来服务器代码的情况下进行使用终端的扩展. 此次项目的难点在于,Action/Servlet ...