首页 > 编程 > Java > 正文

java解析Excel的方法(xls、xlsx两种格式)

2019-11-26 10:05:30
字体:
来源:转载
供稿:网友

一、需要导入的jar

  1.commons-collections4-4.1.jar

  2.poi-3.17-beta1.jar

  3.poi-ooxml-3.17-beta1.jar

  4.poi-ooxml-schemas-3.17-beta1.jar

  5.xmlbeans-2.6.0.jar

二、主要API

  1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;

  2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;

  3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;

  4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;

  5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;

  6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

三、代码如下

package poi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;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;public class Testpoi {  public static void main(String[] args) {    Workbook wb =null;    Sheet sheet = null;    Row row = null;    List<Map<String,String>> list = null;    String cellData = null;    String filePath = "D://test.xlsx";    String columns[] = {"name","age","score"};    wb = readExcel(filePath);    if(wb != null){      //用来存放表中数据      list = new ArrayList<Map<String,String>>();      //获取第一个sheet      sheet = wb.getSheetAt(0);      //获取最大行数      int rownum = sheet.getPhysicalNumberOfRows();      //获取第一行      row = sheet.getRow(0);      //获取最大列数      int colnum = row.getPhysicalNumberOfCells();      for (int i = 1; i<rownum; i++) {        Map<String,String> map = new LinkedHashMap<String,String>();        row = sheet.getRow(i);        if(row !=null){          for (int j=0;j<colnum;j++){            cellData = (String) getCellFormatValue(row.getCell(j));            map.put(columns[j], cellData);          }        }else{          break;        }        list.add(map);      }    }    //遍历解析出来的list    for (Map<String,String> map : list) {      for (Entry<String,String> entry : map.entrySet()) {        System.out.print(entry.getKey()+":"+entry.getValue()+",");      }      System.out.println();    }  }  //读取excel  public static Workbook readExcel(String filePath){    Workbook wb = null;    if(filePath==null){      return null;    }    String extString = filePath.substring(filePath.lastIndexOf("."));    InputStream is = null;    try {      is = new FileInputStream(filePath);      if(".xls".equals(extString)){        return wb = new HSSFWorkbook(is);      }else if(".xlsx".equals(extString)){        return wb = new XSSFWorkbook(is);      }else{        return wb = null;      }    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    }    return wb;  }  public static Object getCellFormatValue(Cell cell){    Object cellValue = null;    if(cell!=null){      //判断cell类型      switch(cell.getCellType()){      case Cell.CELL_TYPE_NUMERIC:{        cellValue = String.valueOf(cell.getNumericCellValue());        break;      }      case Cell.CELL_TYPE_FORMULA:{        //判断cell是否为日期格式        if(DateUtil.isCellDateFormatted(cell)){          //转换为日期格式YYYY-mm-dd          cellValue = cell.getDateCellValue();        }else{          //数字          cellValue = String.valueOf(cell.getNumericCellValue());        }        break;      }      case Cell.CELL_TYPE_STRING:{        cellValue = cell.getRichStringCellValue().getString();        break;      }      default:        cellValue = "";      }    }else{      cellValue = "";    }    return cellValue;  }}

四、运行结果

  代码运行前保证在D盘下有一个test.xlsx文档,不然报文件找不到异常;Excel文档中的表头要和代码中的String columns[] = {"name","age","score"}对应起来。

总结

以上所述是小编给大家介绍的java解析Excel的方法(xls、xlsx两种格式),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表