码迷,mamicode.com
首页 > 编程语言 > 详细

Java-读取Excel

时间:2020-05-21 14:49:51      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:lte   public   physical   输入   lis   arm   路径   string   http   

1、需要在pom.xml中配置需要使用的包:org.apache.poi

    <!--poi-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.10-FINAL</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.10-FINAL</version>
    </dependency>
    <!--poi-end-->

2、配置完成后,点击Maven-install,Maven会自动下载包

技术图片

3、创建一个java类:ExcelUtil

package excelDemo;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.*;
import java.util.*;

public class ExcelUtil {

    public static Map<String, List<String>> getExcel(String filePath, String sheetName) {
        Map<String, List<String>> dataList = new HashMap<>();//用来存放从Excel中读取的数据
        Workbook wb = null;
        try {
            InputStream is = new FileInputStream(filePath);//打开Excel文件
            wb = WorkbookFactory.create(is);//创建一个Workbook对象
            is.close();//关闭输入流
            if (wb != null) {
                Sheet sheet = wb.getSheet(sheetName);//根据sheet页的名字来获取sheet对象
                //Sheet sheet = wb.getSheetAt(0);//获取下标为0的sheet页
                //int rows = sheet.getLastRowNum();//获取的是最后一行的编号(编号从0开始)。
                int maxRownum = sheet.getPhysicalNumberOfRows();//获取的是物理行数,也就是不包括那些空行(隔行)的情况。
                Row firstRow = sheet.getRow(0);//获取第一行的row对象
                int maxColnum = firstRow.getPhysicalNumberOfCells();//获取第一行的最大列的下标
                //System.out.println(maxColnum);
                for (int i=0;i<maxRownum;i++){//循环行
                    List<String> list = new ArrayList<>();//创建一个list用来存放每一行的值
                    String firstColumns = sheet.getRow(i).getCell(0).toString();//获取每一行的第一列的值,用来做map的Key
                    String estr ="";//用来存放单元格的值
                    for (int j=0;j<maxColnum;j++){//循环列
                        if (sheet.getRow(i).getCell(j) != null) {//判断单元格是否为空
                            estr = sheet.getRow(i).getCell(j).toString();//取出这个单元格的值
                        }else {
                            estr="";
                        }
                        //System.out.println(firstColumns+"---"+estr);
                        list.add(estr);//把单元格的值放到list里
                    }
                    dataList.put(firstColumns,list);//把list存放到map里
                }
                //System.out.println(dataList);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return dataList;//返回map
    }
}

Excel中的数据

技术图片

4、写一个ExcelTest类来测试

package excelDemo;

import java.util.List;
import java.util.Map;

public class ExcelTest {
    public static void main(String[] args) {
        ExcelUtil excelUtil = new ExcelUtil();//创建ExcelUtil类的对象
        String filePath = "/Users/renli/PycharmProjects/untitled/testFile/SendCredit.xlsx";//Excel存放的路径(我的电脑是macbook所以没有盘符)
        String sheetName = "Sheet1";//需要获取的sheetName
        Map<String, List<String>> rows = ExcelUtil.getExcel(filePath,sheetName);//调用getExcel方法,获取到一个Map<String, List<String>>
        //System.out.println(rows);
        //System.out.println(rows.size());

        for(String key:rows.keySet()){//取出Map中所有的Key的值,遍历
            System.out.println(key+"---->"+rows.get(key));
            List<String> list = rows.get(key);//取出Map中Key为key的value的值,赋值给一个list
            for (int i=0;i<list.size();i++){//循环遍历list
                //list.get(i)根据下标获取值
                System.out.println("测试编码为 "+key+ " 的第 " +(i+1)+" 个值:"+ list.get(i).toString());    
            }
        }
    }
}

执行结果

技术图片

 

Java-读取Excel

标签:lte   public   physical   输入   lis   arm   路径   string   http   

原文地址:https://www.cnblogs.com/lilyo/p/12930469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!