EasyPOI结合SpringMVC使用

easypoi view 项目是为了更简单的方便搭建在导出时候的操作,利用spring mvc 的view 封装,更加符合spring mvc的风格 view下面包括多个 view的实现
* EasypoiBigExcelExportView 大数据量导出
* EasypoiMapExcelView map 列表导出
* EasypoiPDFTemplateView pdf导出
* EasypoiSingleExcelView 注解导出
* EasypoiTemplateExcelView 模板导出
* EasypoiTemplateWordView word模板导出
* MapGraphExcelView 图表导出
view的是使用方法大同小异,都有一个对应的bean,里面保护指定的参数常量 同意用modelmap.put(‘常量参数名’,‘值’)就可以,最后返回这个view名字
注解目录扫描的时候加上 cn.afterturn.easypoi.view 就可以使用了

实例

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.自定义验证

自定义验证需要实现IExcelVerifyHandler接口
(注:让Spring来扫描到这个类)
@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;
    }
}

 关注公众号,获取免费软件、资料,笔记等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之所向...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值