JAVA读取Excel数据

2017-09-23  本文已影响0人  ___shin

思路:

  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;

}

}

上一篇下一篇

猜你喜欢

热点阅读