java 中poi导入不确定表,读取数据

效果:


代码

package com.wangyun.util;



import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


/**
 * @ClassName:       excel导入工具类
 * @Description:    
 * @author:  wangyun
 * @date: 2018-3-20     上午10:27:52
 */
public class ImportExcelUtil {
    private Workbook wb;
    private Sheet sheet;
    private Row row;


    public ImportExcelUtil(String filepath) {
    if(filepath==null){
    return;
    }
    String ext = filepath.substring(filepath.lastIndexOf("."));//获取文件名后缀
    try {
InputStream is = new FileInputStream(filepath);
if(".xls".equals(ext)){//2003- 版本的excel
wb = new HSSFWorkbook(is);
}else if(".xlsx".equals(ext)){//2007+ 版本的excel
wb = new XSSFWorkbook(is);
}else{
wb=null;
}
} catch ( FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    }
    /**
     * 读取excel表头的内容
     * @return
     * @throws Exception
     */
    public String[] readExcelTitle() throws Exception{
    if(wb==null){
    throw new Exception("Workbook对象为空!");
    }
    sheet = wb.getSheetAt(0);
    row = sheet.getRow(0);
   
    // 标题总列数
    int colNum = row.getPhysicalNumberOfCells();
    System.out.println("colNum:" + colNum);
    String[] title = new String[colNum];
    for (int i = 0; i < colNum; i++) {
    // title[i] = getStringCellValue(row.getCell((short) i));
    row.getCell(i).setCellType(Cell.CELL_TYPE_STRING); 
    title[i] = row.getCell(i).getStringCellValue();
    }
    return title;
    }
    /**
     * 读取excel内容
     * @return
     * @throws Exception
     */
    public Map<Integer, Map<String,Object>> readExcelContent() throws Exception{
    if(wb==null){
    throw new Exception("Workbook对象为空!");
    }
    Map<Integer, Map<String,Object>> content = new HashMap<Integer, Map<String,Object>>();
    sheet = wb.getSheetAt(0);
    // 得到总行数
    int rowNum = sheet.getLastRowNum();
    row = sheet.getRow(0);
    int colNum = row.getPhysicalNumberOfCells();
    // 正文内容应该从第二行开始,第一行为表头的标题
    for (int i = 1; i <= rowNum; i++) {
    row = sheet.getRow(i);
    int j = 0;
    Map<String,Object> cellValue = new HashMap<String, Object>();
    while (j < colNum) {
    Object obj = getCellFormatValue(row.getCell(j));
    Object objStr=getCellFormatValue(sheet.getRow(0).getCell(j));
    //获取第一列的标题
    cellValue.put((String) objStr, obj);
    j++;
    }
    content.put(i, cellValue);
    }
    return content;
   
    }
    /**
     * 根据cell类型设置数据参数
     * @param cell
     * @return
     */
    private Object getCellFormatValue(Cell cell) {
    Object cellvalue = "";
    if (cell != null) {
    // 判断当前Cell的Type
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERIC
    case Cell.CELL_TYPE_FORMULA: {
    // 判断当前的cell是否为Date
    if (DateUtil.isCellDateFormatted(cell)) {
    // 如果是Date类型则,转化为Data格式
    // data格式是带时分秒的:2013-7-10 0:00:00
    // cellvalue = cell.getDateCellValue().toLocaleString();
    // data格式是不带带时分秒的:2013-7-10
    Date date = cell.getDateCellValue();
    cellvalue = date;
    } else {// 如果是纯数字


    // 取得当前Cell的数值
    cellvalue = String.valueOf(cell.getNumericCellValue());
    }
    break;
    }
    case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING
    // 取得当前的Cell字符串
    cellvalue = cell.getRichStringCellValue().getString();
    break;
    default:// 默认的Cell值
    cellvalue = "";
    }
    } else {
    cellvalue = "";
    }
    return cellvalue;
   
    }
    
    public static void main(String[] args) {
    String filepath = "C:\\Users\\wangyun\\Desktop\\县市数据2014.xls";
    ImportExcelUtil eu=new ImportExcelUtil(filepath);
    String[] title;
try {
title = eu.readExcelTitle();
/* System.out.println("获得Excel表格的标题:");
    for (String s : title) {
    System.out.print(s + " ");
    }*/

// 对读取Excel表格内容测试
Map<Integer, Map<String,Object>> map = eu.readExcelContent();
System.out.println("获得Excel表格的内容:");
for (int i = 0; i <= map.size(); i++) {
System.out.println(map.get(i));
}
} catch (FileNotFoundException e) {
System.out.println("未找到指定路径的文件!");
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}



    }


}

猜你喜欢

转载自blog.csdn.net/qq_37236241/article/details/79642052