java使用POI實現excel檔案的讀取,相容尾碼名xls和xlsx

來源:互聯網
上載者:User

標籤:XML   alt   str   title   maven   讀取   ast   檔案   伺服器   

需要用的jar包如下:

如果是maven管理的項目,添加依賴如下:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->  <dependency>      <groupId>org.apache.poi</groupId>      <artifactId>poi</artifactId>      <version>3.14</version>  </dependency>  <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->  <dependency>      <groupId>org.apache.poi</groupId>      <artifactId>poi-ooxml</artifactId>      <version>3.14</version>  </dependency>

POIUtil代碼如下:

import java.io.FileNotFoundException;  import java.io.IOException;  import java.io.InputStream;  import java.util.ArrayList;  import java.util.List;    import org.apache.log4j.Logger;  import org.apache.poi.hssf.usermodel.HSSFWorkbook;  import org.apache.poi.ss.usermodel.Cell;  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;  import org.springframework.web.multipart.MultipartFile;  /**  * excel讀寫工具類 */  public class POIUtil {      private static Logger logger  = Logger.getLogger(POIUtil.class);      private final static String xls = "xls";      private final static String xlsx = "xlsx";            /**      * 讀入excel檔案,解析後返回      * @param file      * @throws IOException       */      public static List<String[]> readExcel(MultipartFile file) throws IOException{          //檢查檔案          checkFile(file);          //獲得Workbook工作薄對象          Workbook workbook = getWorkBook(file);          //建立返回對象,把每行中的值作為一個數組,所有行作為一個集合返回          List<String[]> list = new ArrayList<String[]>();          if(workbook != null){              for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){                  //獲得當前sheet工作表                  Sheet sheet = workbook.getSheetAt(sheetNum);                  if(sheet == null){                      continue;                  }                  //獲得當前sheet的開始行                  int firstRowNum  = sheet.getFirstRowNum();                  //獲得當前sheet的結束行                  int lastRowNum = sheet.getLastRowNum();                  //迴圈除了第一行的所有行                  for(int rowNum = firstRowNum+1;rowNum <= lastRowNum;rowNum++){                      //獲得當前行                      Row row = sheet.getRow(rowNum);                      if(row == null){                          continue;                      }                      //獲得當前行的開始列                      int firstCellNum = row.getFirstCellNum();                      //獲得當前行的列數                      int lastCellNum = row.getPhysicalNumberOfCells();                      String[] cells = new String[row.getPhysicalNumberOfCells()];                      //迴圈當前行                      for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){                          Cell cell = row.getCell(cellNum);                          cells[cellNum] = getCellValue(cell);                      }                      list.add(cells);                  }              }              workbook.close();          }          return list;      }      public static void checkFile(MultipartFile file) throws IOException{          //判斷檔案是否存在          if(null == file){              logger.error("檔案不存在!");              throw new FileNotFoundException("檔案不存在!");          }          //獲得檔案名稱          String fileName = file.getOriginalFilename();          //判斷檔案是否是excel檔案          if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){              logger.error(fileName + "不是excel檔案");              throw new IOException(fileName + "不是excel檔案");          }      }      public static Workbook getWorkBook(MultipartFile file) {          //獲得檔案名稱          String fileName = file.getOriginalFilename();          //建立Workbook工作薄對象,表示整個excel          Workbook workbook = null;          try {              //擷取excel檔案的io流              InputStream is = file.getInputStream();              //根據檔案尾碼名不同(xls和xlsx)獲得不同的Workbook實作類別對象              if(fileName.endsWith(xls)){                  //2003                  workbook = new HSSFWorkbook(is);              }else if(fileName.endsWith(xlsx)){                  //2007                  workbook = new XSSFWorkbook(is);              }          } catch (IOException e) {              logger.info(e.getMessage());          }          return workbook;      }      public static String getCellValue(Cell cell){          String cellValue = "";          if(cell == null){              return cellValue;          }          //把數字當成String來讀,避免出現1讀成1.0的情況          if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){              cell.setCellType(Cell.CELL_TYPE_STRING);          }          //判斷資料的類型          switch (cell.getCellType()){              case Cell.CELL_TYPE_NUMERIC: //數字                  cellValue = String.valueOf(cell.getNumericCellValue());                  break;              case Cell.CELL_TYPE_STRING: //字串                  cellValue = String.valueOf(cell.getStringCellValue());                  break;              case Cell.CELL_TYPE_BOOLEAN: //Boolean                  cellValue = String.valueOf(cell.getBooleanCellValue());                  break;              case Cell.CELL_TYPE_FORMULA: //公式                  cellValue = String.valueOf(cell.getCellFormula());                  break;              case Cell.CELL_TYPE_BLANK: //空值                   cellValue = "";                  break;              case Cell.CELL_TYPE_ERROR: //故障                  cellValue = "非法字元";                  break;              default:                  cellValue = "未知類型";                  break;          }          return cellValue;      }  }

該工具類主要用來處理從用戶端上傳到伺服器的Excel檔案。若需要處理本地的檔案,只要把方法getWorkbook做一定修改即可,readExcel方法的形參的類型也需要修改。 

原文:java使用POI實現excel檔案的讀取,相容尾碼名xls和xlsx

java使用POI實現excel檔案的讀取,相容尾碼名xls和xlsx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.