最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用poi包讀取Excel文檔代碼分享

 更新時間:2017年12月04日 14:32:04   作者:yan456jie  
這篇文章主要介紹了Java使用poi包讀取Excel文檔代碼分享,具有一定借鑒價值,需要的朋友可以參考下。

項目需要解析Excel文檔獲取數(shù)據(jù),就在網(wǎng)上找了一些資料,結合自己這次使用,寫下心得:

1、maven項目需加入如下依賴:

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

直接上測試類,類里有完善的注釋:

package shindo.Java;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtil {

  public static void main(String[] args) {
    String path = "D:\\IDE\\workspace-Neon\\Java\\src\\refund.xls";
    try {
      List<List<String>> result = new ExcelUtil().readXls(path);
      System.out.println(result.size());
      for (int i = 0; i < result.size(); i++) {
        List<String> model = result.get(i);
        System.out.println("orderNum:" + model.get(0) + "--> orderAmount:" + model.get(1));
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 
  * @Title: readXls 
  * @Description: 處理xls文件
  * @param @param path
  * @param @return
  * @param @throws Exception  設定文件 
  * @return List<List<String>>  返回類型 
  * @throws
  * 
  * 從代碼不難發(fā)現(xiàn)其處理邏輯:
  * 1.先用InputStream獲取excel文件的io流
  * 2.然后穿件一個內(nèi)存中的excel文件HSSFWorkbook類型對象,這個對象表示了整個excel文件。
  * 3.對這個excel文件的每頁做循環(huán)處理
  * 4.對每頁中每行做循環(huán)處理
  * 5.對每行中的每個單元格做處理,獲取這個單元格的值
  * 6.把這行的結果添加到一個List數(shù)組中
  * 7.把每行的結果添加到最后的總結果中
  * 8.解析完以后就獲取了一個List<List<String>>類型的對象了
  * 
   */
  private List<List<String>> readXls(String path) throws Exception {
    InputStream is = new FileInputStream(path);
    // HSSFWorkbook 標識整個excel
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
    List<List<String>> result = new ArrayList<List<String>>();
    int size = hssfWorkbook.getNumberOfSheets();
    // 循環(huán)每一頁,并處理當前循環(huán)頁
    for (int numSheet = 0; numSheet < size; numSheet++) {
      // HSSFSheet 標識某一頁
      HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
      if (hssfSheet == null) {
        continue;
      }
      // 處理當前頁,循環(huán)讀取每一行
      for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
        // HSSFRow表示行
        HSSFRow hssfRow = hssfSheet.getRow(rowNum);
        int minColIx = hssfRow.getFirstCellNum();
        int maxColIx = hssfRow.getLastCellNum();
        List<String> rowList = new ArrayList<String>();
        // 遍歷改行,獲取處理每個cell元素
        for (int colIx = minColIx; colIx < maxColIx; colIx++) {
          // HSSFCell 表示單元格
          HSSFCell cell = hssfRow.getCell(colIx);
          if (cell == null) {
            continue;
          }
          rowList.add(getStringVal(cell));
        }
        result.add(rowList);
      }
    }
    return result;
  }

  /**
   * 
  * @Title: readXlsx 
  * @Description: 處理Xlsx文件
  * @param @param path
  * @param @return
  * @param @throws Exception  設定文件 
  * @return List<List<String>>  返回類型 
  * @throws
   */
  private List<List<String>> readXlsx(String path) throws Exception {
    InputStream is = new FileInputStream(path);
    XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
    List<List<String>> result = new ArrayList<List<String>>();
    // 循環(huán)每一頁,并處理當前循環(huán)頁
    for (XSSFSheet xssfSheet : xssfWorkbook) {
      if (xssfSheet == null) {
        continue;
      }
      // 處理當前頁,循環(huán)讀取每一行
      for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
        XSSFRow xssfRow = xssfSheet.getRow(rowNum);
        int minColIx = xssfRow.getFirstCellNum();
        int maxColIx = xssfRow.getLastCellNum();
        List<String> rowList = new ArrayList<String>();
        for (int colIx = minColIx; colIx < maxColIx; colIx++) {
          XSSFCell cell = xssfRow.getCell(colIx);
          if (cell == null) {
            continue;
          }
          rowList.add(cell.toString());
        }
        result.add(rowList);
      }
    }
    return result;
  }

  // 存在的問題
  /*
   * 其實有時候我們希望得到的數(shù)據(jù)就是excel中的數(shù)據(jù),可是最后發(fā)現(xiàn)結果不理想
   * 如果你的excel中的數(shù)據(jù)是數(shù)字,你會發(fā)現(xiàn)Java中對應的變成了科學計數(shù)法。
   * 所以在獲取值的時候就要做一些特殊處理來保證得到自己想要的結果
   * 網(wǎng)上的做法是對于數(shù)值型的數(shù)據(jù)格式化,獲取自己想要的結果。
   * 下面提供另外一種方法,在此之前,我們先看一下poi中對于toString()方法:
   * 
   * 該方法是poi的方法,從源碼中我們可以發(fā)現(xiàn),該處理流程是:
   * 1.獲取單元格的類型
   * 2.根據(jù)類型格式化數(shù)據(jù)并輸出。這樣就產(chǎn)生了很多不是我們想要的
   * 故對這個方法做一個改造。
   */
  /*public String toString(){
    switch(getCellType()){
      case CELL_TYPE_BLANK:
        return "";
      case CELL_TYPE_BOOLEAN:
        return getBooleanCellValue() ? "TRUE" : "FALSE";
      case CELL_TYPE_ERROR:
        return ErrorEval.getText(getErrorCellValue());
      case CELL_TYPE_FORMULA: 
        return getCellFormula();
      case CELL_TYPE_NUMERIC:
        if(DateUtil.isCellDateFormatted(this)){
          DateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy")
          return sdf.format(getDateCellValue());
        }
        return getNumericCellValue() + "";
      case CELL_TYPE_STRING: 
        return getRichStringCellValue().toString();
      default :
        return "Unknown Cell Type:" + getCellType();
    }
  }*/

  /**
   * 改造poi默認的toString()方法如下
  * @Title: getStringVal 
  * @Description: 1.對于不熟悉的類型,或者為空則返回""控制串
  *        2.如果是數(shù)字,則修改單元格類型為String,然后返回String,這樣就保證數(shù)字不被格式化了
  * @param @param cell
  * @param @return  設定文件 
  * @return String  返回類型 
  * @throws
   */
  public static String getStringVal(HSSFCell cell) {
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_BOOLEAN:
      return cell.getBooleanCellValue() ? "TRUE" : "FALSE";
    case Cell.CELL_TYPE_FORMULA:
      return cell.getCellFormula();
    case Cell.CELL_TYPE_NUMERIC:
      cell.setCellType(Cell.CELL_TYPE_STRING);
      return cell.getStringCellValue();
    case Cell.CELL_TYPE_STRING:
      return cell.getStringCellValue();
    default:
      return "";
    }
  }
}

總結

以上就是本文關于Java使用poi包讀取Excel文檔代碼分享的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • 淺談java接口的冪等性及解決方案

    淺談java接口的冪等性及解決方案

    本文主要介紹了java接口的冪等性及解決方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • @Value注入List、數(shù)組、Set、Map問題

    @Value注入List、數(shù)組、Set、Map問題

    這篇文章主要介紹了@Value注入List、數(shù)組、Set、Map問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java多線程中執(zhí)行多個程序的實例分析

    java多線程中執(zhí)行多個程序的實例分析

    在本篇文章里小編給大家整理的是一篇關于java多線程中執(zhí)行多個程序的實例分析內(nèi)容,有需要的朋友們可以學習參考下。
    2021-02-02
  • SpringBoot在IDEA中實現(xiàn)熱部署的步驟

    SpringBoot在IDEA中實現(xiàn)熱部署的步驟

    這篇文章主要介紹了SpringBoot在IDEA中實現(xiàn)熱部署的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • SpringBoot整合之SpringBoot整合MongoDB的詳細步驟

    SpringBoot整合之SpringBoot整合MongoDB的詳細步驟

    這篇文章主要介紹了SpringBoot整合之SpringBoot整合MongoDB的詳細步驟,本文通過圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • spring Cloud微服務跨域?qū)崿F(xiàn)步驟

    spring Cloud微服務跨域?qū)崿F(xiàn)步驟

    這篇文章主要介紹了spring Cloud微服務跨域?qū)崿F(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Windows系統(tǒng)下如何查找JDK的安裝路徑

    Windows系統(tǒng)下如何查找JDK的安裝路徑

    這篇文章主要介紹了Windows系統(tǒng)下如何查找JDK的安裝路徑,文中介紹了三種方法,分別是通過命令行檢查、使用verbose選項查找jre目錄、以及查看環(huán)境變量,需要的朋友可以參考下
    2025-03-03
  • SpringBoot 動態(tài)配置Profile環(huán)境的方式

    SpringBoot 動態(tài)配置Profile環(huán)境的方式

    這篇文章主要介紹了SpringBoot 動態(tài)配置Profile環(huán)境的方式,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Java設計模式之單態(tài)模式(Singleton模式)介紹

    Java設計模式之單態(tài)模式(Singleton模式)介紹

    這篇文章主要介紹了Java設計模式之單態(tài)模式(Singleton模式)介紹,本文講解了如何使用單例模式、使用單例模式注意事項等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Java實現(xiàn)經(jīng)典大富翁游戲的示例詳解

    Java實現(xiàn)經(jīng)典大富翁游戲的示例詳解

    大富翁,又名地產(chǎn)大亨。是一種多人策略圖版游戲。參與者分得游戲金錢,憑運氣(擲骰子)及交易策略,買地、建樓以賺取租金。本文將通過Java實現(xiàn)這一經(jīng)典游戲,感興趣的可以跟隨小編一起學習一下
    2022-02-02

最新評論

宝丰县| 抚松县| 敦煌市| 左贡县| 哈尔滨市| 大田县| 英吉沙县| 罗平县| 青龙| 和政县| 亚东县| 枣阳市| 宁阳县| 东丽区| 泸西县| 道孚县| 南平市| 车致| 莲花县| 桐城市| 玛纳斯县| 泸定县| 嵊州市| 东丽区| 军事| 贵州省| 新野县| 鄂托克旗| 芮城县| 阆中市| 诸暨市| 奇台县| 沙雅县| 通化市| 兴义市| 丰台区| 孝昌县| 长武县| 库尔勒市| 岳西县| 郑州市|