java操作Excel
来源:互联网 发布:淘宝注册企业名称 编辑:程序博客网 时间:2024/05/17 11:04
利用 JAVA 操作 EXCEL 文件
java Excel 是一开放源码项目,通过它 Java 开发人员可以读取Excel 文件的内容、创建新的 Excel 文件、更新已经存在的 Excel 文件。使用该 API 非 Windows 操作系统也可以通过纯 Java 应用来处理 Excel 数据表。
应用示例
1 从 Excel 文件读取数据表
Java Excel API 既可以从本地文件系统的一个文件 (.xls),也可以从输入流中读取 Excel 数据表。读取 Excel 数据表的第一步是创建 Workbook(工作薄 )
代码片段:
InputStream is = new FileInputStream(sourcefile);
jxl.Workbookrwb = Workbook.getWorkbook(is);
一旦创建了 Workbook,我们就可以通过它来访问 Excel Sheet(工作表 )
代码片段:
// 获取第一张 Sheet 表
Sheet rs = rwb.getSheet(0);
访问 Excel Sheet既可以通过 Sheet 的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从 0 开始
一旦得到了 Sheet,我们就可以通过它来访问 Excel Cell(单元格 )
代码片段:
// 获取第一行,第一列的值
Cellc00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
// 获取第一行,第二列的值
Cellc10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
// 获取第二行,第二列的值
Cellc11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
如果仅仅是取得 Cell 的值,我们可以方便地通过 getContents() 方法,它可以将任何类型的 Cell 值都作为一个字符串返回
如果有需要知道 Cell 内容的确切类型,API 也提供了一系列的方法
CellType.LABEL CellType.NUMBER CellType.DATE
在得到 Cell 对象后,通过 getType() 方法可以获得该单元格的类型,然后与 API 提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法 getXXX(),就可以得到确定类型的值。
当你完成对 Excel 电子表格数据的处理后,一定要使用 close() 方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要
rwb.close();
Workbook 类提供的方法
1. int getNumberOfSheets()
获得工作薄(Workbook)中工作表(Sheet)的个数,示例:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
intsheets = rwb.getNumberOfSheets();
2. Sheet[] getSheets()
返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();
Sheet 接口提供的方法
1) String getName()
获取 Sheet 的名称,示例:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
String sheetName = rs.getName();
2) int getColumns()
获取 Sheet 表中所包含的总列数,示例:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
intrsColumns = rs.getColumns();
3) Cell[] getColumn(int column)
获取某一列的所有单元格,返回的是单元格对象数组,示例:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getColumn(0);
4) int getRows()
获取 Sheet 表中所包含的总行数,示例:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
intrsRows = rs.getRows();
5) Cell[] getRow(int row)
获取某一行的所有单元格,返回的是单元格对象数组,示例子:
jxl.Workbook rwb =jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);
6) Cell getCell(int column, int row)
获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。
jxl.Workbook rwb = jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cellcell = rs.getCell(0, 0);
2 生成新的 Excel 工作薄
与读取 Excel 工作表相似,首先要使用 Workbook 类的工厂方法创建一个可写入的工作薄 (Workbook) 对象,这里要注意的是,只能通过 API 提供的工厂方法来创建 Workbook,而不能使用 WritableWorkbook 的构造函数,因为类 WritableWorkbook 的构造函数为 protected 类型。
Java Excel API(JXL)是一个成熟开源的Java类库,用来操作Excel电子表格,支持读取,修改,写入等操作。这个项目基于GPL发布,与poi比较,对中文有很好的支持。而且支持PNG格式图片以及各种数字类型。
当然poi除了可以生成excel格式文件外,还支持pdf、doc等。
该项目网址是http://www.andykhan.com/jexcelapi/
https://sourceforge.net/projects/jexcelapi/
下面以此为例进行简单说明。
一、解压
将下载后的文件(如jexcelapi_2_6_10.zip)解压,里面有好多目录,包括例子、文档和源码,其中对项目有用的只有jxl.jar,把它引入或放入项目的classpath目录。
二、新建测试类,创建excel文件
import java.io.*;
import jxl.*;
import jxl.write.*;
public class WriteExcel {
/**
*written by http://www.sunleap.com
*/
public static void main(String[] args) {
try
{
//下面创建Excel文件
WritableWorkbook book=Workbook.createWorkbook(newFile("c://test.xls"));
//下面生成名为"第一页"的工作表Sheet,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//下面使用Label对象在单元格第1行第1列(0,0)构造一个标签,内容为"网址"
jxl.write.Label label1=new jxl.write.Label(0,0,"网址");
//将定义好的单元格(0,0)添加到工作表中
sheet.addCell(label1);
//下面使用Label对象在单元格第1行第2列(1,0)构造一个标签,内容为"站长"
jxl.write.Label label2=new jxl.write.Label(1,0,"站长");
//将定义好的单元格(1,0)添加到工作表中
sheet.addCell(label2);
//下面使用Label对象在单元格第1行第3列(2,0)构造一个标签,内容为"访问量"
jxl.write.Label label3=new jxl.write.Label(2,0,"访问量");
//将定义好的单元格(2,0)添加到工作表中
sheet.addCell(label3);
//下面向文件中插入两行记录
sheet.addCell(new jxl.write.Label(0,1,"http://www.sunleap.com"));
sheet.addCell(new jxl.write.Label(1,1,"sunleap"));
sheet.addCell(new jxl.write.Number(2,1,1000));
sheet.addCell(newjxl.write.Label(0,2,"http://www.isosee.cn"));
sheet.addCell(new jxl.write.Label(1,2,"isosee"));
sheet.addCell(new jxl.write.Number(2,2,1189));
//向文件写入数据并关闭文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
System.out.println("操作结束!");
}
}
执行后,会在C盘生成一个名称为”test.xsl”的Excel文件。
三、读取文件
下面代码读取刚才生成的Excel文件,代码如下:
import java.io.*;
import jxl.*;
public class ReadExcel {
/**
*written by http://www.sunleap.com
*/
public static void main(String[] args) {
try{
Workbook book=Workbook.getWorkbook(newFile("c://test.xls"));
//获得第一个工作表对象
Sheet sheet=book.getSheet(0);
//得到第2行第1列的单元格
Cell cell1=sheet.getCell(0,1);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e){
System.out.println(e);
}
}
}
程序执行结果:http://www.sunleap.com
四、修改文件
修改文件代码如下:
import java.io.*;
import jxl.*;
import jxl.write.*;
public class UpdateExcel {
/**
*written by http://www.sunleap.com
*/
public static void main(String[] args) {
try {
//获得Excel文件
Workbook wb=Workbook.getWorkbook(newFile("c://test.xls"));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File("c://test.xls"),wb);
//添加一个工作表eet,在第一行第一列填写内容
WritableSheet sheet=book.createSheet("第二页",1);
sheet.addCell(new Label(0,0,"http://www.sunleap.com"));
book.write();
book.close();
}catch(Exception e){
System.out.println(e);
}
System.out.println("操作结束!");
}
}
执行结果是在原有文件中加入了一个新的工作表
Excel文件往往有多行多列,可以进行循环读写,下面例子是循环读取excel文件的参考代码:
Workbook book=Workbook.getWorkbook(newFile("c://test.xls"));
//获得第一个工作表
Sheet sheet=book.getSheet(0);
//得到行列数
int columnum=sheet.getColumns();
int rownum=sheet.getRows();/
for(int i=0;i< rownum {
for(int j=0;j<columnum{
Cell cell1=sheet.getCell(j,i);
String result=cell1.getContents();
System.out.print(result);
System.out.print("/t");
}
System.out.println();
}
book.close();
高级操作
一、数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。
1、 字串格式化
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:
WritableFont font1=
newWritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①
WritableCellFormat format1=newWritableCellFormat(font1); ②
Label label=new Label(0,0,”data 4 test”,format1) ③
其中①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。
③处使用了Label类的构造子,指定了字串被赋予那种格式。
在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:
//把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
1、 合并单元格
WritableSheet.mergeCells(int m,int n,intp,int q);
作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一页”,0);
//合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells(0,0,5,0);
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
2、 行高和列宽
WritableSheet.setRowView(int i,int height);
作用是指定第i+1行的高度,比如:
//将第一行的高度设为200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,intwidth);
- Java Excel 操作excel
- JXL操作Excel java 操作excel
- Java操作Excel,Word
- java操作excel
- java操作Excel
- [JAVA]Excel 文档操作
- JAVA 操作EXCEL
- JAVA操作EXCEL文件
- java操作Excel
- java如何操作Excel
- java 操作 excel
- java操作EXCEL表格
- JAVA 操作EXCEL(转)
- java操作excel
- java操作excel
- JAVA 操作EXCEL文件
- java操作excel表格。
- Java操作Excel,Word
- job 定时任务
- PHP webservice 身份认证 客户端与服务端实现
- BREW 与BREWMP的区别
- 格式化json串的网址
- 已排序的i个最大数
- java操作Excel
- makefile那些事儿
- 8个超棒的学习jQuery的网站
- SQL中使用update inner join和delete inner join
- struts2 拦截器使用及自带的拦截器
- WM_DESTROY, WM_CLOSE, WM_QUIT 区别
- Android中的Spinner 使用技巧
- IJG JPEG库运行时错误:Corrupt JPEG data 的解决方案
- 介绍Amazon分布式存储引擎Dynamo