美文网首页
JAVA读取Excel数据

JAVA读取Excel数据

作者: ___shin | 来源:发表于2017-09-23 16:55 被阅读0次

    思路:

    1. 先用inputstream获取excel文件的io流

    2. 然后创建一个内存中的excel文件XSSFWorkbook类型对象.这个对象表示了整个excel文件.

    3. 对这个excel文件的每页做循环处理

    4. 对每页中的每行做循环处理.

    5. 对每行中的每个单元格做处理,获取这个单元格的值.

    6. 把这行的结果添加到一个List数组中.

    7. 把每行的结果添加到最后的总结果中.

    8. 解析完以后就获取了一个ArrayList<LinkedHashMap<String,String>>类型的对象了.

    具体代码:

    
    import org.apache.poi.ss.usermodel.Cell;
    
    import org.apache.poi.ss.usermodel.DateUtil;
    
    import org.apache.poi.ss.usermodel.Row;
    
    import org.apache.poi.xssf.usermodel.XSSFCell;
    
    import org.apache.poi.xssf.usermodel.XSSFRow;
    
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.FileInputStream;
    
    import java.io.InputStream;
    
    import java.text.SimpleDateFormat;
    
    import java.util.ArrayList;
    
    import java.util.Date;
    
    import java.util.LinkedHashMap;
    
    /**
    
    * Created by shin on 2017/9/20.
    
    */
    
    public classReadExcel {
    
    //读取Excel数据返回一个数组列表,每个成员是一个HashMap
    
    publicArrayList> data (String path)throwsException {
    
    //读入Excel文件
    
    InputStream in =newFileInputStream(path);
    
    //创建结果列表
    
    ArrayList> list=newArrayList<>();
    
    //读取数据
    
    try{
    
    //新建一个Excel工作簿对象
    
    XSSFWorkbook wb =newXSSFWorkbook(in);
    
    //循环每一个sheet
    
    for(XSSFSheet sheet : wb) {
    
    //如果sheet为空则跳过
    
    if(sheet ==null)
    
    continue;
    
    //读取第一行作为key值
    
    Row firstRow = sheet.getRow(0);
    
    //得到第一行单元格个数
    
    intcellNum = firstRow.getLastCellNum();
    
    //创建一个String数组用来保存key值
    
    String[] cellNames =newString[cellNum];
    
    //将key值写入数组
    
    for(inti =0; i < cellNum; i++) {
    
    cellNames[i] = firstRow.getCell(i).getStringCellValue();
    
    }
    
    //循环每一行
    
    for(introwNum =1; rowNum < sheet.getPhysicalNumberOfRows(); rowNum++) {
    
    //新建一个resultHashMap用来保存每一行的结果
    
    LinkedHashMap result =newLinkedHashMap<>();
    
    //获取每一行
    
    XSSFRow row = sheet.getRow(rowNum);
    
    //获取每一行中的单元格
    
    for(inti =0; i < cellNum; i++) {
    
    //新建cell对象用来获取单元格内容
    
    Cell cell = row.getCell(i);
    
    String val ="";
    
    //获取单元格内容
    
    if(null!= cell) {
    
    switch(cell.getCellType()) {
    
    caseXSSFCell.CELL_TYPE_NUMERIC:
    
    //日期格式转换
    
    if(DateUtil.isCellDateFormatted(cell)) {
    
    Date date = cell.getDateCellValue();
    
    SimpleDateFormat format =newSimpleDateFormat("YYYY-MM-DD");
    
    val = format.format(date).toString();
    
    }else
    
    val = cell.getNumericCellValue() +"";
    
    break;
    
    caseXSSFCell.CELL_TYPE_BOOLEAN:
    
    val = cell.getBooleanCellValue() +"";
    
    break;
    
    caseXSSFCell.CELL_TYPE_BLANK:
    
    val ="";
    
    break;
    
    caseXSSFCell.CELL_TYPE_STRING:
    
    val = cell.getStringCellValue();
    
    break;
    
    }
    
    }
    
    //将每一行的值放入Map中
    
    result.put(cellNames[i], val);
    
    }
    
    //将每一行的值放入list中
    
    list.add(result);
    
    }
    
    }
    
    }
    
    catch(Exception e){
    
    e.printStackTrace();
    
    }
    
    returnlist;
    
    }
    
    }
    
    

    相关文章

      网友评论

          本文标题:JAVA读取Excel数据

          本文链接:https://www.haomeiwen.com/subject/ymicextx.html