POI 注解方式 导入导出 excel , 只依赖于 POI包
2015-05-29 12:53
716 查看
package cn.com.guangduo.zjyxcg.common.util; import java.util.Date; import cn.com.guangduo.zjyxcg.common.util.excel.annotation.AnnExcelColumn; import cn.com.guangduo.zjyxcg.common.util.excel.annotation.AnnExcelSheet; @AnnExcelSheet(name="生产企业信息") public class ExcelImportAndExportBean { @AnnExcelColumn(title="企业名称",width=-1) private String name; @AnnExcelColumn(title="注册资金(万元)",format="0.00",order=2) private Double capital; @AnnExcelColumn(title="传真",order=4) private String fax; @AnnExcelColumn(title="起始日期",format="yyyy年MM月dd日",width=200) private Date startDate; @AnnExcelColumn(title="年检年度",format="#年") private Integer year; public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getCapital() { return capital; } public void setCapital(Double capital) { this.capital = capital; } public String getFax() { return fax; } public void setFax(String fax) { this.fax = fax; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Integer getYear() { return year; } public void setYear(Integer year) { this.year = year; } @Override public String toString() { return "ExcelImportAndExportBean [name=" + name + ", capital=" + capital + ", fax=" + fax + ", startDate=" + startDate + ", year=" + year + "]"; } }
package cn.com.guangduo.zjyxcg.common.util; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.List; import cn.com.guangduo.zjyxcg.common.util.excel.ExcelUtil; import cn.com.guangduo.zjyxcg.common.util.excel.bean.IExcelExport; import cn.com.guangduo.zjyxcg.common.util.excel.bean.IExcelImport; public class ExcelImportAndExportTest { //么有junit void testImport(){ IExcelImport imp = ExcelUtil.getImport(); } public static void main(String[] args) throws Exception { //获取导入实例 IExcelImport imp = ExcelUtil.getImport(); //传入输入流 以及 注解了的bean对象 返回 对象数组 List<ExcelImportAndExportBean> beans = imp.execute(new FileInputStream("E:/生产企业.xlsx"), ExcelImportAndExportBean.class); System.out.println("=========================================="); for (ExcelImportAndExportBean bean : beans) { System.out.println(bean); } System.out.println("=========================================="); //获取导出实例 IExcelExport exp = ExcelUtil.getExport(); //传入输入流, 数据, 以及 注解的 bean 对象 //扩展名是xls,为了兼容,输出 1997~2013 格式的文档 //起始可以根据 beans 的 类型确认 第三个参数的class,但是没找到获取的方法 OutputStream os = new FileOutputStream("E:/导出的数据.xls"); exp.execute(os, beans, ExcelImportAndExportBean.class); exp.setTitleStyel(null);//设置标题样式 System.out.println("=========================================="); } }
package cn.com.guangduo.zjyxcg.common.util.excel.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import cn.com.guangduo.zjyxcg.common.enums.ICommonEnum; import cn.com.guangduo.zjyxcg.common.util.excel.enums.ExcelColumnType; /** * 导入导出字段的注解 * * @author zhang.xiaolei * @createDate 2015年5月27日 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface AnnExcelColumn { /** * Excel 标题名称 */ String title(); /** * 输出的的格式 */ String format() default ""; /** * 在什么时间处理,导入, 导出, 全部 */ ExcelColumnType type() default ExcelColumnType.ALL; /** * 导出时标题的顺序 由小到大 */ int order() default 0; /** * 导入时候的简单验证 * FIXME 以后再处理 */ String validate() default ""; /** * 枚举类型的相互转换,必须是 ICommonEnum 的实现 * FIXME 暂未实现 */ Class<ICommonEnum> enumType() default ICommonEnum.class; /** * 列宽,<br/>0 默认值,为不处理, * <br/>-1 自动宽度, * <br/> 其他值 就会设置为宽度 * * @default 0 */ int width() default 0; }
哈哈, 直接上代码,实在人,具体内容见附件。
功能还没有完胜,用起来基本没有问题,可能有些类型转换问题, 遇到的加上就好了!
String,Double,Date , Integer 这几种类型毫无问题!