【Java】真真真有用-Excel完美实现导入导出(有填雷)

@Excel注解如下:按需处理

属性类型用途示例
nameString定义Excel列的名称,用于Excel表头。@Excel(name = “学生姓名”)
widthdouble定义列宽度,单位为字符。@Excel(width = 20)
heightdouble定义行高,单位为磅。仅对导出有效。@Excel(height = 10)
orderNumString定义列的显示顺序。@Excel(orderNum = “1”)
needMergeboolean表示是否需要合并单元格。@Excel(needMerge = true)
mergeVerticalboolean表示是否纵向合并单元格。@Excel(mergeVertical = true)
mergeRelyint[]指定合并单元格时依赖的列,数组中的数字为列的索引。@Excel(mergeRely = {1})
isImportFieldString定义是否为导入字段,“true"或"false”。@Excel(isImportField = “true”)
isWrapboolean定义是否自动换行。@Excel(isWrap = true)
exportFormatString定义导出时的格式化模式,如日期格式。@Excel(exportFormat = “yyyy-MM-dd”)
importFormatString定义导入时的格式化模式。@Excel(importFormat = “yyyy-MM-dd”)
imageTypeint定义图片类型(如1表示从文件导入,2表示从数据库导入)。@Excel(imageType = 1)
suffixString定义文本后缀,如在文本后添加特定的后缀。@Excel(suffix = “%”)
typeint定义字段类型(如1表示文本,2表示图片)。@Excel(type = 1)
enumExportFieldString定义枚举导出时,调用枚举字段的哪个方法获取实际的值。@Excel(enumExportField = “getText”)
savePathString定义图片保存路径,仅对导入有效。@Excel(savePath = “/tmp”)
dateFormatString简化的日期格式设置,简化的exportFormat/importFormat。@Excel(dateFormat = “yyyy-MM-dd”)
use1904windowingboolean定义是否使用1904年日期窗口。@Excel(use1904windowing = true)
fixedIndexint指定Excel列的索引,从0开始,用于导入时准确匹配列位置。@Excel(fixedIndex = 0)
groupNameString用于分组导出/导入时定义的组名。@Excel(groupName = “group1”)
dictString用于指定数据字典,将数据转换为对应的文本值。@Excel(dict = “sex=1_男,2_女”)
replaceString[]定义要替换的值,用于导出时将字段值替换为指定的文本值。@Excel(replace = {“男_1”, “女_2”})
statisticsboolean定义是否进行统计,用于对数字字段进行求和统计。@Excel(statistics = true)

显示:平铺在这里插入图片描述

2.多对一(多个属性在一个对象中封装):@ExcelEntity

显示:嵌套

img

3.一对多:@ExcelCollection

显示:列表

5c0ab383f096e342c038a6fa21259ca4.png

!避雷:听话的孩子不会被恶心

!!!字段中有一对多(@ExcelCollection

)和一对一(@Excel)时候,一对一必须合并单元格!!!

否则如图:

在这里插入图片描述

!!!多对一时(@ExcelEntity)必须加字段,否则无法正常显示

代码如下:

@Data
public class ExportAchievement {
    /\*\*
 \* 主键ID
 \*/
    @TableId
    @Excel(name = "ID", width = 10, needMerge = true)
    private Long id;
    /\*\*
 \* 成果单位
 \*/
    @Excel(name = "成果单位", width = 30, needMerge = true)
    private String achievementUnit;
    /\*\*
 \* 成果名称
 \*/
    @Excel(name = "成果名称", width = 30, needMerge = true)
    private String achievementName;
    /\*\*
 \* 所属区域
 \*/
    @Excel(name = "所属区域", width = 30, needMerge = true)
    private String region;
    /\*\*
 \* 细分领域
 \*/
    @Excel(name = "细分领域", width = 30, needMerge = true)
    private String subArea;
    /\*\*
 \* 所属领域
 \*/
    @Excel(name = "所属领域", width = 30, needMerge = true)
    private String domain;
    /\*\*
 \* 成果形式
 \*/
    @Excel(name = "成果形式", width = 30, needMerge = true)
    private String form;
    /\*\*
 \* 转化内容
 \*/
    @Excel(name = "转化内容", width = 100, needMerge = true)
    private String transformationContent;
    /\*\*
 \* 成果负责人
 \*/
    @Excel(name = "成果负责人", width = 10, needMerge = true)
    private String leader;
    /\*\*
 \* 联系方式
 \*/
    @Excel(name = "联系方式", width = 30, needMerge = true)
    private String contact;
    /\*\*
 \* 联系人
 \*/
    @Excel(name = "联系人", width = 10, needMerge = true)
    private String contactName;
    /\*\*
 \* 第二联系方式
 \*/
    @Excel(name = "第二联系方式", width = 30, needMerge = true)
    private String secondContact;

    @ExcelCollection(name = "推荐需求")
    private List<ExportRecommendDict> recommendDictList;

}

@Data
public class ExportDemand {
    /\*\*
 \* 主键ID
 \*/
    @TableId
    @Excel(name = "ID", width = 10, needMerge = true, orderNum="0")
    private Long id;

    @ExcelEntity(name = "进企入校调研", show = true)
    private EnterpriseInfoEntity enterpriseInvestSchool;

    @ExcelEntity(name = "技术需求", show = true)
    private TechniqueDemandEntity techniqueDemand;

    @ExcelEntity(name = "技术人员需求", show = true)
    private TechPersonEntity techPersonEntity;

    @ExcelEntity(name = "服务需求", show = true)
    private ServiceDemandEntity serviceDemand;

    @ExcelEntity(name = "创新成果", show = true)
    private InnovationProductEntity innovationProduct;

    /\*\*
 \* 需求标题
 \*/
    @Excel(name = "需求标题", width = 10, needMerge = true,orderNum="6")
    private String demandTitle;

    /\*\*
 \* 领域指数JSON化
 \*/
    @TableField(exist = false)
    @Excel(name = "领域指数", width = 10, needMerge = true,orderNum="7")
    private String regionNumJson;

    @ExcelCollection(name = "推荐成果",orderNum="8")
    private List<ExportRecommendDict> recommendDictList;
}


4.service层

调用mapper基本方法进行数据库增删改查

@Override
public List<ExportDemand> getDemandlist() {
    //查询enterprise\_demand表
    List<EnterpriseDemandEntity> enterpriseDemands = enterpriseDemandDao.selectList(null);
    List<ExportDemand> exportDemands = new ArrayList<>();
    for (EnterpriseDemandEntity enterpriseDemand : enterpriseDemands) {
        ExportDemand exportDemand = new ExportDemand();

        // 设置主键ID和需求标题
        exportDemand.setId(enterpriseDemand.getId());

        EnterpriseInfoEntity enterpriseInfoEntity = enterpriseInfoDao.selectById(enterpriseDemand.getEnterpriseId());
        TechPersonEntity techPersonEntity = techPersonDao.selectById(enterpriseDemand.getTechPersonId());
        TechniqueDemandEntity techniqueDemandEntity = techniqueDemandDao.selectById(enterpriseDemand.getTechniqueDemandId());
        InnovationProductEntity innovationProductEntity = innovationProductDao.selectById(enterpriseDemand.getInnovationProductId());
        ServiceDemandEntity serviceDemandEntity = serviceDemandDao.selectById(enterpriseDemand.getServiceDemandId());

        exportDemand.setEnterpriseInvestSchool(enterpriseInfoEntity);
        exportDemand.setTechPersonEntity(techPersonEntity);
        exportDemand.setTechniqueDemand(techniqueDemandEntity);
        exportDemand.setInnovationProduct(innovationProductEntity);
        exportDemand.setServiceDemand(serviceDemandEntity);

         exportDemand.setRegionNumJson(Arrays.toString(enterpriseDemand.getRegionNumJson()));
        exportDemand.setDemandTitle(enterpriseDemand.getDemandTitle());
        exportDemand.setRecommendDictList(getExportAchievementByDemandId(exportDemand.getId()));
        // 然后将每个ExportDemand对象添加到列表中
        exportDemands.add(exportDemand);
    }

    return exportDemands;
}

5.controller层

/\*\*
 \* @param response
 \*/
@GetMapping(value = "/exportDemandList")
public void exportDemandList(HttpServletResponse response) {
    List<ExportDemand> list = collegeAppliedPropertyService.getDemandlist();
    // 使用工具类导出excel
    try {
        ExcelUtil.exportExcel(list, "需求", "需求", ExportDemand.class, "需求信息推荐表.xlsx", response);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

6.mind层

“选择就不要后悔,努力就不会害怕”
我一直相信你从来都不是笨小孩

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

e4e9.png)

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值