Java: Excel导入导出
2021/12/25 22:07:27
本文主要是介绍Java: Excel导入导出,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【相关文档】:EasyPoi教程
1. 依赖
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.4.0</version> </dependency>
2. 常用注解
@ExcelTarget("xxx") public class TestPo { @Excel(name = "excel中的列名", needMerge = true, dict = "dictName", orderNum = "-3",width = 20) private String name; @ExcelCollection(name = "子列表") private List<ChildPo> list; }
- ExcelTarget: 用于标记实体对象
- name: 该字段在excel中的列名
- orderNum: 列的顺序根据该属性的值进行确定,值越小,该列越靠前
- width: 列的宽度
- dict: 字典项,若字段为字典类型,且需要在字典名称和字典值做转换, 需要实现 IExcelDictHandler 接口,并在导入导出时设置该参数
- ExcelCollection: 标识该字段为集合属性
- needMerge: 若包含集合属性的字段时, 该列是否需要进行纵向合并
3.示例
1. 实体类及控制层
@RequestMapping("excel") @RestController public class ExcelController { @Resource private MyExcelUtil excelUtil; @GetMapping("export") public void export(HttpServletResponse response) { MyClass myClass1 = new MyClass("一版","jingying"); MyClass myClass2 = new MyClass("六班","putong"); List<MyClass> childList = new ArrayList<>(); childList.add(myClass1); childList.add(myClass2); List<MySchool> list = new ArrayList<>(); list.add(new MySchool("凤翔中学","emphasis",childList)); list.add(new MySchool("柳林中学","general",childList)); excelUtil.exportExcel(response,"测试标题","花名册", MySchool.class,list); } } @Data @AllArgsConstructor public class MySchool { @Excel(name = "学校名称", needMerge = true, orderNum = "1", width = 10 ) private String name; @Excel(name = "学校类型", needMerge = true, dict = "school_type", orderNum = "2", width = 10 ) private String type; @ExcelCollection(name = "班级列表", orderNum = "3") private List<MyClass> list; } @Data @AllArgsConstructor public class MyClass { @Excel(name = "班级名称", orderNum = "1", width = 10) private String name; @Excel(name = "班级类型", dict = "class_type",orderNum = "2", width = 10) private String type; }
2. DictHandler
@Component public class DictHandler implements IExcelDictHandler { public Map<String, Map<String, String>> dictMap = new ConcurrentHashMap<>(); { Map<String, String> dictLength = new ConcurrentHashMap<>(); dictLength.put("重点学校", "emphasis"); dictLength.put("普通学校", "general"); dictMap.put("school_type", dictLength); Map<String, String> dictSize = new ConcurrentHashMap<>(); dictSize.put("精英班", "jingying"); dictSize.put("普通班", "putong"); dictMap.put("class_type", dictSize); } /** * 从值翻译到名称 * * @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(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; } }
3. 导出Excel
@Component public class MyExcelUtil { @Resource private DictHandler dictHandler; public void exportExcel(HttpServletResponse response, String title, String sheetName, Class clazz, List<? extends Object> list) { try { ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF); exportParams.setCreateHeadRows(true); exportParams.setDictHandler(dictHandler); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, list); OutputStream out = response.getOutputStream(); response.setCharacterEncoding(StandardCharsets.UTF_8.name()); response.setHeader("content-type", "application/vnd.ms-excel"); response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(sheetName + "." + "xlsx", StandardCharsets.UTF_8.name())); workbook.write(out); out.close(); } catch (IOException e) { e.printStackTrace(); } } }
4. 导出效果
这篇关于Java: Excel导入导出的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南