java 操作 Excel 方法,java如何操作excel
java 操作 Excel 最常用的就是JXL(java excel api)和POI,今先看下JXL吧。首先可以到 http://www.andykhan.com/jexcelapi/download.html 下载最新的jxl.jar,里面有它的jar包和API,内有一个小例子,可以参考一下。
?
??? JXL 用起来挺简单的,不过相应的其功能也并不是十分强大,对于一般的简单的excel操作还可以,对于太复杂的还是有些吃力,基本的操作也就是以下几项内容。
?
??? 首先,要创建一个可读写的工作簿(WritableWorkbook):
?
- WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test.xls"));
?
??? 如果是想要修改一个已存在的excel工作簿,则需要先获得它的原始工作簿,再创建一个可读写的副本:
?
- Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本
?
??? 然后,取得我们要操作的sheet,并对其进行相应的操作,如改名、合并单元格、设置列宽、行高等:
?
- WritableSheet sheet = workbook.getSheet(0);sheet.setName("修改后"); // 给sheet页改名workbook.removeSheet(2); // 移除多余的标签页workbook.removeSheet(3);sheet.mergeCells(0, 0, 4, 0); // 合并单元格sheet.setRowView(0, 600); // 设置行的高度sheet.setColumnView(0, 30); // 设置列的宽度sheet.setColumnView(1, 20); // 设置列的宽度
?
??? 之后,就是对单元格的操作了,可以通过如下方法获取一个单元格,其中两个参数分别为列、行的位置,从0开始计数,如(2,3)就代表单元格C4:
?
- WritableCell cell = sheet.getWritableCell(2,3);
?
??? 通过WritableFont、WritableCellFormat等对象可以设置单元格的字体、样式等外观:
?
- WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体 20,//WritableFont.DEFAULT_POINT_SIZE, // 字号 WritableFont.NO_BOLD, // 粗体 false, // 斜体 UnderlineStyle.NO_UNDERLINE,// 下划线 Colour.BLUE2,// 字体颜色 ScriptStyle.NORMAL_SCRIPT);WritableCellFormat wcf = new WritableCellFormat(titleWf);wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框cell.setCellFormat(wcf);
?
??? 在jxl中,有几种常用的数据类型,根据单元格内数据类型的不同,每个WritableCell可以根据其类型被转换为它的一个子类型,以便对不同类型的数据进行专门的处理,通常可以做这样的转换:
?
- WritableCell fromCell = sheet0.getWritableCell(j, i);if (fromCell instanceof jxl.write.Number) {jxl.write.Number num = (jxl.write.Number) fromCell;} else if (fromCell instanceof jxl.write.Boolean) {jxl.write.Boolean bool = (jxl.write.Boolean) fromCell;} else if (fromCell instanceof jxl.write.DateTime) {jxl.write.DateTime dt = (jxl.write.DateTime) fromCell;} else if(fromCell instanceof Label){Label _label = (Label) fromCell;}
?
??? 当然,操作完成之后一定不要忘了刷新(或者叫写入?)和关掉工作簿:
?
- workbook.write(); workbook.close();
?
?
下面是参考jxl api里那个例子写的,把我自己觉得常用的excel操作基本都包含了:
?
- package test;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import jxl.CellType;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.Colour;import jxl.format.ScriptStyle;import jxl.format.UnderlineStyle;import jxl.format.VerticalAlignment;import jxl.read.biff.BiffException;import jxl.write.Blank;import jxl.write.DateFormat;import jxl.write.DateFormats;import jxl.write.DateTime;import jxl.write.Formula;import jxl.write.Label;import jxl.write.Number;import jxl.write.NumberFormat;import jxl.write.WritableCell;import jxl.write.WritableCellFeatures;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableHyperlink;import jxl.write.WritableImage;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;/** * * @author why * */public class ExcelTest {/** * @param args * @throws IOException * @throws BiffException * @throws WriteException */public static void main(String[] args) throws IOException, BiffException, WriteException {Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本/** * 定义与设置Sheet */WritableSheet sheet = workbook.get