一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java使用poi包讀取Excel文檔代碼分享

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

2021-02-27 11:15yan456jie JAVA教程

這篇文章主要介紹了Java使用poi包讀取Excel文檔代碼分享,具有一定借鑒價值,需要的朋友可以參考下。

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

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

?
1
2
3
4
5
6
7
8
9
10
<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>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
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
  *
  * 從代碼不難發現其處理邏輯:
  * 1.先用InputStream獲取excel文件的io流
  * 2.然后穿件一個內存中的excel文件HSSFWorkbook類型對象,這個對象表示了整個excel文件。
  * 3.對這個excel文件的每頁做循環處理
  * 4.對每頁中每行做循環處理
  * 5.對每行中的每個單元格做處理,獲取這個單元格的值
  * 6.把這行的結果添加到一個List數組中
  * 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();
    // 循環每一頁,并處理當前循環頁
    for (int numSheet = 0; numSheet < size; numSheet++) {
      // HSSFSheet 標識某一頁
      HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
      if (hssfSheet == null) {
        continue;
      }
      // 處理當前頁,循環讀取每一行
      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>>();
    // 循環每一頁,并處理當前循環頁
    for (XSSFSheet xssfSheet : xssfWorkbook) {
      if (xssfSheet == null) {
        continue;
      }
      // 處理當前頁,循環讀取每一行
      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;
  }
 
  // 存在的問題
  /*
   * 其實有時候我們希望得到的數據就是excel中的數據,可是最后發現結果不理想
   * 如果你的excel中的數據是數字,你會發現Java中對應的變成了科學計數法。
   * 所以在獲取值的時候就要做一些特殊處理來保證得到自己想要的結果
   * 網上的做法是對于數值型的數據格式化,獲取自己想要的結果。
   * 下面提供另外一種方法,在此之前,我們先看一下poi中對于toString()方法:
   *
   * 該方法是poi的方法,從源碼中我們可以發現,該處理流程是:
   * 1.獲取單元格的類型
   * 2.根據類型格式化數據并輸出。這樣就產生了很多不是我們想要的
   * 故對這個方法做一個改造。
   */
  /*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.如果是數字,則修改單元格類型為String,然后返回String,這樣就保證數字不被格式化了
  * @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文檔代碼分享的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/yan456jie/article/details/77283027

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美四虎影院 | 日本高清在线播放一区二区三区 | 韩国三级做爰 | 欧美日韩亚洲综合久久久 | 免费永久观看美女视频网站网址 | 亚洲视屏在线观看 | 久久伊人在 | 日本天堂视频在线观看 | 久久久久久久久人体 | 久久热在线视频精品1 | 女人和男人搞基 | 国产亚洲精品一区二区在线观看 | 日本伊人色综合网 | 国产不卡视频一区二区在线观看 | 日本暖暖视频在线观看 | 精品日韩视频 | 52zfl宅福利yxpjw | 99精品影视| 国产精品亚洲片夜色在线 | 国产第2页| 成人亚洲欧美日韩中文字幕 | 日韩黄色影视 | 青青热久久综合网伊人 | 欧美精品久久久久久久影视 | 免费看日产一区二区三区 | 免费观看美景之屋 | 高清毛片一区二区三区 | 精品久久久久久无码人妻国产馆 | 五月激情丁香婷婷综合第九 | 国产免费一区二区三区免费视频 | 无码精品AV久久久奶水 | 亚洲网色| 五花大绑esebdsm国产 | 亚洲国产在线99视频 | 私人影院免费观看 | 热门小说同人h改编h | 亚洲 日本 中文字幕 制服 | 美女逼逼软件 | 亚洲 欧美 日本 国产 高清 | 白白国产永久免费视频 | 日本在线不卡免 |