• POI解析excel格式的文件(xls,xlsx)



    先贴出所需的jar包:

      1.poi-3.17-beta1.jar

      2.poi-ooxml-3.17-beta1.jar

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

      4.commons-collections4-4.1.jar

      5.xmlbeans-2.6.0.jar

    jar包以及示例excel文件下载地址:链接:https://pan.baidu.com/s/1G7zyhPp-Imi8bKU9yn35zA 密码:m1qt


    • 话不多说,直接上代码
      package parseexcel;
      
      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 ParseExcelTest {
          public static void main(String[] args){
              printExcel();
          }
      
          public static void printExcel(){
              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[] = {"姓名","打卡日期","上班打卡时间","下班打卡时间"};
              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;
          }
      }
    • 主要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,对应一个单元格。

    • Excel示例以及运行结果

       excel示例

        

       运行结果

        

  • 相关阅读:
    关于中间件(Middleware)的理解
    强类型约束的中间件(IMiddleware)
    常规中间件(Conventional Middleware) 之 自定义中间件
    常规中间件(Conventional Middleware) 之 内联中间件(in-line middleware)
    git 遴选(cherry-pick)
    sql转linq
    python知识体系
    when 的使用
    关于联表查询时NULL值的处理
    $project 选择要显示的字段
  • 原文地址:https://www.cnblogs.com/carryLess/p/9108427.html
Copyright © 2020-2023  润新知