基于jxl对excel文件的row-bean的处理
最近用jxl包处理excel文件相当的方便,而且它的功能也很强大,用起来很舒服,唯一不足的就是,当我的列名很多时,要写很多的代码来取值,设值,于是就给jxl加了一个小的功能,在此分享一下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE excelfile SYSTEM "jxl-excel-1.dtd"><excelfiles><excel name="student" path="F:\student.xls"><column column="学号" field="sno" type="String"></column><column column="姓名" field="name" type="String"></column><column column="年龄" field="age" type="Integer"></column></excel></excelfiles>这是一个配置文件,相当的好理解,excel 为一个excel文件,工程里可以为这类文件起一个别名 name="student", 该文件所对应的实体类,只要配置的列名包含在实体类里就可以了。该文件的路径,可以不用指定,后面可以用File的对象进行文件操作;column:列,三个属性都要有,对应的文件中的列名 column; 实体中的属性名 field, 该字段的类型 type.
Workbook rwb = Workbook.getWorkbook(new File(sourcefile));//得到工作文件Sheet rs = rwb.getSheet(0);//设置工作sheetCell cell = rs.getCell(0, 0);//获取单元格,再调用getContent() 方法获取值
ExcelFile ef = new ExcelFile("student");//获取操作的文件ef.createReadBook(); //设置只读Student student = new Student();try {ef.row2Bean(1, student);//获取一行的信息,封装到student对象里面} catch (Exception e) {e.printStackTrace();}System.out.println("name:" + student.getName());//输出System.out.println("age:" + student.getAge());System.out.println("sno:" + student.getSno()); //其他的dao操作。。
Student student = new Student(); //beanstudent.setSno("111");//或者从DB 里取数据student.setName("Jack");student.setAge(11);ExcelFile ef = new ExcelFile("student"); //设置操作文件ef.createWriteBook();//建立可写的文件ef.bean2Row(student);//追加到最后一行ef.bean2Row(3, student);//追加到指定的行数ef.write(); //写入ef.closeWriteBook();//关闭
public <T> T row2Bean(int row, T bean) throws Exception {if (!isMatch || !validation()) {return null;}List<String> names = getColumnsName();Map<String, Column> map = excel.getColumns();for (int i = 0; i < names.size(); i++) {Column c = map.get(names.get(i));String content = sheet.getCell(i, row).getContents();if (DataType.STRING.equals(c.getType())) {// string typeExcelFileUtil.setProperty(bean, c.getFiled(), content);}//类型只需在此重构即可if (DataType.INTEGER.equals(c.getType())) {// integer typeExcelFileUtil.setProperty(bean, c.getFiled(), Integer.parseInt(content));}}return null;}先进性验证,看看操作的文件和配置的信息是否符合,只要配置的属性包含在Bean的属性里面,就可以通过验证,如不包含则提示错误并返回。
private final static String SET = "set"; // set method/**set the bean's field*/public static <T> void setProperty(T t, String name, Object value) {String methodString = getMethodString(name, SET);try {// 利用反射获取方法,设置相关的属性t.getClass().getMethod(methodString, value.getClass()).invoke(t,value);} catch (Exception e) {e.printStackTrace();}}将Bean 写入文件,也是一样的道理,具体代码就不贴了,下面会提供源码。