實例
1.applicationContext-mvc.xml
<!-- 掃描easypoi中所有的view -->
<context:component-scan base-package="cn.afterturn.easypoi.view" />
<!-- Bean解析器,級別高於默認解析器,尋找bean對象進行二次處理 -->
<bean id="beanNameViewResolver"
class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1">
</bean>
2.controller層
導出
/**
*導出
*/
@RequestMapping("/export")
public String export(ModelMap map, EmployeeQuery query, HttpServletRequest request){
//得到查找條件的結果
List<Employee> list = employeeService.queryAll(query);
//拿到當前項目的真實路徑
String realPath = request.getServletContext().getRealPath("");
list.forEach(e->{
String headImage = e.getHeadImage();
// 設置圖片路徑
e.setHeadImage(realPath+headImage);
});
//設置一些屬性
ExportParams params = new ExportParams("員工數據", "員工表", ExcelType.XSSF);
//凍結
//params.setFreezeCol(3);
map.put(NormalExcelConstants.DATA_LIST, list); // 數據集合
map.put(NormalExcelConstants.CLASS, Employee.class);//導出實體
map.put(NormalExcelConstants.PARAMS, params);//參數
map.put(NormalExcelConstants.FILE_NAME, "員工");//文件名稱
//返回的名稱 :easypoiExcelView -> 並沒有找我的bean,而且當做一個路徑去進行訪問
// 現在默認去找的視圖解析器,而沒有找我的那一個bean
return NormalExcelConstants.EASYPOI_EXCEL_VIEW;//View名稱
}
導入
1.導入頁面
<!-- 上傳請配置enctype -->
<form action="/import/xlsx" method="post" enctype="multipart/form-data">
<input class="easyui-filebox" name="xlsxFile" data-options="prompt:'選擇一個文件...'" style="width:80%">
<button class="easyui-linkbutton" type="submit">確定</button>
</form>
2.controller層
@RequestMapping("/xlsx")
public String importXlsx(MultipartFile xlsxFile, HttpServletRequest request, HttpServletResponse response) throws Exception{
ImportParams params = new ImportParams();
params.setTitleRows(1); //注意:這裏有兩個表頭
List<Employee> list = ExcelImportUtil.importExcel(
xlsxFile.getInputStream(),
Employee.class, params);
for (Employee employee : list) {
employee.setPassword("123"); //默認密碼123
if(employee.getDepartment()!=null) {
Department department = departmentService.findByName(employee.getDepartment().getName());
employee.setDepartment(department);
}
employeeService.save(employee);
}
return "import";
}
}
導入驗證功能
1.引入包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
2.domain類
@Excel(name = "用戶名")
@NotBlank(message = "用戶名不能爲空")
private String username;
private String password;
@Excel(name="郵件",width = 30)
private String email;
@Excel(name="年紀")
@Max(value = 80,message = "max 最大值不能超過15")
private Integer age;
3.controller層
/**
*導出
*/
@RequestMapping("/employeeXlsx")
public String employeeXlsx(MultipartFile empFile, HttpServletRequest request, HttpServletResponse response) throws Exception{
//設置導入參數
ImportParams params = new ImportParams();
//設置標題和頭的行數
// params.setTitleRows(1);
params.setHeadRows(1);
//設置需要驗證爲true
params.setNeedVerfiy(true);
//設計驗證規則 自己定義的校驗器
params.setVerifyHandler(employeeVerifyHandler);
//把上傳的文件變成數據 導入時拿到更多的信息
ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(
empFile.getInputStream(),
Employee.class, params);
//正確的數據直接保存
result.getList().forEach(e->{
//設置一個默認密碼
e.setPassword("123456");
//獲取部門對象
if(e.getDepartment()!=null) {
Department department = departmentService.findByName(e.getDepartment().getName());
e.setDepartment(department);
}
employeeService.save(e);
});
//有錯誤的數據返回工作薄給前臺
if(result.isVerfiyFail()){
Workbook workbook = result.getFailWorkbook();
//設置響應頭
response.setHeader("content-disposition", "attachment;filename=error.xlsx");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.flush();
}
return "import";
}
4.自定義驗證
@Component
public class MyVerifyHandler implements IExcelVerifyHandler<Employee> {
@Autowired
private IEmployeeService employeeService;
//驗證用戶名是否重複
@Override
public ExcelVerifyHandlerResult verifyHandler(Employee employee) {
ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult();
if (!employeeService.checkUsername(employee.getUsername())) {
result.setMsg("該用戶已存在");
result.setSuccess(false);
return result;
}
result.setSuccess(true);
return result;
}
}