java按模板导出excel(三)

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/08/java-an-mu-ban-dao.html

按模板导出 excel 的过程如下:

按模板导出excel步骤图示
按模板导出excel步骤图示
  1. 制作excel模板:模板中可以规定单元格的格式、字体等;
  2. 准备数据:数据对象的属性可以有:数值类、字符串、日期、对象、list;
  3. 配置:在application.yml中配置相关导出的属性和数据对应的单元格(也可以手动实例化一个 ExcelProperties 对象);
  4. 一行代码导出:调用ExTplExporter的export方法导出,最后生成如上图的结果。(截图为反面例子,导出的方法调用最好不要换行)

详细配置属性可以参考 上一篇文章 中的两个表格说明。

nameLocationMap 是一个用来确定数据在excel中位置的map,key为数据实体的属性名、value为期望数据在 excel 单元格中的位置。其中表示位置的 B2、D4 的字母不区分大小写。

实验功能:

如果导出的数据中有List集合类型,并且不能确定list的大小,而list后面的数据该怎样写位置呢?

java按模板导出excel(三)插图(1)

可以如图写 D+4,指与 list 的相对位置为 +4,此功能要求list属性的位置配置必须在此之前,并且一张表只允许一个list。

使用实例

springboot中使用

0.依赖导入

<dependency>
  <groupId>com.jvm123</groupId>
  <artifactId>excel-converter-stater</artifactId>
  <version>1.0</version>
</dependency>

可在中央仓库查询是否有最新版本: https://mvnrepository.com/artifact/com.jvm123

1.配置

excel:
  converter:
    props-map:
      grade:
        sheet-index: 0
        date-pattern: yyyy年MM月dd日
        name-location-map:
          name: B2
          address: B4
          age: D2
          date: D15
          gradeList:
            project: b8
            grade: c8
          totalGrade:
            project: B13
            grade: C13

sheet-index配置了需要导出到的sheet;name-location-map配置了属性与导出位置坐标的对应关系。

2.调用导出

@RestController
public class DemoExcelConvertController {

    @Autowired
    private ExTplExporter exTplExporter;   

    @GetMapping("test5")
    public void test5(HttpServletResponse response) throws IOException {
        Person person = createPerson();
        response.addHeader("Content-Disposition","attachment;filename=grade.xlsx");
        exTplExporter.export("成绩单模板.xlsx", person,
                response.getOutputStream(), "grade");
    }
}

非springboot环境使用

<dependency>
  <groupId>com.jvm123</groupId>
  <artifactId>excel-converter</artifactId>
  <version>1.0</version>
</dependency>

可在中央仓库查询是否有最新版本: https://mvnrepository.com/artifact/com.jvm123

  1. 实例化ExcelTplExporter对象
  2. 设置ExcelProperties
  3. 调用export方法即可按照模板导出excel文件
public class Test3 {

    public static void main(String[] args) throws FileNotFoundException {
        Person p = new Person();
        p.setAddress("广东广州黄浦区科技企业加速器开元大道");
        p.setAge("12");
        p.setName("柳成功");

        List<Map> gradeList = new ArrayList<>();
        Map<String, Object> yuwen = new HashMap<>();
        yuwen.put("project", "语文");
        yuwen.put("grade", "90");
        Map<String, Object> shuxue = new HashMap<>();
        shuxue.put("project", "数学");
        shuxue.put("grade", "100");
        gradeList.add(yuwen);
        gradeList.add(shuxue);
        p.setGradeList(gradeList);

        Map<String, Object> totalGrade = new HashMap<>();
        totalGrade.put("project", "总分");
        totalGrade.put("grade", "190");
        p.setTotalGrade(totalGrade);
           
        ExcelProperties properties = new ExcelProperties();
        LinkedHashMap<String, Object> nameLocationMap = new LinkedHashMap<>();
        nameLocationMap.put("name", "B2");
        nameLocationMap.put("age", "D2");
        nameLocationMap.put("address", "b4");
        LinkedHashMap<String, String> gradeMap = new LinkedHashMap<>();
        gradeMap.put("project", "b8");
        gradeMap.put("grade", "c8");
        nameLocationMap.put("gradeList", gradeMap);
        LinkedHashMap<String, String> totalGradeMap = new LinkedHashMap<>();
        totalGradeMap.put("project", "b13");
        totalGradeMap.put("grade", "c13");
        nameLocationMap.put("totalGrade", totalGradeMap);
        properties.setNameLocationMap(nameLocationMap);

        ExcelTplExporter tplExporter = new ExcelTplExporter();
        tplExporter.setProperties(properties);
        tplExporter.export("成绩单模板.xlsx", p, new FileOutputStream(p.getName() + "同学成绩单.xlsx"));
    }
}

《java按模板导出excel(三)》有1个修正笔记:

  1. PingbackExcel-converter:一行代码实现java中excel数据导入导出 – jvm123

发表评论