简单的java——springboot,导出文档与导入文档处理。单元格合并处理

效果图:

这里只解释control层的处理,到service层其实也就是存数据到数据库了,没什么好讲的

先解释导出的实体类,需要在要导出的实体类属性上加上@Excel注解,只有加了@Excel注解的属性才会导出

public class GhaKbTitle extends BaseEntity {
    /** 主键 */
    private Integer id_ ;
    /** 删除标志:0:未删除;1:已删除 */
    /** 版本号 */
    @NotBlank( message = "版本号不能为空!")
    private String versionCode ;
    /** 标题编码 */
    @Excel(name = "维度标题")
    @NotBlank(message = "标题编码不能为空!")
    private String titleCode ;
    /** 标题名称 */
    @Excel(name = "维度名称")
    @NotBlank(message = "标题名称不能为空!")
    private String titleName ;
}

导出:

    /**
     * 导出维度信息
     * @param versionCode
     * @return
     */
    @PreAuthorize(hasPermi = "ghakb:ghaKbTitle:basic")
    @PostMapping("/exportExtent")
    public AjaxResult exportExtent(@RequestParam("versionCode") String versionCode, HttpServletResponse response){
        try{
            //设置sheet名称
            String excelTitle = "政策维度_" + versionCode;
            GhaKbTitle ghaKbTitle = new GhaKbTitle();
            ghaKbTitle.setVersionCode(versionCode);
            ghaKbTitle.setParentId(0);
            //从数据库中获取要导出的数据
            List<GhaKbTitle> ghaKbTitles = ghaKbTitleService.selectTitleDropBox(ghaKbTitle);
            //导出的实体类属性
            KbExcelUtil<GhaKbTitle> util = new KbExcelUtil<>(GhaKbTitle.class);
            //利用KbExcelUtil工具类导出
            util.exportKbExcel(response, ghaKbTitles, excelTitle);
            return AjaxResult.success("导出维度信息成功!");
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error("导出维度信息异常!" ,ExceptionUtils.getMessage(e));
        }
    }

导入:

     /**
     * 导入维度
     * @param versionCode
     * @param file
     * @return
     */
    @PreAuthorize(hasPermi = "ghakb:ghaKbTitle:basic")
    @PostMapping("/importExtent")
    public AjaxResult importExtent(@RequestParam(value = "versionCode") String versionCode,@RequestParam(name = "file") MultipartFile file){
        try{
            String excelTitle = "政策维度_" + versionCode;
            String excel2007 = ".xls";
            String excel2010 = ".xlsx";
            List<String> requiredFields = new ArrayList<String>(){{
                add("维度标题");
                add("维度名称");
            }};
            String fileName = file.getOriginalFilename();
            if (!fileName.endsWith(excel2007) && !fileName.endsWith(excel2010)){
                return AjaxResult.error("上传文件类型错误!");
            }

            if (file.getSize() == 0){
                return AjaxResult.error("文件大小为0");
            }
            KbExcelUtil<GhaKbTitle> util = new KbExcelUtil(GhaKbTitle.class);
            List<GhaKbTitle> list = null;
            try{
                //检查文件不同的sheet的表头是否与模板表头相同
                util.checkKbExcel(excelTitle, file,requiredFields);
                //从文件中提取数据
                list= util.importKbExcel(excelTitle, file);
            }catch (Exception e){
                return AjaxResult.error(e.getMessage());
            }
            //检查数据是否符合规范
            //记录错误位置
            List<String> errorMsg = new ArrayList<>();
            for (int i = 0; i<list.size(); i++){
                GhaKbTitle ghaKbTitle = list.get(i);
                if (StringUtils.isEmpty(ghaKbTitle.getTitleCode())){
                    errorMsg.add(excelTitle + "表第" + (i+2) + "行”维度标题“内容不能为空!");
                }
                if (StringUtils.isEmpty(ghaKbTitle.getTitleName())){
                    errorMsg.add(excelTitle + "表第" + (i+2) + "行”维度名称“内容不能为空!");
                }
            }
            if (errorMsg.size() > 0){
                return AjaxResult.error(String.valueOf(errorMsg));
            }
            int affect = 0;
            affect = ghaKbTitleService.importExtent(list, versionCode);
            return affect > 0 ? AjaxResult.success("导出维度信息成功!") : AjaxResult.error("维度信息导出失败");
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error("维度信息导出失败!" ,ExceptionUtils.getMessage(e));
        }
    }

22.11.7新增内容,实体类@Excel注解新增内容,可合并单元格

public class GhaKbCatalogExportDTO {

    //维度标题
    @Excel(name = "维度标题", mergeByField = "dimensionTitle")
    private String dimensionTitle;

    //维度名称
    @Excel(name = "维度名称", mergeByField = "dimensionTitle")
    private String dimensionName;

    //章节标题
    @Excel(name = "章节标题", mergeByField = "sectionTitle")
    private String sectionTitle;

    //章节名称
    @Excel(name = "章节名称", mergeByField = "sectionTitle")
    private String sectionName;
}

解释:维度标题和维度名称是同一层单元格,所以是统一以维度标题的dimensionTitle标识。

效果图:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值