@RequestMapping("exportContract")
@ResponseBody
public void exportContract(HttpServletRequest request, HttpServletResponse response){
//测试使用的数据( 创建相应的DTO进行处理)
UserBean bean1 = new UserBean();
bean1.setName("张三");
bean1.setId(22);
bean1.setPassword("333333");
UserBean bean2 = new UserBean();
bean2.setName("李四");
bean2.setId(1);
bean2.setPassword("4444444");
//传入list集合数组
List<UserBean> rows = CollUtil.newArrayList(bean1, bean2);
String filePath = "/Users/admin/Desktop/";
String fileName = "u.xls";
//导出(按实体类JsonProperty注解处理)
downloadData(rows,UserBean.class,filePath,fileName);
//模版下载(按实体类JsonProperty注解处理)
downloadTemplate(UserBean.class,filePath,fileName);
//导入(按实体类JsonProperty注解处理)
List<UserBean> userBeans = importData(UserBean.class,filePath,fileName);
//导入数据校验自己处理userBeans(按实体类JsonProperty注解处理)
}
public <T> void downloadTemplate(Class<T> beanType,String filePath ,String fileName) {
ExcelWriter writer = ExcelUtil.getWriter();
//下载模版
writer.setStyleSet(fontStyle(writer.getWorkbook()));
writer.writeRow(getHeadTitleAndRule(beanType), true);
File destFile = new File(filePath+fileName);
writer.flush(destFile);
System.out.println("write success!");
}
/**
* 默认注解使用JsonProperty
*
* @param beanType
* @return
*/
public <T> Map<Object, Object> getHeadTitleAndRule(Class<T> beanType) {
Field[] fields = beanType.getDeclaredFields();
Map<Object, Object> map = new HashMap<>();
for (Field field : fields) {
String alisaName = field.getDeclaredAnnotation(JsonProperty.class).value();
String ruleStr = field.getDeclaredAnnotation(JsonProperty.class).defaultValue();
map.put(alisaName, ruleStr);
}
return map;
}
/**
* 给规则设置样式
*
* @param workbook
*/
public StyleSet fontStyle(Workbook workbook) {
StyleSet styleSet = new StyleSet(workbook);
Font redFont = workbook.createFont();
redFont.setColor(Font.COLOR_RED);
styleSet.setFont(redFont, true);
return styleSet;
}
//数据导入工具类
public <T> List<T> importData(Class<T> beanType,String filePath ,String fileName) {
ExcelReader excelReader = ExcelUtil.getReader(filePath+fileName);
Field[] fields = beanType.getDeclaredFields();
for (Field field : fields) {
String headName = field.getDeclaredAnnotation(JsonProperty.class).value();
String fieldName = field.getName();
excelReader.addHeaderAlias(headName, fieldName);
}
List<T> data = excelReader.readAll(beanType);
for (T t : data) {
System.out.println(t.toString());
}
return data;
}
//下载数据
public <T> void downloadData(List<T> data, Class<T> beanType,String filePath ,String fileName) {
ExcelWriter excelWriter = ExcelUtil.getWriter();
Field[] fields = beanType.getDeclaredFields();
for (Field field : fields) {
String headName = field.getDeclaredAnnotation(JsonProperty.class).value();
String fieldName = field.getName();
excelWriter.addHeaderAlias(fieldName, headName);
}
excelWriter.write(data);
File destFile = new File(filePath+fileName);
excelWriter.flush(destFile);
System.out.println("download success!");
}
package com.example.test.bean;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class UserBean {
@JsonProperty(value = "编号",defaultValue = "1")
private int id;
@JsonProperty(value = "姓名",defaultValue = "")
private String name;
@JsonProperty(value = "密码",defaultValue = "")
private String password;
}