基础内容来自http://blog.youkuaiyun.com/z562743237/article/details/8592012
项目中我们经常会遇到表格的操作,目前用的比较多的是jxl和poi两种方式操作表格。以下是用jxl读取表格和生成表格的方法。
下面是个完整的程序,只需要jxl.jar包就可以运行。
package com.sunyard.iccs.report.util;
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class Test {
//测试方法
public static void main(String[] args) {
//保存在工程目录下
// writeExcel("aaa.xls");
//保存在D盘目录下
// writeExcel("d:\\aaa.xls");
// readExcel(new File("aaa.xls"));
// readExcel(new File("d:\\aaa.xls"));
}
/**
* 创建一个excel表格,可以传入一个地址,自动在所给地址中创建一个excel并在里面写入内容。
*/
public static void writeExcel(String fileName){
//创建一个可写的工作薄
WritableWorkbook wwb = null;
try{
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch(IOException e) {
e.printStackTrace();
}
//判断工作薄是否为空
if(wwb != null) {
//创建一个可写的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("工作表名称", 1);
//下面开始添加单元格
for(int i=0;i<10;i++) {
for(int j=0;j<5;j++) {
//创建一个单元格
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label label = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
try{
//将单元格添加到工作表中
ws.addCell(label);
} catch(RowsExceededException e) {
e.printStackTrace();
} catch(WriteException e) {
e.printStackTrace();
}
}
}
try {
//将工作表写入工作薄中,不能写在for循环里,否则会报java.lang.NullPointerException异常
wwb.write();
System.out.println("Excel创建成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//关闭工作薄,释放资源
wwb.close();
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 传入一个File类型的地址,能读取所给地址中文件的内容
*/
public static void readExcel(File file) {
//用来接受读取到的字符串
StringBuffer sb = new StringBuffer();
//定义一个工作薄
Workbook wwb = null;
try{
//获取目标Excel表格
wwb = Workbook.getWorkbook(file);
} catch(BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//Excel表格中的所有工作表
Sheet[] sheets = wwb.getSheets();
if(sheets!=null&&sheets.length>0) {
for(int i=0;i<sheets.length;i++) {
//工作表中的所有行
int rowNum = sheets[i].getRows();
if(rowNum>0) {
for(int j=0;j<rowNum;j++) {
//每一行中的所有单元格
Cell[] cells = sheets[i].getRow(j);
if(cells!=null&&cells.length>0) {
for(int k=0;k<cells.length;k++) {
//将单元格中的内容拼接到sb中
sb.append(cells[k].getContents());
sb.append("\n");
}
}
}
}
}
}
System.out.println(sb.toString());
wwb.close();
}
}
*********************************************************************************************************************************
下面三块内容的结果显示在下面的excel截图中。
以下是对单元格的格式(内容)进行操作。
//输入数字,在excel中显示是常规
jxl.write.Number number=new jxl.write.Number(0,0,2500.00);
ws.addCell(number);
//输入的是自定义的数字,在excel中显示是自定义
jxl.write.NumberFormat numberFormat=new jxl.write.NumberFormat("#0.##");
jxl.write.WritableCellFormat writableCellFormat=new WritableCellFormat(numberFormat);
jxl.write.Number number1=new Number(1,1,0.2323,writableCellFormat);
ws.addCell(number1);
//输入的是日期,在excel中显示是常规
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String newdate = sdf.format(new Date());
Label label = new Label(2, 2, newdate);
ws.addCell(label);
//输入的是文本,在excel中显示的是常规
Label label1 = new Label(3, 3, "周星驰");
ws.addCell(label1);
//输入的是布尔值,在excel中显示是常规
jxl.write.Boolean bool = new jxl.write.Boolean(4, 1, true);
ws.addCell(bool);
以下是对单元格的属性进行操作。
//合并单元格
ws.mergeCells(0, 6, 3, 8);
label = new Label(0, 6, "合并了12个单元格");//在合并的单元格中输入文字
ws.addCell(label);
//主要是改变单元格背景、字体、颜色等等
WritableCellFormat wc = new WritableCellFormat();
//设置字体居中
wc.setAlignment(Alignment.CENTRE);
//设置边框和边框线
wc.setBorder(Border.ALL, BorderLineStyle.HAIR);
//设置边框的颜色
wc.setBackground(jxl.format.Colour.RED);
Label label2 = new Label(0, 9, "字体", wc);
ws.addCell(label2);
以下是对字体的相关操作。
//设置字体的属性
jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("楷书"), 20);
WritableCellFormat font = new WritableCellFormat(wfont);
Label label3 = new Label(0, 10, "这是楷书字体", font);
ws.addCell(label3);
以下是获取单元格的相关属性。(内容是上面的,输出结果在下面的截图中)
/**
* 获取单元格的属性
*/
//获取所有的工作表
jxl.write.WritableSheet[] sheetList = wwb.getSheets();
//获取第1列所有的单元格
jxl.Cell[] cellc = ws.getColumn(0);
System.out.println(cellc.length);
//获取第1行所有的单元格
jxl.Cell[] cellr = ws.getRow(0);
System.out.println(cellr.length);
//获取第1行第1列的单元格
Cell c = ws.getCell(0, 0);
String value = c.getContents();
System.out.println(value);
有时间再扯。。。