EasyPoi模板导出字典转换,dict:指令

前言

项目中遇到一个模板导出excel需要根据值进行字典转码的问题,尝试使用三目运算符无果后,在EasyPoi文档里发现有一项**dict:**指令,虽然下方有相关指令讲解,但是还是无法第一时间明白如何使用,查询前辈的博客后找到了一些现成代码,加以修改后就可以直接使用了。

示例

  1. 字典处理类
import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
import com.google.common.collect.ImmutableMap;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 导出excel字典转换处理类
 */
@Component
public class DictHandler implements IExcelDictHandler {

    public Map<String, Map<String, String>> dictMap = new ImmutableMap.Builder<String, Map<String, String>>()
            .put("GENDER",ImmutableMap.of("男","1","女","2"))
            .put("JOB",ImmutableMap.of("工人","1","收银员","2","司机","3"))
            .build();

    /**
     * 从值翻译到名称
     *
     * @param dict  字典Key
     * @param obj   对象
     * @param name  属性名称
     * @param value 属性值
     * @return
     */
    @Override
    public String toName(String dict, Object obj, String name, Object value) {
        Map<String, String> map = dictMap.get(dict);
        for (String key : map.keySet()) {
            if (map.get(key).equals(String.valueOf(value))) {
                return key;
            }
        }
        return null;
    }

    /**
     * 从名称翻译到值
     *
     * @param dict  字典Key
     * @param obj   对象
     * @param name  属性名称
     * @param value 属性值
     * @return
     */
    @Override
    public String toValue(String dict, Object obj, String name, Object value) {
        Map<String, String> map = dictMap.get(dict);
        for (String key : map.keySet()) {
            if (key.equals(name)) {
                return map.get(name);
            }
        }
        return null;
    }
}

其中用到了ImmutableMap,在声明不变的map时我比较喜欢使用它,这里也算安利一下,下面是它的依赖。如果不想用的话用静态代码块初始化map或者通过调用方法动态赋值也都是可以的。

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>22.0</version>
</dependency>
  1. 导出excel控制层
import cn.afterturn.easypoi.entity.vo.TemplateExcelConstants;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.view.PoiBaseView;
import cn.com.lixiaochen.handler.DictHandler;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/people")
public class PeopleController {

	@Resource
	DictHandler dictHandler;

	@GetMapping("/export")
	public void exportPWorkRpt(ModelMap modelMap, @RequestParam Map<String, Object> params,
							   HttpServletRequest request, HttpServletResponse response) {
		// 导出数据
		List<Map<String,Object>> dataList = Arrays.asList(
				new HashMap<String, Object>(){{
					put("name","张三");
					put("sex","1");
					put("job","1");
				}},
				new HashMap<String, Object>(){{
					put("name","李四");
					put("sex","2");
					put("job","2");
				}},
				new HashMap<String, Object>(){{
					put("name","王五");
					put("sex","1");
					put("job","3");
				}}
		);
		Map<String,Object> exportMap = new HashMap<String, Object>(){{
			put("data",dataList);
		}};
		modelMap.put(TemplateExcelConstants.FILE_NAME, "人员表");
		TemplateExportParams templateExportParams = new TemplateExportParams("easypoi/people.xlsx");
		// 设置字典处理类
		templateExportParams.setDictHandler(dictHandler);
		modelMap.put(TemplateExcelConstants.PARAMS, templateExportParams);
		modelMap.put(TemplateExcelConstants.MAP_DATA, exportMap);
		PoiBaseView.render(modelMap, request, response, TemplateExcelConstants.EASYPOI_TEMPLATE_EXCEL_VIEW);
	}

}
  1. 设置excel模板
    在这里插入图片描述
    4.导出效果
    在这里插入图片描述

小结

这里主要整理的是excel模板+字典的导出,涉及到实体类的导出导入,还是参考下方链接中文档和博客吧。

EasyPoi文档-3.1 模板 指令介绍
参考博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值