JAVA读取Excel数据

思路:

  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;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,864评论 6 13
  • 创建新工程 打开Eclipse新建一个工程 点下一步 输入名称 点完成 新建一个目录用来存在第三方库文件 选择目录...
    长新阅读 6,582评论 3 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,382评论 25 709
  • 是阳光穿透了我灵魂的衣裳被剥在地上还是我阻挡了阳光让我看到了另一个自己影子有时长,有时短有时在身前有时在身后我的一...
    竹无心a阅读 4,959评论 6 15
  • 2016-10-30 樊登读书会中山分会 今天一天的心思都飘飘渺渺老是不着地的感觉,想起了一个老朋友。 焚香沏茶,...
    樊登读书会中山分会阅读 1,605评论 0 1