随笔-126  评论-247  文章-5  trackbacks-0
Jexcel
基于JAVA的依赖于POI的EXCEL读写包装
项目地址:https://github.com/lychie/jexcel
示例工程结构
pom.xml
<repositories>
  <repository>
    <id>lychie-maven-repo</id>
    <url>https://raw.github.com/lychie/maven-repo/master/releases</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>org.lychie</groupId>
    <artifactId>jexcel</artifactId>
    <version>1.0.1</version>
  </dependency>
</dependencies>
写出EXCEL
package org.lychie.jexcel.demo;

import java.io.File;
import java.util.List;
import java.util.ArrayList;
import org.lychie.jexcel.WritableExcel;
import org.lychie.jexcel.demo.model.Employee;

/**
 * 写出对象到EXCEL文档
 * 
 * @date 2015-01-21
 * 
@author Lychie Fan
 
*/
public class WriteExcel {

    public static void main(String[] args) {

        // 创建一个可写的EXCEL对象
        WritableExcel excel = new WritableExcel(getData());
        // 设置POJO属性与EXCEL单元格的映射关系
        excel.setMapper("id", "编号");
        excel.setMapper("name", "姓名");
        excel.setMapper("hiredate", "入职日期");
        excel.setMapper("salary", "薪资");
        // 将对象内容写出到EXCEL文档
        excel.write(new File("src/main/resources/employee.xlsx"));

    }

    private static List<Employee> getData() {
        List<Employee> list = new ArrayList<Employee>();
        list.add(new Employee("杨忠杰"));
        list.add(new Employee("叶水燕"));
        list.add(new Employee("杨晓婷"));
        list.add(new Employee("叶国珠"));
        list.add(new Employee("何国群"));
        return list;
    }

}
结果图
设置写出的EXCEL样式
public class WriteExcel {

    public static void main(String[] args) {

        // 创建一个可写的EXCEL对象
        WritableExcel excel = new WritableExcel(getData());
        // 设置POJO属性与EXCEL单元格的映射关系
        excel.setMapper("id", "编号");
        excel.setMapper("name", "姓名");
        excel.setMapper("hiredate", "入职日期");
        excel.setMapper("salary", "薪资");
        
        // 单元格值格式对象
        ValueFormat format = excel.getValueFormat();
        // 设置薪资显示格式为货币格式
        format.set("salary", ValueFormat.CURRENCY_FORMAT);
        // 主体对象
        Body body = excel.getBody();
        // 设置单元格内容水平方向居中
        body.setHorizontalAlignment(Body.HORIZONTAL_CENTER);
        
        // 将对象内容写出到EXCEL文档
        excel.write(new File("src/main/resources/employee.xlsx"));

    }

}
结果图
读取EXCEL文档
package org.lychie.jexcel.demo;

import java.util.List;
import org.lychie.jutil.IOUtil;
import org.lychie.jutil.Printer;
import org.lychie.jexcel.ReadableExcel;
import org.lychie.jexcel.demo.model.Person;

/**
 * 读取EXCEL文档
 * 
 * @date 2015-01-21
 * 
@author Lychie Fan
 
*/
public class ReadExcel {

    public static void main(String[] args) {

        // 创建一个可读的EXCEL对象
        ReadableExcel excel = new ReadableExcel(Person.class);
        // 设置POJO属性与EXCEL单元格的映射关系
        excel.setMapper("id", "编号");
        excel.setMapper("age", "年龄");
        excel.setMapper("sex", "性别");
        excel.setMapper("name", "姓名");
        excel.setMapper("date", "生日");
        // 载入EXCEL文档
        excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
        // 解析EXCEL文档成集合
        List<Person> list = excel.toList();
        // 打印输出集合的内容
        Printer.print(list);

    }

}
persons.xlsx
输出结果
读取EXCEL文档,校验文档内容合法性
public class ReadExcel {

    public static void main(String[] args) {

        // 创建一个可读的EXCEL对象
        ReadableExcel excel = new ReadableExcel(Person.class);
        // 设置POJO属性与EXCEL单元格的映射关系
        excel.setMapper("id", "编号");
        excel.setMapper("age", "年龄");
        excel.setMapper("sex", "性别");
        excel.setMapper("name", "姓名");
        excel.setMapper("date", "生日");
        // 载入EXCEL文档
        excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
        
        try {
            // 校验EXCEL文档内容的合法性
            excel.validate(new BasicValidation());
        } catch (ValidationCastException e) {
            e.printStackTrace();
            return ;
        }
        
        // 解析EXCEL文档成集合
        List<Person> list = excel.toList();
        // 打印输出集合的内容
        Printer.print(list);

    }

}
persons.xlsx
输出结果
读取EXCEL文档,自定义校验规则
public class ReadExcel {

    public static void main(String[] args) {

        // 创建一个可读的EXCEL对象
        ReadableExcel excel = new ReadableExcel(Person.class);
        // 设置POJO属性与EXCEL单元格的映射关系
        excel.setMapper("id", "编号");
        excel.setMapper("age", "年龄");
        excel.setMapper("sex", "性别");
        excel.setMapper("name", "姓名");
        excel.setMapper("date", "生日");
        // 载入EXCEL文档
        excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
        
        try {
            // 校验EXCEL文档内容的合法性
            excel.validate(new MyValidation());
        } catch (ValidationCastException e) {
            e.printStackTrace();
            return ;
        }
        
        // 解析EXCEL文档成集合
        List<Person> list = excel.toList();
        // 打印输出集合的内容
        Printer.print(list);

    }
    
    private static class MyValidation extends BasicValidation {

        @Override
        public boolean validate(Class<?> type, String name, String value) {
            // 自定义校验规则, 在 super.validate 之前校验, 以达到短路父校验规则的目的
            if (name.equals("age")) {
                Integer age = Integer.valueOf(value);
                if (age >= 18 && age < 55) {
                    return true;
                } else {
                    setCause("年龄不在 [18, 55) 区间");
                    return false;
                }
            }
            // 最后调父类校验方法
            return super.validate(type, name, value);
        }

    }

}
persons.xlsx
输出结果
资源
示例工程源码下载:jexcel-demo.zip(提取码:6398)





  
posted on 2015-01-22 09:38 fancydeepin 阅读(4982) 评论(2)  编辑  收藏

评论:
# re: jexcel 读写EXCEL 2015-01-22 22:36 | 京山游侠
mark  回复  更多评论
  
# re: jexcel 读写EXCEL 2015-02-04 20:19 | 小学徒V
吊炸天  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: