Excle导入

导入的核心代码是遍历表格中的单元格中的数据,存入Map集合中或者对象中然后在放入对象存入数据库中都可以,后面的业务逻辑层就可以自由发挥了

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
* Created by Liujh on 2017/1/9.
*/
public class ExcelImportUtil {
private POIFSFileSystem fs;
private HSSFWorkbook wb;
private HSSFSheet sheet;
private HSSFRow row;

/**
 * 读取Excel表格表头的内容
 * @param is
 * @return String 表头内容的数组
 */
public String[] readExcelTitle(InputStream is) {
    try {
        fs = new POIFSFileSystem(is);
        wb = new HSSFWorkbook(fs);
    } catch (IOException e) {
        e.printStackTrace();
    }
    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));
        title[i] = getCellFormatValue(row.getCell((short) i));
    }
    return title;
}

/**
 * 读取Excel数据内容
 * @param is
 * @return Map 包含单元格数据内容的Map对象
 */
public Map<Integer, String> readExcelContent(InputStream is) {
    Map<Integer, String> content = new HashMap<Integer, String>();
    String str = "";
    try {
        fs = new POIFSFileSystem(is);
        wb = new HSSFWorkbook(fs);
    } catch (IOException e) {
        e.printStackTrace();
    }
    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;
        while (j < colNum) {
            // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
            // 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
            // str += getStringCellValue(row.getCell((short) j)).trim() +
            // "-";
            str += getCellFormatValue(row.getCell((short) j)).trim() + "    ";
            j++;
        }
        content.put(i, str);
        str = "";
    }
    return content;
}

/**
 * 获取单元格数据内容为字符串类型的数据
 *
 * @param cell Excel单元格
 * @return String 单元格数据内容
 */
private String getStringCellValue(HSSFCell cell) {
    String strCell = "";
    switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            strCell = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            strCell = String.valueOf(cell.getNumericCellValue());
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            strCell = String.valueOf(cell.getBooleanCellValue());
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            strCell = "";
            break;
        default:
            strCell = "";
            break;
    }
    if (strCell.equals("") || strCell == null) {
        return "";
    }
    if (cell == null) {
        return "";
    }
    return strCell;
}

/**
 * 获取单元格数据内容为日期类型的数据
 *
 * @param cell
 *            Excel单元格
 * @return String 单元格数据内容
 */
private String getDateCellValue(HSSFCell cell) {
    String result = "";
    try {
        int cellType = cell.getCellType();
        if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
            Date date = cell.getDateCellValue();
            result = (date.getYear() + 1900) + "" + (date.getMonth() + 1)
                    + "-" + date.getDate();
        } else if (cellType == HSSFCell.CELL_TYPE_STRING) {
            String date = getStringCellValue(cell);
            result = date.replaceAll("[年月]", "").replace("日", "").trim();
        } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
            result = "";
        }
    } catch (Exception e) {
        System.out.println("日期格式不正确!");
        e.printStackTrace();
    }
    return result;
}

/**
 * 根据HSSFCell类型设置数据
 * @param cell
 * @return
 */
private String getCellFormatValue(HSSFCell cell) {
    String cellvalue = "";
    if (cell != null) {
        // 判断当前Cell的Type
        switch (cell.getCellType()) {
            // 如果当前Cell的Type为NUMERIC
            case HSSFCell.CELL_TYPE_NUMERIC:
            case HSSFCell.CELL_TYPE_FORMULA: {
                // 判断当前的cell是否为Date
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    // 如果是Date类型则,转化为Data格式

                    //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
                    //cellvalue = cell.getDateCellValue().toLocaleString();

                    //方法2:这样子的data格式是不带带时分秒的:2011-10-12
                    Date date = cell.getDateCellValue();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                    cellvalue = sdf.format(date);

                }
                // 如果是纯数字
                else {
                    // 取得当前Cell的数值
                    cellvalue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            }
            // 如果当前Cell的Type为STRIN
            case HSSFCell.CELL_TYPE_STRING:
                // 取得当前的Cell字符串
                cellvalue = cell.getRichStringCellValue().getString();
                break;
            // 默认的Cell值
            default:
                cellvalue = " ";
        }
    } else {
        cellvalue = "";
    }
    return cellvalue;

}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值