aisell总结6_JXL_POI

一、jxl与POI

优缺点。

二、原生poi
1、导出.xlsx

(1)导包
(2)domain注解
(3)关联导出

2、导入

(1)获取文件
(2)按单元格依次导入

二、easyPOI(重新导包)
1、导出

(1)准备导出按钮(button默认直接提交form表单)

 <!-- 这部门是查询的功能  -->
        <div>
            <form id="searchForm" action="/employee/download" method="post">
                用户名: <input name="username" class="easyui-textbox" style="width:80px;height:32px">
                邮件: <input name="email" class="easyui-textbox" style="width:80px;height:32px">
                部门 :
                <input  class="easyui-combobox" name="departmentId"
                        data-options="valueField:'id',textField:'name',panelHeight:'auto',url:'/util/departmentList'">
                <a href="#" data-method="search"  class="easyui-linkbutton" iconCls="icon-search">查找</a>
                <%--导出按钮,button,默认提交表单--%>
                <button  class="easyui-linkbutton" iconCls="icon-redo">导出</button>
            </form>
        </div>

(2)根据条件查询,配置视图解析器,导出xlsx文件
配置xml:

<!--导出的视图解析器-->
    <context:component-scan base-package="cn.afterturn.easypoi.view"></context:component-scan>
    <!-- 优先找easypoi的视图解析器-->
    <!-- bean的视图解析器  p:order="0": 顺序在最前面 -->
    <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"
          p:order="0"></bean>

控制层:

 @RequestMapping("/download")
    public String download(ModelMap map, EmployeeQuery employeeQuery, HttpServletRequest req){
        List<Employee> employees = employeeService.findByQuery(employeeQuery);
        //获取上下文路径
        String realPath = req.getServletContext().getRealPath("/");
        //图片路径处理
        for (Employee employee : employees) {
            //设置图片绝对路径
            String headImage = realPath+employee.getHeadImage();
            employee.setHeadImage(headImage);
        }

        //导出参数设置 ExportParams
        ExportParams params = new ExportParams("员工详情","员工信息表",ExcelType.XSSF);
        System.out.println("什么错:"+params);
        //冻结列
        params.setFreezeCol(2);
        //导出集合
        map.put(NormalExcelConstants.DATA_LIST, employees); // 数据集合
        map.put(NormalExcelConstants.CLASS, Employee.class);//导出实体
        map.put(NormalExcelConstants.PARAMS, params);//参数
        //要求是一个字符串
        map.put(NormalExcelConstants.FILE_NAME, "Employee导出");//文件名称

        //easypoiExcelView easypoiExcelView --本身spring有一个视图解析器,
        //返回字符串就给我返回对应页面
        return NormalExcelConstants.EASYPOI_EXCEL_VIEW;//View名称
    }
2、导入

(1)MultipartFile接收文件,准备文件接收的表单 import.jsp
前端文件接收:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%@include file="/WEB-INF/views/head.jsp" %>
</head>
<body>
<!-- 上传必需是:post,enctype="multipart/form-data"-->
<form action="/import/employeeXlsx" method="post" enctype="multipart/form-data">
    <input class="easyui-filebox" name="empFile" style="width:80%"
           data-options="prompt:'选择一个文件...',buttonText: '选择文件'" />
    <button class="easyui-linkbutton">导入</button>
</form>
</body>
</html>

(2)验证:导包,domain添加注解
(3)自定义验证:
继承:

@Component
public class AisellEmployeeVerifyHander implements IExcelVerifyHandler<Employee> {
    @Autowired
    private IEmployeeService employeeService;

    @Override
    public ExcelVerifyHandlerResult verifyHandler(Employee employee) {
        ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(true);

        boolean checkUsername = employeeService.checkUsername(employee.getUsername());
        if(!checkUsername){
            result.setSuccess(false);
            result.setMsg("用户名已存在");
        }

        return result;
    }
}

(4)导入后保存:

@Controller
@RequestMapping("/import")
public class ImportController {
    @Autowired
    private IDepartmentService departmentService;
    @Autowired
    private IEmployeeService employeeService;
    //自定义验证类
    @Autowired
    private AisellEmployeeVerifyHander aisellEmployeeVerifyHander;
    
    //跳转至上传文件页面:
    @RequestMapping("/index")
    public String index(){
        return "import";
    }
    
    //1、没有验证功能
    @RequestMapping("/employeeXlsx1")
    public String importExcel(MultipartFile multipartFile) throws Exception {
        //创建输入处理对象
        ImportParams params = new ImportParams();
        //声明第一行为标题行
        params.setTitleRows(1);
        //转化上传的文件为Employee对象
        List<Employee> employees = ExcelImportUtil.importExcel(multipartFile.getInputStream(), Employee.class, params);
        //保存
        for (Employee employee : employees) {
            //查询部门
            Department department = departmentService.findDepartmentByName(employee.getDepartment().getName());
            //添加部门
            employee.setDepartment(department);
            //默认密码添加
            employee.setPassword("123456");
            //保存
            employeeService.save(employee);
        }
        return "import";
    }



    //2、具备验证功能
    @RequestMapping("/employeeXlsx")
    public String employeeXlsx(MultipartFile empFile, HttpServletResponse response) throws Exception {
        //这个文件怎么
        ImportParams params = new ImportParams();
        params.setTitleRows(1);
        //开启验证
        params.setNeedVerfiy(true);
        //开启自定义验证
        params.setVerifyHandler(aisellEmployeeVerifyHander);

        //导入
        ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(empFile.getInputStream(),
                Employee.class, params);
        //正确数据
        for (Employee employee : result.getList()) {
            System.out.println(employee);
            //根据部门名称查询的部门对象
            String deptName = employee.getDepartment().getName();
            Department department = departmentService.findDepartmentByName(deptName);
            //设置部门
            employee.setDepartment(department);
            employee.setPassword("123456");
            //System.out.println(employee.getDepartment().getName());
            employeeService.save(employee);
        }

        //错误的数据
        for (Employee employee : result.getFailList()) {
            System.out.println("错误数据:"+employee);
        }

        //传回前台 让用户查看 修改
        if(result.isVerfiyFail()){
            //有时候信息
            Workbook failWorkbook = result.getFailWorkbook();
            //输出设置一堆参数
            //把这个文件导出
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime类型
            response.setHeader("Content-disposition", "attachment;filename=error.xlsx");
            response.setHeader("Pragma", "No-cache");//设置不要缓存
            //输出内容
            OutputStream ouputStream = response.getOutputStream();
            failWorkbook.write(ouputStream);
            ouputStream.flush();
            ouputStream.close();
        }
        return "import";
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44671176/article/details/99236300