动态列表的excel导入、导出功能(一)

项目场景:

最近做到一个业务需求是,要做一个物品管理页面的excel模板导出,导出的excel信息填充后做导入使用


问题描述:

这个关键是,模板是动态的,不同的物品有着不同的属性,相对应的excel 列数也是动态的;后面思索好长一段时间,才想到这么一个“半动态化”的导出功能:编写过程如下

1. 导入jar包

  <!--easypoi 导出-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.1.0</version>
        </dependency>

2. 实体类的生成:

这里用的是模板导出,实体类就不需要使用额外的注解了,按业务需求构建即可.

3. Controller层设计:

 /**
     * 查询物品模板
     *(动态导出功能)
     * @param orgCode
     * @return
     */
    @GetMapping("/office/goods/export")
    public void export(String typeCode, String orgCode, String personCode, HttpServletResponse response) throws Exception {

       //获取excel表对应属性名(列名)
        OfficeTypeContentVo officeTypeContent = new OfficeTypeContentVo();
        officeTypeContent.setTypeCode(typeCode);
        List<OfficeTypeContentVo> list = officeTypeService.getTypeContent(officeTypeContent);

        //数据整理(封装好的exportExcel函数 键值对的值要求是用集合接收)
        Map<String, Object> data = new HashMap<>();
        for (int i = 0; i < list.size(); i++) {
            OfficeTypeContentVo vo = new OfficeTypeContentVo();
            List<OfficeTypeContentVo> voList = new  ArrayList<>();
            vo.setColumnName(list.get(i).getColumnName());
            voList.add(vo);
            String name = "data"+i;
            data.put(name,voList);
        }
        //引用模板
        TemplateExportParams params = new TemplateExportParams("/templates/typeContent.xlsx", true);
        params.setColForEach(true);
        Workbook workbook = ExcelExportUtil.exportExcel(params, data);
        //设置编码
        response.setCharacterEncoding("UTF-8");
        //设置响应头 直接下载
        response.setContentType("application/x-download");
        String filedisplay = "";
        try {
            //设置excel名字
            filedisplay = URLEncoder.encode("物品信息表.xlsx", "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setHeader("content-disposition", "attachment;filename=" + filedisplay);
        OutputStream out = null;
        try {
            out = response.getOutputStream();
            workbook.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

4. 模板设计:

这份模板 也是这次导出是 "半动态导出"的原因:需要我们提前设计给足 列数,才能自由导出
在这里插入图片描述

总结:

编码使用过程中碰到了 强转问题(前文提到需用集合接收的原因),以及文件路径找不到等问题,在百度检索下都找到了解决方法,后面如果想出可以改进的点还会不断改进的,后续的导入也会更新上来。加油!!!

java.lang.ClassCastException: com.hsit.mobileportal.entity.vo.OfficeTypeCont
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP网页添加Excel导入导出功能的实现方法如下: 首先,我们需要引入Apache POI库。Apache POI库是一组用于处理Microsoft文件格式的Java API,包括Excel文件格式。你可以在Maven或Gradle配置文件中添加POI库的依赖项。 一旦你引入了POI库,你可以在JSP页面中使用Java代码来实现Excel导入导出功能。 要实现导出功能,你可以创建一个方法来生成Excel文件。首先,创建一个Workbook对象,例如HSSFWorkbook(针对.xls文件)或XSSFWorkbook(针对.xlsx文件)。然后,创建一个Sheet对象,并在该对象中创建行和单元格,并设置所需的值。最后,将Workbook对象写入输出流。 要实现导入功能,你可以在JSP页面中创建一个表单,用户可以选择要导入Excel文件。一旦用户选择了文件并提交了表单,你可以在JSP页面的Java代码中处理上传的文件。你可以使用POI库中的工具类来解析Excel文件,并逐行读取数据。然后,你可以通过编写代码将数据插入到数据库中,或者通过输出到JSP页面显示数据。 需要注意的是,Excel文件的格式可能会受到各种复杂因素的影响。你可能需要处理各种数据类型、日期格式,以及Excel文件的各个工作表和命名区域。 此外,为了增强用户体验,你可以添加一些验证和错误处理的逻辑。例如,当用户导入导出时,你可以检查文件类型和大小,以确保其符合要求。你还可以根据需要添加其他功能,例如将Excel文件作为模板下载或在导入时执行数据验证。 总之,通过引入Apache POI库并编写Java代码,你可以实现JSP网页的Excel导入导出功能。这将使用户能够将数据轻松地从Excel文件导入到网页中,或者将数据从网页导出Excel文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值