乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>java</em>用jxl将<em>Excel</em>里的数据

<em>java</em>用jxl将<em>Excel</em>里的数据

作者:乔山办公网日期:

返回目录:excel表格制作


java操作Excel的一种方法:在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中jExcelAPI是一个韩国程序员的作品,虽然没有POI那样7a64e59b9ee7ad94330血统高贵,但是在使用过程中,感觉简单方便,对中文支持非常好,功能也比较强大。它的下载地址是: http:///jexcelapi/ 当前的最高版本是2.4。作者的网站上对它的特征有如下描述:

● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字、日期操作
● 能够修饰单元格属性
● 支持图像和图表

搭建环境

将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。

基本操作

一、创建文件

拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:

代码(CreateXLS.java):

//生成Excel的类
import java.io.*;
import jxl.*;
import jxl.write.*;

public class CreateXLS
{
public static void main(String args[])
{
try
{
//打开文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”));

//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet(“第一页”,0);

//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,”test”);

//将定义好的单元格添加到工作表中
sheet.addCell(label);

/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);

//写入数据并关闭文件
book.write();
book.close();

}catch(Exception e)
{
System.out.println(e);
}
}
}

编译执行后,会在当前位置产生一个Excel文件。

三、读取文件

以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:

//读取Excel的类
import java.io.*;
import jxl.*;

public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“测试.xls”));

//获得第一个工作表对象
Sheet sheet=book.getSheet(0);

//得到第一列第一行的单元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);

book.close();

}catch(Exception e)
{
System.out.println(e);
}
}
}

程序执行结果:test

四、修改文件

利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:

//修改Excel的类,添加一个工作表
import java.io.*;
import jxl.*;
import jxl.write.*;

public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File(“测试.xls”));

//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”),wb);

//添加一个工作表
WritableSheet sheet=book.createSheet(“第二页”,1);

sheet.addCell(new Label(0,0,”第二页的测试数据”));

book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}

执行结果如图:

高级操作

一、 数据格式化

在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。

1、 字串格式化

字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:

WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①

WritableCellFormat format1=new WritableCellFormat(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,int p,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); 能够获取到java里面那么再封装保存进数据库也就简单了,希望这样可以帮到你。

public class ImportUtil {
private static final int version2003 = 2003;
private static final int version2007 = 2007;
private static int version = version2003;
private static Workbook wb = null;
private static Sheet sheet = null;
private static Cell cell = null;
private static org.apache.poi.ss.usermodel.Row row = null;

public static void main(String[] args) throws FileNotFoundException, IOException{
// ImportUtil i = new ImportUtil();
// String[][] data = i.getData("D:/workspace/jz.xlsx", 0);
// String[][] data = i.getData("D:/workspace/world.xls", 0);
//至于插数据库那就是你的事了
//循环取值data[0][0]就是第一列第一格的数据
}
/**
* * * 读取Excel的内容,第一维数组存储636f70797a686964616f338的是一行中格列的值,二维数组存储的是多少个行
*
* @param excelFilePath
* 读取数据的源Excel路径
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/
public static String[][] getData(String excelFilePath)
throws FileNotFoundException, IOException {
if (excelFilePath.endsWith(".xls"))
version = version2003;
else if (excelFilePath.endsWith(".xlsx"))
version = version2007;
InputStream stream = null;
if (version == version2003) {
stream = new FileInputStream(excelFilePath);
wb = (Workbook) new HSSFWorkbook(stream);
} else if (version == version2007) {
wb = (Workbook) new XSSFWorkbook(excelFilePath);
}
sheet = wb.getSheetAt(0);
// 行数(从0开始,相当于最后一行的索引),列数
int count_row = sheet.getLastRowNum(), count_cell = sheet.getRow(0).getPhysicalNumberOfCells();
String[][] returnArray = new String[count_row][count_cell];
for (int i = 0; i < count_row; i++) {
for (int j = 0; j < count_cell; j++) {
row = sheet.getRow(i + 1);
cell = ((org.apache.poi.ss.usermodel.Row) row).getCell(j);

if(cell == null){
returnArray[i][j] = "";
}else{
int type = cell.getCellType(); // 得到单元格数据类型
String k = "";
switch (type) { // 判断数据类型
case Cell.CELL_TYPE_BLANK:
k = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
k = (cell.getBooleanCellValue() == true ? "Y"
: "N");
break;
case Cell.CELL_TYPE_ERROR:
k = cell.getErrorCellValue() + "";
break;
case Cell.CELL_TYPE_FORMULA:
if (!cell.getStringCellValue().equals("")) {
k = cell.getStringCellValue();
} else {
k = cell.getNumericCellValue() + "";
}
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
k = new SimpleDateFormat("yyyy-MM-dd").format(date);
} else {
k = "";
}
} else {
k = new DecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_STRING:
k = cell.getStringCellValue();
break;
default:
k = "";
break;
}
returnArray[i][j] = k;
}
}
}
return returnArray;
}
}
public static void main(String args[]) throws BiffException, IOException, WriteException{
//1 从Excel文件读取数据表

//Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。
//读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:
//(完整代码见ExcelReading.java)

try
{
//构建Workbook对象, 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStream is = new FileInputStream("D:/user.xls");
jxl.Workbook rwb = Workbook.getWorkbook(is);

//一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:

//获取第一张Sheet表
Sheet rs = (Sheet) rwb.getSheet(0);
//我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,
//要注意的一点是下标从0开始,就像数组一样。

//一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:

//获取第一行,第一列的值
Cell c00 = ((jxl.Sheet) rs).getCell(0, 0);
String strc00 = c00.getContents();

//获取第一行,第二列的值
Cell c10 = ((jxl.Sheet) rs).getCell(1, 0);
String strc10 = c10.getContents();

//获取第二行,第二列的值
Cell c11 = ((jxl.Sheet) rs).getCell(1, 1);
String strc11 = c11.getContents();

System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

//如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,
//它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,
//Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。

//如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:

String strcc00 = null;
double strcc10 = 0.00;
Date strcc11 = null;

Cell cc00 = ((jxl.Sheet) rs).getCell(0, 0);
Cell cc10 = ((jxl.Sheet) rs).getCell(1, 0);
Cell cc11 = ((jxl.Sheet) rs).getCell(1, 1);

if(c00.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)cc00;
strcc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
NumberCell numc10 = (NumberCell)cc10;
strcc10 = numc10.getValue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)cc11;
strcc11 = datec11.getDate();
}

System.out.println("Cell(0, 0)" + " value : " + strcc00 + "; type : " + cc00.getType());
System.out.println("Cell(1, 0)" + " value : " + strcc10 + "; type : " + cc10.getType());
System.out.println("Cell(1, 1)" + " value : " + strcc11 + "; type : " + cc11.getType());

//在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,
//强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。
//API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:

//每种类型的具体意义,请参见Java Excel API Document。

//当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,
//以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:

//操作完成时,关闭对象,释放占用的内存空间
rwb.close();

}
catch (Exception e)
{
e.printStackTrace();
}

//Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介e799bee5baa6e79fa5e98193e78988e69d83366绍几个常用的方法,
//其它的方法请参考附录中的Java Excel API Document。

//Workbook类提供的方法

//1. int getNumberOfSheets();
//获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
int sheets = rwb.getNumberOfSheets();

//2. Sheet[] getSheets();
//返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxl.Workbook rwb2 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
Sheet[] sheets2 = (Sheet[]) rwb2.getSheets();

//3. String getVersion();
//返回正在使用的API的版本号,好像是没什么太大的作用。

jxl.Workbook rwb3 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
String apiVersion = rwb3.getVersion();

//Sheet接口提供的方法

//1) String getName();
//获取Sheet的名称,示例:

jxl.Workbook rwb4 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs = rwb4.getSheet(0);
String sheetName = rs.getName();

//2) int getColumns()
//获取Sheet表中所包含的总列数,示例:

jxl.Workbook rwb5 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs2 = rwb5.getSheet(0);
int rsColumns = rs2.getColumns();

//3) Cell[] getColumn(int column)
//获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb6 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs3 = rwb6.getSheet(0);
Cell[] cell = rs3.getColumn(0);

//4) int getRows()
//获取Sheet表中所包含的总行数,示例:

jxl.Workbook rwb7 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs4 = rwb7.getSheet(0);
int rsRows = rs4.getRows();

//5) Cell[] getRow(int row)
//获取某一行的所有单元格,返回的是单元格对象数组,示例子:

jxl.Workbook rwb8 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs5 = rwb8.getSheet(0);
Cell[] cell5 = rs5.getRow(0);

//6) Cell getCell(int column, int row)
//获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,
//这与通常的行、列组合有些不同。

jxl.Workbook rwb9 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs6 = rwb9.getSheet(0);
Cell cell6 = rs6.getCell(0, 0);

没有看明白疑问在哪
会用jxl基本就能解决了呀

相关阅读

  • <em>java</em>用jxl将<em>Excel</em>里的数据

  • 乔山办公网excel表格制作
  • java操作Excel的一种方法:在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中jExcelAPI是一个韩国程序员的作品,虽然没有POI那样7a64e59b9ee7ad94330血统高贵,但是
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网