本文所属【知识林】:http://www.zslin.com/web/article/detail/29

在上一篇文章《Springboot 之 POI导出Word文件》中讲述了使用POI对Word的导出操作,这一篇将继续讲述POI的其他使用:对Excel表格的读写操作。

  • 准备Excel源文件

这里简单准备了一个Excel表格,将此文件命名为:web-info.xls,放到resources目录下,内容如下图:

POI读取Excel文件的源文件内容

  • 读取文件标题
//读取单个单元格
@Test
public void testRead() throws Exception {
    //Excel文件
    HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(ResourceUtils.getFile("classpath:web-info.xls")));
    //Excel工作表
    HSSFSheet sheet = wb.getSheetAt(0);

    //表头那一行
    HSSFRow titleRow = sheet.getRow(0);

    //表头那个单元格
    HSSFCell titleCell = titleRow.getCell(0);

    String title = titleCell.getStringCellValue();

    System.out.println("标题是:"+title);
}

执行测试后将得到:标题是:网站信息管理

  • 将数据项读取到List中

准备一个DTO文件方便创建对象和输出内容

public class WebDto {

    //网站名称
    private String name;

    //网址
    private String url;

    //用户名
    private String username;

    //密码
    private String password;

    //日均访问量
    private Integer readCount;

    public WebDto(String name, String url, String username, String password, Integer readCount) {
        this.name = name;
        this.url = url;
        this.username = username;
        this.password = password;
        this.readCount = readCount;
    }

    public WebDto() {}

    @Override
    public String toString() {
        return "WebDto{" +
                "name='" + name + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", readCount=" + readCount +
                '}';
    }
}

具体的测试方法:

//读取到列表
@Test
public void testReadList() throws Exception {
    List<WebDto> list = new ArrayList<WebDto>();

    HSSFWorkbook book = new HSSFWorkbook(new FileInputStream(ResourceUtils.getFile("classpath:web-info.xls")));

    HSSFSheet sheet = book.getSheetAt(0);

    for(int i=2; i<sheet.getLastRowNum()+1; i++) {
        HSSFRow row = sheet.getRow(i);
        String name = row.getCell(0).getStringCellValue(); //名称
        String url = row.getCell(1).getStringCellValue(); //url
        String username = row.getCell(2).getStringCellValue();
        String password = row.getCell(3).getStringCellValue();
        Integer readCount = (int) row.getCell(4).getNumericCellValue();

        list.add(new WebDto(name, url, username, password, readCount));
    }

    System.out.println("共有 " + list.size() + " 条数据:");
    for(WebDto wd : list) {
        System.out.println(wd);
    }
}

执行测试方法后将得到:

共有 2 条数据:
WebDto{name='知识林', url='http://www.zslin.com', username='admin', password='111111', readCount=500}
WebDto{name='用户管理', url='http://basic.zslin.com/admin', username='admin', password='111111', readCount=123}

示例代码:https://github.com/zsl131/spring-boot-test/tree/master/study15

本文所属【知识林】:http://www.zslin.com/web/article/detail/29
文章点评共:4 条
点评内容: 提交点评

07-10 点评:代码不能运行只能做参考

08-01 回复:所有代码都是经过测试才放到网上的,这个POI估计跟Excel的版本有一定的关系

07-09 点评:The supplied data appears to be in the Office 2007+ XML. 我的也是这个错误,好像是不支持xlsx ..........

07-09 点评:下注册

01-10 点评:貌似有版本问题哦org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

01-15 回复:没有遇到这个问题,我测试一切正常~