专业的编程技术博客社区

网站首页 > 博客文章 正文

EasyPOI 导入(easypoi 导入怎样判断标题是平台规定的)

baijin 2024-08-31 16:09:16 博客文章 4 ℃ 0 评论

EasyPOI 与 SpringMVC

在开发前端这块大多使用 SpringMVC,EasyPOI 也提供了 对 SpringMVC 的支持;

EasypoiBigExcelExportView 大数据量导出

EasypoiMapExcelView map 列表导出

EasypoiPDFTemplateView pdf导出

EasypoiSingleExcelView 注解导出

EasypoiTemplateExcelView 模板导出

EasypoiTemplateWordView word模板导出

MapGraphExcelView 图表导出


导入页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%@include file="/WEB-INF/views/head.jsp" %>
</head>
<body>

<span style="color: red">${count}</span>
<!-- 上传请配置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>
</body>
</html>

Controller

@Controller
@RequestMapping("/import")
public class ImportController extends BaseController {

    @Autowired
    private IEmployeeService employeeService;
    @Autowired
    private IDepartmentService departmentService;

    //跳转到导入页面
    @RequestMapping("/index")
    public String index(){
        return "import";
    }

    //跳转到导入页面
    @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";
    }
}

自定义验证(用户名重复)

自定义验证需要实现IExcelVerifyHandler接口

@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;
    }
}
@Autowired
private MyVerifyHandler myVerifyHandler;
...
//跳转到导入页面
@RequestMapping("/xlsx")
public String importXlsx(MultipartFile xlsxFile, HttpServletRequest request, HttpServletResponse response) throws Exception{

    ImportParams params = new ImportParams();
    params.setNeedVerfiy(true); //代表这里是需要验证的
    params.setVerifyHandler(myVerifyHandler); //我自己定义的校验器
    params.setTitleRows(1); //注意:这里有两个表头

    //拿到错误的值
    ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(
            xlsxFile.getInputStream(),
            Employee.class, params);

    // 把正确的员工进行保存
    for (Employee employee : result.getList()) {
        employee.setPassword("123"); //默认密码123
        if(employee.getDepartment()!=null) {
            Department department = departmentService.findByName(employee.getDepartment().getName());
            employee.setDepartment(department);
        }
        employeeService.save(employee);
    }

    if (result.isVerfiyFail()) { //验证是否失败(把抢购的xlsx拿出去)
        ServletOutputStream fos = response.getOutputStream();
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime类型
        response.setHeader("Content-disposition", "attachment;filename=errorx.xlsx");
        response.setHeader("Pragma", "No-cache");
        result.getFailWorkbook().write(fos);
        fos.close();
    }
    return "import";
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表