TTEP.CN > 软件 >

利用Java进行Excel的数据导入导出

1. 引言
MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式。在一
个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段。在远程
网络教学系统中,利用Excel 表格统计学生的作业考试情况信息,便于老师了解学生的学习
情况,分析教学效果,制定教学计划。所以,用Java 操作Excel 表格,导出相关的信息对于
远程网络教育系统有着的很重要的意义。
在开源世界中,有两套比较有影响的API 提供Excel 数据导入导出的功能,一个是POI,
一个是jExcelAPI。本文结合基于J2EE 开发的多媒体教学系统中提供的将学生作业信息导出
到Excel 表格中的实例,详细阐述了利用JAVA 开发的jExcelAPI 操作excel 的方法。
2. Jxl 简介
2.1 Java 语言简介
Java 语言具有面向对象、与平台无关、安全、稳定和多线程等优良特性,是目前软件设
计中极为强大的编程语言[1]。它具有以下一些特点[2]:简单,面向对象,分布式,解释执行,
鲁棒,安全,体系结构中立,可移植,高性能,多线程以及动态性。
2.2 什么是Jxl
Java Excel 是一开放源码项目,通过它Java 开发人员可以读取Excel 文件的内容、创建
新的Excel 文件、更新已经存在的Excel 文件。使用该 API 非Windows 操作系统也可以通
过纯Java 应用来处理Excel 数据表。因为是使用Java 编写的,所以我们在Web 应用中可以
通过JSP、 Servlet 来调用API 实现对Excel 数据表的访问。
Jxl 发布的稳定版本是V2.0,提供以下功能:
从 Excel 95、97、2000 等格式的文件中读取数据[3];
读取 Excel 公式(可以读取Excel 97 以后的公式)[3];生成Excel 数据表(格式为Excel 97)[3];
支持字体、数字、日期的格式化[3];
支持单元格的阴影操作,以及颜色操作[3];
修改已经存在的数据表。
2.3 代码举例
2.3.1 从Excel 文件读取数据表
Java Excel API 既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel
数据表。读取Excel 数据表的第一步是创建Workbook(术语:工作薄),相关文献中给出了
部分事例介绍[4],下面的代码片段举例说明了应该如何操作:
import java.io.*;
import jxl.*;
… … … …
try
{
//构建Workbook 对象, 只读Workbook 对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);
}
catch (Exception e)
{e.printStackTrace();}
一旦创建了 Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。代码如
下:
//获取第一张Sheet 表
Sheet rs = rwb.getSheet(0);
我们既可能通过Sheet 的名称来访问它,也可以通过下标来访问它。如果通过下标来访
问的话,要注意的一点是下标从0 开始,就像数组一样。
一旦得到了 Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。代码如下:
//获取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//获取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();//获取第二行,第二列的值
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
如果仅仅是取得Cell 的值,我们可以方便地通过getContents()方法,它可以将任何类型
的Cell 值都作为一个字符串返回。示例代码中 Cell(0, 0)是文本型,Cell(1, 0)是数字型,
Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。
当完成对 Excel 电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,
以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。
//操作完成时,关闭对象,释放占用的内存空间
rwb.close();
2.3.2 生成新的Excel 工作薄
与读取 Excel 工作表相似,首先要使用Workbook 类的工厂方法创建一个可写入的工作
薄(Workbook)对象,相关文献中给出了事例介绍[4],具体代码如下:
try
{
//构建Workbook 对象, 只读Workbook 对象
//Method 1:创建可写入的Excel 工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
//Method 2:将WritableWorkbook 直接写入到输出流
/*
OutputStream os = new FileOutputStream(targetfile);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
*/}
catch (Exception e)
{e.printStackTrace();}
//创建Excel 工作表
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
//1.添加Label 对象
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
ws.addCell(labelC);//添加带有字型Formatting 的对象
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES,18,
WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
ws.addCell(labelCF);
2.3.3 单元格操作
1)合并单元格
WritableSheet.mergeCells(int m,int n,int p,int q);
作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一页”,0) [5];
//合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells(0,0,5,0);
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触
发异常。
2)行高和列宽
WritableSheet.setRowView(int i,int height);
作用是指定第i+1 行的高度,比如:
//将第一行的高度设为200[5]
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
作用是指定第i+1 列的宽度,比如:
//将第一列的宽度设为30[5]
sheet.setColumnView(0,30);
3. 应用实例
本文所举的实例为网上多媒体教学系统中对于学生作业导出信息的实现。
3.1 系统界面及导出表实例
最近发表
赞助商链接