利用java操作Excel,有个开源的东东-jxl.jar,可以到
http://sourceforge.net/project/showfiles.php?group_id=79926下载。
下面列出他的一些编程接口:
类 | 作用 |
---|
Workbook | 表示只读的Excel工作簿和构造Workbook的工厂类 |
WritableWorkbook | 可写的Excel工作簿 |
Sheet | 工作簿内的只读工作表 |
WritableSheet | 工作簿内的可写工作表 |
Cell | 单元格的接口,读出单元格的信息 |
WritableCell | 可写单元格的接口 |
Label | 内容为字符类型的Cell,可读可写 |
Number | 内容为数字类型的Cell,可读可写 |
DateTime | 内容为日期类型的Cell,可读可写 |
Boolean | 内容为布尔量的Cell,可读可写 |
Formula | 内容为公式类型的Cell,可读可写 |
CellFormat | 读出单元格格式化信息 |
WritableCellFormat | 设定单元格的格式化信息 |
Font | 字体的接口,读出字体的信息 |
WritableFont | 可以设定字体信息 |
一.读取Excel文件内容
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了 Workbook wb = Workbook.getWorkbook(File file); // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); // 得到第一列第一行的单元格 Cell cell1 = sheet.getCell(0 ,0); // 获得第所以工作表对象 Sheet[] sheet = wb.getSheets(); //得到当前工作表的行数 int rowNum = sheet[0-sheet.length].getRows(); //得到当前行的所有单元格 Cell[] cells = sheet[0-sheet.length].getRow(0-rowNum); //读取当前单元格的值 String cellValue = cells[0-cells.length].getContents(); //最后关闭资源,释放内存 wb.close(); |
二.写入Excel文件
提示
不仅可以将workbook写入到文件中,也可以将workbook写入到一个输出流中,这样就可以通过web方式来让用户下载Excel文件。写入到输出流,要调用工厂方法Workbook.createWorkbook(OutputStream os)
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象 WritableWorkbook wwb = Workbook.createWorkbook(new File(String fileName)); //创建一个可写入的工作表 //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工 作薄中的位置 WritableSheet ws = wwb.createSheet("sheet1", 0); //下面开始添加单元格 for(int i=0;i<10;i++){ for(int j=0;j<5;j++){ //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行 Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列"); try { //将生成的单元格添加到工作表中 ws.addCell(labelC); try { //从内存中写入文件中 wwb.write(); //关闭资源,释放内存 wwb.close();
|
三.修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,
其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:
// Excel获得文件 Workbook wb = Workbook.getWorkbook( new File( " test.xls " )); // 打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), wb); // 添加一个工作表 WritableSheet sheet = book.createSheet( " 第二页 " , 1 ); sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " )); book.write(); book.close(); |
四.添加页眉页脚
/** * 向Excel中加入页眉页脚 * * @param dataSheet * 待加入页眉的工作表 * @param left * @param center * @param right */ public static void setHeader(WritableSheet dataSheet, String left, String center, String right) { HeaderFooter hf = new HeaderFooter(); hf.getLeft().append(left); hf.getCentre().append(center); hf.getRight().append(right); // 加入页眉 dataSheet.getSettings().setHeader(hf); // 加入页脚 dataSheet.getSettings().setFooter(hf); } |
五.往Excel中插入图片图标
/** * 往Excel中插入图片 * * @param dataSheet * 待插入的工作表 * @param col * 图片从该列开始 * @param row * 图片从该行开始 * @param width * 图片所占的列数 * @param height * 图片所占的行数 * @param imgFile * 要插入的图片文件 */ public static void insertImg(WritableSheet dataSheet, int col, int row, int width, int height, File imgFile) { WritableImage img = new WritableImage(col, row, width, height, imgFile); dataSheet.addImage(img); } |
六.格式化
//指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出 WritableFont font1 = new WritableFont(WritableFont.TIMES, 16,WritableFont.BOLD); //使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述 WritableCellFormat format1 = new WritableCellFormat(font1); // 把水平对齐方式指定为居中 format1.setAlignment(jxl.format.Alignment.CENTRE); // 把垂直对齐方式指定为居中 format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //使用了Label类的构造子,指定了字串被赋予那种格式 Label label = new Label(0, 0, "data 4 test", format1); |
//合并单元格
//(m,n)到(p,q)的单元格全部合并
WritableSheet.mergeCells(int m,int n,int p,int q);
//行高和列宽
//指定第i+1行的高度
WritableSheet.setRowView(int i,int height);
//指定第i+1列的宽度
WritableSheet.setColumnView(int i,int width);
//格式化数字
//NumberFormats表示数字格式,预定了几种格式,象NumberFormats.INTEGER表示取整,NumberFormats.FLOAT表示小数去两位。也可以自己定义数字格式。
WritableCellFormat integerFormat = new WritableCellFormat (NumberFormats.INTEGER);
Number number2 = new Number(0, 4, 3.141519, integerFormat);
sheet.addCell(number2);
WritableCellFormat floatFormat = new WritableCellFormat (NumberFormats.FLOAT);
Number number3 = new Number(1, 4, 3.141519, floatFormat);
sheet.addCell(number3);
NumberFormat fivedps = new NumberFormat("#.#####");
WritableCellFormat fivedpsFormat = new WritableCellFormat(fivedps);
Number number4 = new Number(2, 4, 3.141519, fivedpsFormat);
sheet.addCell(number4);
//也可以定义具有某种字体的数值格式:
WritableCellFormat fivedpsFontFormat = new WritableCellFormat(times16font, fivedps);
Number number5 = new Number(3, 4, 3.141519, fivedpsFontFormat);
sheet.addCell(number5);
//格式化日期
//DateFormat表示日期格式。
Date now = Calendar.getInstance().getTime();
DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss");
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat);
DateTime dateCell = new DateTime(0, 6, now, dateFormat);
sheet.addCell(dateCell);