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

Java之如何讀取Excel獲取真實行數(shù)

 更新時間:2023年06月09日 09:59:53   作者:imadxu  
這篇文章主要介紹了Java之如何讀取Excel獲取真實行數(shù)問題,具有很好的參考價值,希望對大家有所幫助。

Java讀取Excel獲取真實行數(shù)

剛進入公司開發(fā),熟悉環(huán)境是個很大的難題,今天就接到了一個任務(wù),讓我修改批量上傳excel文件的頁面.

公司采用的是apache提供的包,通過XML文件的映射,把EXCEL表和我們的Model對應(yīng)起來.本來是校驗正確的,結(jié)果莫名其妙到后面就會報空指針異常.

問題的原因:在沒有格式的前提下,getLastRowNum方法能夠正確返回最后一行的位置;getPhysicalNumberOfRows方法能夠正確返回物理的行數(shù);

* 在有格式的前提下,這兩個方法都是不合理的;

* 所以,在做導(dǎo)入excel的時候,建議想要正確獲取行數(shù),可以做一個人為的約定,比如約定導(dǎo)入文件第一列不允許為空,行數(shù)就按照第一列的有效行數(shù)來統(tǒng)計;這樣就能正確獲取到實際想要的行數(shù);

更新版本,因為發(fā)現(xiàn)有時候 存在了加了樣式的邊框,邊框的屬性默認成為了 公式屬性,導(dǎo)致后面空指針,現(xiàn)已修復(fù)

修改版

    /**
     * 用來得到真實行數(shù)
     * @param sheet
     * @param flag  需要寫進數(shù)據(jù)庫的列數(shù)用逗號隔開 比如  (Sheet sheet,int 2,int 3);隨意個
     * @return
     * 
     */
public static int findRealRows(Sheet sheet, int... flag) {
        int row_real = 0;
        int rows = sheet.getPhysicalNumberOfRows();// 此處物理行數(shù)統(tǒng)計有錯誤,
        int size = flag.length;
        try {
        for (int i = 1; i < rows; i++) {
            Row row = sheet.getRow(i);
            int total = 0;
            ArrayList<Integer> blank =new ArrayList<Integer>();
            int type=-1;
            String s = null;
            for(int j:flag){
                if(!(row.getCell(j) == null)&&row.getCell(j).getCellType()<2){
                    type=row.getCell(j).getCellType();
                    row.getCell(j).setCellType(1);
                }
                if (row.getCell(j) == null||row.getCell(j).getStringCellValue().matches("^\\s+$")||row.getCell(j).getCellType()>2) {
                    total++;
                    if(!(row.getCell(j) == null)&&row.getCell(j).getCellType()<2){
                    row.getCell(j).setCellType(type);
                    }
                    blank.add(j);
                }
            }
            System.out.println(s+"我");
            // 如果4列都是空說明就該返回
            if (total == flag.length) {
                return row_real;
            } else if (total == 0) {
                row_real++;
            } else {
                String h="";
                for(Integer b:blank){
                     h=h+"第"+(b+1)+"列"+" ";
                }
                throw new BusinessException("第" + (i + 1) + "行" + h
                        + "不能為空");
            }
        }
        } catch (NullPointerException e) {
            throw new BusinessException("excel格式異常,請檢查excel格式有無數(shù)據(jù)缺失,無效數(shù)據(jù)行!");
        }
        return row_real;
    }

方法都這樣,通過約定一個有的ID來進行判斷,可以較快的得到真實的行數(shù) ,以至于后面的集合循環(huán)輸出的話不會出現(xiàn)空指針異常

Java讀取excel數(shù)據(jù)

導(dǎo)入相關(guān)的MAVEN依賴。

? ? ? ? <!--excel的依賴-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.poi</groupId>
? ? ? ? ? ? <artifactId>poi</artifactId>
? ? ? ? ? ? <version>4.1.0</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.poi</groupId>
? ? ? ? ? ? <artifactId>poi-ooxml</artifactId>
? ? ? ? ? ? <version>4.1.0</version>
? ? ? ? </dependency>

Java代碼

使用說明:

1、XSSFWorkbook是整個操作excel文件需要用到的對象。構(gòu)造時,參數(shù)是一個FileInputStream對象,里面寫上文件的地址。

2、getNumberOfSheets()獲取擁有的sheet總頁數(shù)。

3、getSheetAt(number)操作第幾個工作簿,參數(shù)是第幾個sheet表。此處的參數(shù)索引是從0開始。返回值是一個工作簿對象XSSFSheet,用于操作這個工作簿。

4、工作簿對象.getLastRowNum()。獲取該工作簿一共有多少列。

5、getRow(row_num).getLastCellNum().獲取改行共有多少列。此處行和列的下標(biāo)都是從1開始的。

6、getRow(row).getCell(rol)。獲取改行該列的元素。

? ?public static void excelFind() {
? ? ? ? try {
? ? ? ? ? ? XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("src/test/java/postSQL/database/test.xlsx"));
? ? ? ? ? ? //獲取工作簿下sheet的個數(shù)
? ? ? ? ? ? int sheetNum = xssfWorkbook.getNumberOfSheets();
? ? ? ? ? ? System.out.println("總數(shù)頁碼:"+sheetNum);
? ? ? ? ? ? //遍歷頁碼:
? ? ? ? ? ? for(int i = 0;i<sheetNum;i++) {
? ? ? ? ? ? ? ? System.out.println("讀取第"+(i+1)+"個sheet");
? ? ? ? ? ? ? ? //sheet的索引下標(biāo)是從0開始的,得到該頁碼的對象
? ? ? ? ? ? ? ? XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
? ? ? ? ? ? ? ? //獲取總共的行數(shù)
? ? ? ? ? ? ? ? int maxRow = sheet.getLastRowNum();
? ? ? ? ? ? ? ? //對每一行進行遍歷
? ? ? ? ? ? ? ? for (int row = 0; row <= maxRow; row++) {
? ? ? ? ? ? ? ? ? ? //getRow(row_num)獲取改行的對象,再.getLastCellNum()獲取該行共有幾列
? ? ? ? ? ? ? ? ? ? //此處與sheet不同的是,該索引下標(biāo)是從1開始的
? ? ? ? ? ? ? ? ? ? int maxRol = sheet.getRow(row).getLastCellNum();
? ? ? ? ? ? ? ? ? ? System.out.println("--------第" + row + "行的數(shù)據(jù)如下--------");
? ? ? ? ? ? ? ? ? ? //遍歷列數(shù)
? ? ? ? ? ? ? ? ? ? for (int rol = 0; rol < maxRol; rol++){
? ? ? ? ? ? ? ? ? ? ? ? //sheets.getRow(1).getCell(1);獲取元素值
? ? ? ? ? ? ? ? ? ? ? ? System.out.print(sheet.getRow(row).getCell(rol) + " ?");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? System.out.println();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的位運算符、移位運算詳細介紹

    Java中的位運算符、移位運算詳細介紹

    這篇文章主要介紹了Java中的位運算符、移位運算,有需要的朋友可以參考一下
    2013-12-12
  • Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解

    Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解

    這篇文章主要為大家介紹了Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • SpringBoot項目中resources文件讀取實踐

    SpringBoot項目中resources文件讀取實踐

    本文詳細介紹了SpringBoot項目中讀取resources目錄下文件的9種主流方式,并提供了一個完整的控制器Demo示例,幫助開發(fā)者快速定位最適合的資源加載方案
    2026-01-01
  • JDBC實現(xiàn)Mysql自動重連機制的方法詳解

    JDBC實現(xiàn)Mysql自動重連機制的方法詳解

    最近在工作中發(fā)現(xiàn)了一個問題,通過查找相關(guān)的資料終于解決了,下面這篇文章主要給大家介紹了關(guān)于JDBC實現(xiàn)Mysql自動重連機制的相關(guān)資料,文中給出多種解決的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Spring boot中限制 Mybatis SQL日志的大字段輸出問題

    Spring boot中限制 Mybatis SQL日志的大字段輸出問題

    文章介紹Springboot中MyBatis SQL日志因大字段輸出導(dǎo)致日志膨脹及JVM內(nèi)存問題,建議通過Logback或Log4j2自定義Converter/Filter實現(xiàn)參數(shù)截斷或脫敏,或調(diào)整日志級別限制調(diào)試信息,本文給大家介紹Spring boot中限制Mybatis SQL日志的大字段輸出問題,感興趣的朋友一起看看吧
    2025-10-10
  • Springboot工具類StringUtils使用教程

    Springboot工具類StringUtils使用教程

    這篇文章主要介紹了Springboot內(nèi)置的工具類之StringUtils的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • 你知道Tomcat安裝之前為什么要安裝JDK

    你知道Tomcat安裝之前為什么要安裝JDK

    這篇文章主要介紹了你知道Tomcat安裝之前為什么要安裝JDK嗎?具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)

    使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)

    這篇文章主要介紹了使用IntelliJ IDEA查看類的繼承關(guān)系圖形,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了如何利用Java語言編寫一個圖書管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下
    2022-03-03
  • Java中指定時區(qū)的3種方法

    Java中指定時區(qū)的3種方法

    這篇文章主要介紹了Java中指定時區(qū)的3種方法,本文是一個JAVA項目和.NET項目通訊時遇到的問題,本文給出JAVA中的3種解決方法,需要的朋友可以參考下
    2015-02-02

最新評論

昌江| 牡丹江市| 阿荣旗| 河北区| 江山市| 彰化县| 乌拉特前旗| 金华市| 龙里县| 桦南县| 唐山市| 察隅县| 临桂县| 格尔木市| 咸丰县| 抚松县| 瑞丽市| 公主岭市| 禹州市| 榆中县| 额敏县| 松滋市| 郓城县| 青岛市| 建水县| 天津市| 沙湾县| 灵台县| 黔东| 洞口县| 吉安市| 丰镇市| 白水县| 婺源县| 阿克陶县| 平遥县| 景德镇市| 永吉县| 吉木乃县| 香格里拉县| 洛扎县|