需求:在实际J2EE项目中,经常遇到需要导入导出excel文件的情况;
解决方案: 利用java的annotation,自定义一个annotation ,在声明pojo的时候对需要操作字段的属性进行声明,
然后通用的处理类运行时,读取annotation 相关信息进行解析。
对于导入,读入是一个excel文件,输出一个list ,如果你用hibernate操作的话相当方便。
对于导出,你需要组织一个List传入,将得到一个excel。
1、页面效果如下图所示:
2、自定义的Exel的annotation如下图所示:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel {
//导入时,对应数据库的字段 主要是用户区分每个字段,不能有annocation重名的
//导出时的列名 导出排序跟定义了annotation的字段的顺序有关
public String exportName();
//导出时在excel中每个列的宽 单位为字符,一个汉字=2个字符
//如 以列名列内容中较合适的长度 例如姓名列6 【姓名一般三个字】 性别列4【男女占1,但是列标题两个汉字】
//限制1-255
public int exportFieldWidth();
//导出时是否进行字段转换 例如 性别用int存储,导出时可能转换为男,女
//若是sign为1,则需要在pojo中加入一个方法 get字段名Convert()
//例如,字段sex ,需要加入 public String getSexConvert() 返回值为string
//若是sign为0,则不必管
public int exportConvertSign();
//导入数据是否需要转化 及 对已有的excel,是否需要将字段转为对应的数据
//若是sign为1,则需要在pojo中加入 void set字段名Convert(String text)
public int importConvertSign();
}
3、model类如下图所示:
@Entity
@Table(name = "JEECG_TUSER", schema = "")
public class Tuser implements java.io.Serializable {
// Fields
private String cid;
@Excel(exportName="真实姓名", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String realname;
@Excel(exportName="所属部门", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String org;
@Excel(exportName="邮箱", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String mail;
@Excel(exportName="手机", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String mobile;
@Excel(exportName="用户类型", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String usertype;
@Excel(exportName="状态", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String status;
@Excel(exportName="创建时间", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private Date ccreatedatetime;
@Excel(exportName="修改时间", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private Date cmodifydatetime;
@Excel(exportName="用户名", exportConvertSign = 0, exportFieldWidth = 10, importConvertSign = 0)
private String cname;
@Excel(exportName="密码", exportConvertSign = 0, exportFieldWidth = 30, importConvertSign = 0)
private String cpwd;
}
4、jsp页面如下图所示:
function exportExcel(){
window.location.href="demoAction!exportExcel.action";
}
function importExcel(){
$('#excelForm').form({
success : function(result) {
try {