excel数据导入到java(二)

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/08/excel-shu-ju-dao-ru.html

介绍

excel-converter 是一个将java对象的list与excel数据相互转化的项目,可以把Excel中的数据导入java的系统中,以及把系统业务数据导出为Excel表格。

excel-converter-starter 是直接用在 springboot 项目中的 excel导入导出的项目,项目添加这个依赖之后,可以用一行代码实现 excel 在 java 系统中的导入导出。

应用场景

  1. 某系统上线初期,需要批量导入用户以及一些基础数据;
  2. 用户在某系统逐个填写业务信息太慢,要求开发一个从excel导入的功能;
  3. 用户需要将系统的业务信息导出成excel进行打印或作为附件发送给其他人。

加入依赖

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

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

导入步骤:

  1. 将java对象的属性名称(字段名 nameRow)写在Excel数据的第二(index为 1)行;
  2. 调用如下一行代码,即可准确导入为java对象的list。
// 将企业人员汇总表中的数据导入为 Person 类型的 List
List<Person> peo = exImporter.convert("./企业人员汇总表.xlsx", Person.class);
excel数据导入到java(二)插图
第二行为nameRow,对应右边java实体的属性

导出步骤:

  1. 若无额外配置,可按照java对象的属性将一个 list 导出为 excel;
  2. 若配置了属性对应的表头,即可在 excel 中显示表头信息。
 // 将 personList 导出到 excel 表格
 exExporter.export(personList, "./export.xlsx");
excel数据导入到java(二)插图(1)
第二行为额外配置的表头信息,第一行的nameRow也可以配置不显示

如果不使用默认的配置属性,也可以自定义,详细配置属性可以参考 上一篇文章 中的两个表格。

配置方法在下面介绍了 application.yml 中的配置, application.properties 的配置类似。

java一行代码调用方式在本文末尾介绍了,有多种调用方式。

使用示例(springboot 中)

1 导入依赖

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

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

2 使用步骤

1. 将ExImporter或ExExporter注入使用即可

@RestController
public class DemoExcelConvertController {

    @Autowired
    private ExImporter exImporter;
    @Autowired
    private ExExporter exExporter;

    @GetMapping("test")
    public List<Person> person() {
        // 1. 将excel表格的数据导入java
        List<Person> peo = exImporter.convert("./企业人员汇总表.xlsx", Person.class);
        System.out.println(peo);
        return peo;
    }

    @GetMapping("test3")
    public void test3(HttpServletResponse response) throws IOException {
        // 1. 构造java数据
        Company c = new Company();
        c.setAddress("address");
        c.setAmount(0.1245D);
        c.setDate(new Date());
        c.setMoney(0.23123);
        c.setName("yawn");
        c.setId(12);
        // 2. 将java数据导出为excel表格
        exExporter.export(Arrays.asList(c, c, c), "./export.xlsx");
        // 3. 将java数据导出为excel表格并下载
        response.addHeader("Content-Disposition", "attachment;filename=export.xlsx");
        exExporter.export(Arrays.asList(c, c, c), response.getOutputStream());
    }
}

2. 如需要设置导入或导出的属性,可在application.yml文件中配置,如下:

excel:
  converter:
    props-map:
      default:
        name-row-index: 0
        comment-row-index: 1
        first-data-row-index: 2
        name-header-map:
          id: ID
          name: 名称
          address: 地址
          date: 日期
        show-name-row: true
        date-pattern: yyyy-MM-dd hh:mm:ss
      company:
        sheet-index: 1
        name-row-index: 1
        comment-row-index: 0
        first-data-row-index: 2
        last-data-row-index: -1
        data-row-num: -1
        start-column-index: 0

此配置中包含了两个属性实例,名称分别为 default 和 company, 导入或导出时若想使用某个配置实例,只需要将名称传入调用方法的 propsName 参数即可。若不传这个参数,则默认为 default。

以上配置代码重写了”default”配置,并添加了新的配置”company”,使用这两个配置的属性进行导入或导出时,示例如下:

@RestController
public class DemoExcelConvertController {

    @Autowired
    private ExImporter exImporter;
    @Autowired
    private ExExporter exExporter;

    @GetMapping("test2")
    public List<Company> test2() {
        // 根据company配置导出到excel
        List<Company> companyList = exImporter.convert("./企业人员汇总表.xlsx", "company", Company.class);
        System.out.println(companyList);
        return companyList;
    }

    @GetMapping("test4")
    public void test3(HttpServletResponse response) throws IOException {
        Company c = new Company();
        c.setAddress("address");
        c.setAmount(0.1245D);
        c.setDate(new Date());
        c.setMoney(0.23123);
        c.setName("yawn");
        c.setId(12);
        // 根据重写的default配置导出
        exExporter.export(Arrays.asList(c, c, c), "./export.xlsx");
        response.addHeader("Content-Disposition","attachment;filename=export.xlsx");
        exExporter.export(Arrays.asList(c, c, c), response.getOutputStream(), "company");
    }
}    

3. ExImporter导入调用的方法有:

public <T> List<T> convert(String filePath, String propsName, Class<T> tClazz);

public <T> List<T> convert(File file, String propsName, Class<T> tClazz);

public <T> List<T> convert(InputStream is, String propsName, Class<T> tClazz);

public <T> List<T> convert(String filePath, Class<T> tClazz);

public <T> List<T> convert(File file, Class<T> tClazz);

public <T> List<T> convert(InputStream is, Class<T> tClazz);

其中propsName为要使用的yml文件中配置的转换属性的名称

4.ExExporter导出调用的方法有:

public <T> void export(List<T> beanList, String pathFile);

public <T> void export(List<T> beanList, File file);

public <T> void export(List<T> beanList, OutputStream os);

public <T> void export(List<T> beanList, String pathFile, String propsName);

public <T> void export(List<T> beanList, File file, String propsName);

public <T> void export(List<T> beanList, OutputStream os, String propsName);

注意: 上述方法并不能导出Map,若需要导出Map类型的List,需要使用exportMapList()方法,参数和调用方法与上面的类似。

《excel数据导入到java(二)》有7个修正笔记:

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

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

发表评论