poi匯出後臺提示報錯,Minimum column number is 0!
阿新 • • 發佈:2019-01-03
解決方案:
實體類裡沒加註解。在需要打印出來的實體類的get方法加上註解@ExcelField
如一張使用者表:
/**
* Excel註解定義
*
* @version 2013-03-10
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelField {
/**
* 匯出欄位名(預設呼叫當前欄位的“get”方法,如指定匯出欄位為物件,請填寫“物件名.物件屬性”,例:“area.name”、“office.name”)
*/
String value() default "";
/**
* 匯出欄位標題(需要新增批註請用“**”分隔,標題**批註,僅對匯出模板有效)
*/
String title();
/**
* 欄位型別(0:匯出匯入;1:僅匯出;2:僅匯入)
*/
int type() default 0;
/**
* 匯出欄位對齊方式(0:自動;1:靠左;2:居中;3:靠右)
*/
int align() default 0;
/**
* 匯出欄位欄位排序(升序)
*/
int sort() default 0;
/**
* 如果是字典型別,請設定字典的type值
*/
String dictType() default "";
/**
* 反射型別
*/
Class<?> fieldType() default Class.class;
/**
* 欄位歸屬組(根據分組匯出匯入)
*/
int[] groups() default {};
}
public class User{
private static final long serialVersionUID = 1 L;
private Office company; // 歸屬公司
private Office office; // 歸屬部門
private String loginName;// 登入名
private String password;// 密碼
private String no; // 工號
private String name; // 姓名
private String email; // 郵箱
private String phone; // 電話
private String mobile; // 手機
private String userType;// 使用者型別
private String loginIp; // 最後登陸IP
private Date loginDate; // 最後登陸日期
private String loginFlag; // 是否允許登陸
private String photo; // 頭像
private String oldLoginName;// 原登入名
private String newPassword; // 新密碼
private String oldLoginIp; // 上次登陸IP
private Date oldLoginDate; // 上次登陸日期
private Role role; // 根據角色查詢使用者條件
private List<Role> roleList = Lists.newArrayList(); // 擁有角色列表
public User() {
super();
this.loginFlag = Global.YES;
}
public User(String id){
super(id);
}
public User(String id, String loginName){
super(id);
this.loginName = loginName;
}
public User(Role role){
super();
this.role = role;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getLoginFlag() {
return loginFlag;
}
public void setLoginFlag(String loginFlag) {
this.loginFlag = loginFlag;
}
@SupCol(isUnique="true", isHide="true")
@ExcelField(title="ID", type=1, align=2, sort=1)
public String getId() {
return id;
}
@JsonIgnore
@NotNull(message="歸屬公司不能為空")
@ExcelField(title="歸屬公司", align=2, sort=20)
public Office getCompany() {
return company;
}
public void setCompany(Office company) {
this.company = company;
}
@JsonIgnore
@NotNull(message="歸屬部門不能為空")
@ExcelField(title="歸屬部門", align=2, sort=25)
public Office getOffice() {
return office;
}
public void setOffice(Office office) {
this.office = office;
}
@Length(min=1, max=100, message="登入名長度必須介於 1 和 100 之間")
@ExcelField(title="登入名", align=2, sort=30)
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
@JsonIgnore
@Length(min=1, max=100, message="密碼長度必須介於 1 和 100 之間")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Length(min=1, max=100, message="姓名長度必須介於 1 和 100 之間")
@ExcelField(title="姓名", align=2, sort=40)
public String getName() {
return name;
}
@Length(min=1, max=100, message="工號長度必須介於 1 和 100 之間")
@ExcelField(title="工號", align=2, sort=45)
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public void setName(String name) {
this.name = name;
}
@Email(message="郵箱格式不正確")
@Length(min=0, max=200, message="郵箱長度必須介於 1 和 200 之間")
@ExcelField(title="郵箱", align=1, sort=50)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Length(min=0, max=200, message="電話長度必須介於 1 和 200 之間")
@ExcelField(title="電話", align=2, sort=60)
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Length(min=0, max=200, message="手機長度必須介於 1 和 200 之間")
@ExcelField(title="手機", align=2, sort=70)
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@ExcelField(title="備註", align=1, sort=900)
public String getRemarks() {
return remarks;
}
@Length(min=0, max=100, message="使用者型別長度必須介於 1 和 100 之間")
@ExcelField(title="使用者型別", align=2, sort=80, dictType="sys_user_type")
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
@ExcelField(title="建立時間", type=0, align=1, sort=90)
public Date getCreateDate() {
return createDate;
}
@ExcelField(title="最後登入IP", type=1, align=1, sort=100)
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelField(title="最後登入日期", type=1, align=1, sort=110)
public Date getLoginDate() {
return loginDate;
}
public void setLoginDate(Date loginDate) {
this.loginDate = loginDate;
}
public String getOldLoginName() {
return oldLoginName;
}
public void setOldLoginName(String oldLoginName) {
this.oldLoginName = oldLoginName;
}
public String getNewPassword() {
return newPassword;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
public String getOldLoginIp() {
if (oldLoginIp == null){
return loginIp;
}
return oldLoginIp;
}
public void setOldLoginIp(String oldLoginIp) {
this.oldLoginIp = oldLoginIp;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getOldLoginDate() {
if (oldLoginDate == null){
return loginDate;
}
return oldLoginDate;
}
public void setOldLoginDate(Date oldLoginDate) {
this.oldLoginDate = oldLoginDate;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
@JsonIgnore
@ExcelField(title="擁有角色", align=1, sort=800, fieldType=RoleListType.class)
public List<Role> getRoleList() {
return roleList;
}
public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
}
@JsonIgnore
public List<String> getRoleIdList() {
List<String> roleIdList = Lists.newArrayList();
for (Role role : roleList) {
roleIdList.add(role.getId());
}
return roleIdList;
}
public void setRoleIdList(List<String> roleIdList) {
roleList = Lists.newArrayList();
for (String roleId : roleIdList) {
Role role = new Role();
role.setId(roleId);
roleList.add(role);
}
}
/**
* 使用者擁有的角色名稱字串, 多個角色名稱用','分隔.
*/
public String getRoleNames() {
return Collections3.extractToString(roleList, "name", ",");
}
public boolean isAdmin(){
return isAdmin(this.id);
}
public static boolean isAdmin(String id){
return id != null && "1".equals(id);
}
@Override
public String toString() {
return id;
}
}