使用easypoi动态生成带下拉框的单元格

本文介绍了如何使用easypoi动态生成带下拉框的Excel单元格。主要步骤包括从数据库获取数据,生成下拉框内容,然后利用easypoi工具进行导出。文章提供了前端请求入口、下拉框工具类和DTO定义等关键代码示例。
摘要由CSDN通过智能技术生成

使用easypoi动态生成带下拉框单元格

项目背景

	最近在做公司一个项目,其中有个功能是库存盘点。大致流程是:创建盘点计划--> 激活盘点计划 --> 实盘录入 --> 差异确认(或生成复盘计划) --> 同步盘点数据至库存中心 --> 盘点完成。
	其中在实盘录入环节,由于物料数量较多,需求要求可以将待盘点物料导出excel,处理完了之后再将excel数据导入到盘点表中。物料存在不同的盘点单位,如:箱(KAR)、公斤(KG)....等,这样盘点人员在excel上操作时必须限定其盘点的单位是存在的。这样就要求我们在导出excel的时候,将盘点单位单元格生成下拉框数据,而且下拉的数据内容可能会不同(单位数据存储在商品中心:基本单位、运输单位、存储单位等)。

实现效果

在这里插入图片描述
在这里插入图片描述
可以看到不同的物料生成的下拉框数据是不同的

代码截图

大致步骤:
1.查询数据库获取要导出的数据,并按照easypoi规范生成具体dto对象(使用过easypoi的应该都知道)
2.根据查询的数据生成对应的下拉框数据(重点说下这个)
3.执行导出(使用easypoi的util工具)

1.前端请求入口
在这里插入图片描述
下拉框创建工具类
通用DTO定义
在这里插入图片描述
根据查询的数据动态生成下拉内容

在这里插入图片描述
在这里插入图片描述
将创建的下拉框数据对象植入到workbook中
在这里插入图片描述
导出前执行上面的操作
在这里插入图片描述
该篇文章着重介绍的是怎么动态生成下拉框,easypoi的使用方法比较简单,网上教学的文章也很多,本篇不做说明,如果看不明白的可以先学会easypoi的使用,再来对着看会比较简单。

代码实现

1.前端调用入口代码

@ApiOperation("实盘单导出")
    @RequestMapping(value = "/v1/export/{orderNo}", method = RequestMethod.GET)
    public void export(HttpServletResponse response, @PathVariable("orderNo") String orderNo) {
   
        try {
   
            // 要导出的数据
            List<CheckOrderExcelDTO> dataList = checkOrderFacade.getCheckOrderExcelData(orderNo);
            String title = "盘点单明细(库存状态:非限制、待质检、冻结)";
            String sheetName = "盘点单明细";
            String fileName = sheetName + DateUtils.getCurrentDay(null) + ExcelUtil.XLS;

            // 表格下拉框信息
            List<ExcelSelectortDTO> selectors = checkOrderFacade.getExcelSelectorData(dataList);

            // excel导出(带单位下拉框)
            ExcelUtil.exportExcel(dataList, selectors,  title, sheetName, CheckOrderExcelDTO.class, fileName, response);

        } catch (Exception e) {
   
            log.error("实盘单导出异常:", e);
            throw new RomeException(ResponseMsg.FAIL.getCode(), "盘点单导出失败");
        }
    }

2.查询导出数据的代码(可以写死数据)

调用service,查询数据库得到要导出的数据list
将list中的数据转成:List<CheckOrderExcelDTO> dataList
// CheckOrderExcelDTO对象
@Data
public class CheckOrderExcelDTO extends BaseImportDTO {
   

    @Excel(name = "盘点单号", orderNum ="0", width = 20)
    private String orderNo;

    @NotBlank(message = "物料编码为空")
    @Excel(name = "物料编码", orderNum ="1", width = 15)
    private String skuCode;

    @Excel(name = "物料名称", orderNum ="2", width = 25, isWrap = false)
    private String skuName;

    @Excel(name = "基本单位", or
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值