文档章节

POI 利用反射导入导出任意Excel文件(第二篇读取)

奔跑的码农
 奔跑的码农
发布于 2017/05/07 15:03
字数 320
阅读 72
收藏 3

为了便于文件的导入,我们首先来修改一下注解类为以下形式:

/**
 * Created by WangShiXiang on 2017/5/3.
 * Excel生成的相关注解
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Excel {
    String name() default "";
    int columnIndex() default -1 ;
}

我们规定columnIndex为该属性的值与excel文件的哪一列对应,如果不注解为-1,即不读取该列的值,以下为我们的测试类。

public class Student {
    @Excel(name = "学号",columnIndex = 2)
    private String sno;
    @Excel(name = "姓名",columnIndex = 3)
    private String name;
    @Excel(name = "性别")
    private int sex;
    @Excel(name = "学院",columnIndex = 0)
    private String college;
    @Excel(name = "专业",columnIndex = 1)
    private String major;
    @Excel(name="年级",columnIndex = 1)
    private String grade;
}

其中sno 对应excel文件中列的索引为2,其他类似。

读取文件的方法:

 public static List readExcel(Class c, InputStream inputStream){
        List list=new ArrayList();
        try {
            Workbook workbook=new HSSFWorkbook(inputStream);
            for (int i=0;i<workbook.getNumberOfSheets();i++){
                Sheet sheet=workbook.getSheetAt(i);
                for (int r=0;r<sheet.getLastRowNum();r++){
                    Row row=sheet.getRow(r);
                    Object o=c.newInstance();
                    for (Field field:c.getDeclaredFields()){
                        field.setAccessible(true);
                       int cellnum= field.getAnnotation(Excel.class).columnIndex();
                       if (cellnum==-1) continue;
                       System.out.println(field.getType());
                        if (field.getType().equals(String.class)){
                            if (row==null) continue;
                            String value=row.getCell(cellnum).getStringCellValue();
                            field.set(o,value);
                        }else if (field.getType().equals(Integer.class)){
                            String value=row.getCell(cellnum).getStringCellValue();
                            field.set(o,Integer.parseInt(value));
                        }
                    }
                    if (row!=null)
                        list.add(o);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


        return list;
    }

测试结果如下:

表格

读取的数据

© 著作权归作者所有

奔跑的码农

奔跑的码农

粉丝 16
博文 33
码字总数 40544
作品 0
海淀
程序员
私信 提问
POI事件模式指北(三)- 读取Excel实战

POI事件模式指北(三)- 读取Excel实战 1、简介 这篇文章将介绍一个完整的利用POI事件模式读取Excel的实例,目的是贴近实际使用中的情况,并且考虑了细节的问题而不仅仅满足于实现简单功能。...

不科学计算
02/24
0
0
Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者...

MiniBu
2015/04/08
0
0
Apache POI操作Excel导出JAVABEAN对象方法

Apache POI操作Excel导出方法说明 Apache的POI组件是Java操作Microsoft Office办公套件的强大API,其中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel,因为Word和PowerPoin...

JAVA枪手
2014/05/08
0
0
Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者...

文文1
2015/12/02
914
0
ExcelUtil 1.5.5 发布,修复导出属性为空报空指针异常的 bug

ExcelUtil 1.5.5 已发布。 首先本次版本的发布要感谢@superYue ,感谢@superYue在使用工具的时候发现bug.好让我有机会修复。 相信随着大家的参与,ExcelUtil将越来越成熟,bug将越来越少,将...

素剑步青尘
2018/06/26
323
2

没有更多内容

加载失败,请刷新页面

加载更多

IDEA中package不能引入依赖的解决方法

在IDEA中, 使用maven打包。出现了package后没有将需要的依赖放入包中, 运行会抛出java.lang.NoClassDefFoundError的异常。 解决办法 在pom.xml中加入: <build> <plugins> ...

dreamness
17分钟前
2
0
IDEA模板

import com.google.common.collect.Lists;import java.util.List;/** * @author hll * @date 2019/5/26 - 13:12 */public class Demo { // 模板五 // prsf -- > ......

一只小青蛙
34分钟前
2
0
9.jackjson使用教程

1.导入相关jar <!-- 10.jackson --> <!--10.1 定义了底层的streaming API和实现了Json特性 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</art......

20190513
38分钟前
2
0
如何使用 rsync 备份 Linux 系统的一些介绍

备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问大家,在 ...

Linux就该这么学
58分钟前
3
0
以太坊私有链搭建

https://blog.csdn.net/Blockchain_lemon/article/details/80589123

Moks角木
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部