您的位置:首页 > 编程语言 > Java开发

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  这几种类型毫无问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息