• java poi 读取 Excel xlsx和xls文件


    private static Map<String,Object> readExcel() {
    String filename = "B:\exceltest\template.xlsx";
    Map<String, Object> map=new HashMap<String, Object>();
    FileInputStream fis = null;
    try {
    fis = new FileInputStream(filename);
    } catch (FileNotFoundException e1) {
    e1.printStackTrace();
    }
    // 读取Excel
    Workbook wb = null;
    try {
    String[] fileStr=filename.split("\.");
    if (fileStr[1].equals("xlsx")) {
    wb = new XSSFWorkbook(fis);
    } else if(fileStr[1].equals("xls")){
    wb = new HSSFWorkbook(fis);
    }else {
    throw new Exception("不是excel文件!");
    }

    // 使用wb。getNumberOfSheets获得sheet数目。。
    // 获取sheet数目
    Sheet sheet = wb.getSheetAt(0);
    Row row = null;
    int lastRowNum = sheet.getLastRowNum();
    // 循环读取
    StringBuilder sb=new StringBuilder("");
    for (int i = 0; i <= lastRowNum; i++) {

    row = sheet.getRow(i);
    if (row != null) {
    if(i==0) {
    String value=getCellValue(row.getCell(0));
    map.put("tableName", value.substring(value.indexOf(":")+1));
    }else if(i==1) {
    String value=getCellValue(row.getCell(0));
    map.put("buttonStyle", value.substring(value.indexOf(":")+1));
    }else if(i==2){
    String value=getCellValue(row.getCell(0));
    map.put("i18nPrefix", value.substring(value.indexOf(":")+1));
    }else {
    if(i==3) continue;
    int j;
    // 获取每一列的值
    for (j = 0; j < row.getLastCellNum(); j++) {
    Cell cell = row.getCell(j);
    String value=getCellValue(cell);
    if(value.equals(" ")&&j==0) {
    break;
    }
    sb.append(value).append("|");
    }
    if(j==0) break;
    sb.append(" ");
    }
    }
    }

    sb.setLength(sb.length()-1);
    map.put("properties", sb.toString());
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    wb.close();
    fis.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return map;
    }

    private static String getCellValue(Cell cell) {
    Object result = "";
    if (cell != null) {
    switch (cell.getCellTypeEnum()) {
    case STRING:
    result = cell.getStringCellValue();
    break;
    case NUMERIC:
    result = cell.getNumericCellValue();
    break;
    case BOOLEAN:
    result = cell.getBooleanCellValue();
    break;
    case FORMULA:
    result = cell.getCellFormula();
    break;
    case ERROR:
    result = cell.getErrorCellValue();
    break;
    case BLANK:
    result = " ";
    break;
    default:
    break;
    }
    }
    return result.toString();
    }

    PS:使用的maven

    poi jar包:

    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
    </dependency>

  • 相关阅读:
    十四、内存泄露和强软弱虚引用
    十五、对象的内存布局
    Android Service全解(三)之 Foreground Service(转)
    android中不同activity的传参调用和返回
    Android Service全解(一)之 startService(转)
    Android Service全解(二)之 bindService(转)
    android单点、多点触控之MotionEvent
    关于创建进程函数CreateProcess()字符串参数的说明
    sql中连接两个不同的数据库(A在同一个服务器,B不在一个服务器)
    asp.net小数点四舍五入的方法
  • 原文地址:https://www.cnblogs.com/yuezeyuan/p/8036185.html
Copyright © 2020-2023  润新知