Skip to content

二、数据导入

wujiuye edited this page May 15, 2020 · 2 revisions

数据导入分两个步骤:

  1. 创建读取器;
  2. 创建读取监听器;
  3. 调用读取器的read方法传入读取监听器,开始读取数据;

注解方式读

使用@ExcelCellTitle注解将bean的字段与表格的列映射,即可使用注解读取监听器AnnotationExcelReaderListener读取数据;

第一步:创建读取器

  • 从文件中读取
AbstractExcelReader excelReader = AbstractExcelReader.getReader("/tmp/miniexcel-test.xlsx", true);

从文件中读取不需要指定格式,会根据文件的后缀名创建相应的读取器。注意,文件后缀名必须与文件格式相符,否则无法创建读取器而抛出异常。 第二个参数是指定是否需要读取列标题,就是把第一行当作列标题,如果传入false,则第一行会被当作是数据行。建议传true就可以了,除非表格确实没有标题行,这种情况需要使用自定义读取监听器读取。miniexcel提供的读取器不支持读取没有标题行的表格,因为需要根据标题获取java对象的字段,通过反射为bean赋值。

  • 从输入流中读取
// System.in也是InputStream,这里只是举例,这种方式的读取用于web项目中
// 读取xlsx文件:ExcelFileType.XLSX
// 读取xls文件: ExcelFileType.xls
// 读取csv文件:ExcelFileType.csv
AbstractExcelReader excelReader = AbstractExcelReader.getReader(System.in, ExcelFileType.XLS, true);

从输入流中读取需要指定文件格式。

第二步:创建注解读取监听器

AnnotationExcelReaderListener<DateModel> readerListener = new AnnotationExcelReaderListener<>(DateModel.class);

第三步:读取数据,获取结果

完成demo如下:

    @Test
    public void testImportByIn() {
        AbstractExcelReader excelReader = AbstractExcelReader.getReader(inputStream, ExcelFileType.XLS, true);
        AnnotationExcelReaderListener<DateModel> readerListener = new AnnotationExcelReaderListener<>(DateModel.class);
        excelReader.read(readerListener);
        List<DateModel> dateModelList = readerListener.getRecords();
        // 打印结果
        for (DateModel model : dateModelList) {
            System.out.println(model);
        }
    }