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

Java代碼實現(xiàn)自動檢測并刪除Excel中的空白行與空白列

 更新時間:2026年03月15日 08:07:27   作者:用戶372157426135  
無效數(shù)據(jù)不僅影響報表的美觀,更會嚴重干擾后續(xù)的數(shù)據(jù)分析,本文將介紹如何通過 Java 代碼自動檢測并刪除 Excel 中的空白行和空白列,有需要的小伙伴可以了解下

在數(shù)據(jù)處理和自動化辦公的場景中,我們經(jīng)常需要處理從數(shù)據(jù)庫導(dǎo)出、用戶填報或第三方系統(tǒng)生成的 Excel 文件。這些文件往往包含大量的“臟數(shù)據(jù)”,其中最常見的就是空白行和空白列。

這些無效數(shù)據(jù)不僅影響報表的美觀,更會嚴重干擾后續(xù)的數(shù)據(jù)分析、統(tǒng)計公式計算以及導(dǎo)入系統(tǒng)的準確性。手動在 Excel 中篩選并刪除成千上萬行數(shù)據(jù)既耗時又容易出錯。

本文將介紹如何通過 Java 代碼自動檢測并刪除 Excel 中的空白行和空白列。

環(huán)境準備

在開始編寫代碼之前,請確保你的項目中已經(jīng)引入了 Spire.XLS for Java 依賴。如果你使用 Maven 項目,可以在 ??pom.xml?? 中添加以下依賴:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>16.2.6</version>
    </dependency>
</dependencies>

如果是非 Maven 項目,可以去官方網(wǎng)站下載 JAR 包并手動添加到項目中。

核心邏輯解析

在編寫代碼前,我們需要理解一個關(guān)鍵的技術(shù)細節(jié):倒序遍歷。

當我們刪除行或列時,后續(xù)行或列的索引會發(fā)生改變。

  • 如果我們從第 1 行遍歷到最后一行,刪除了第 3 行,那么原來的第 4 行會變成新的第 3 行。如果循環(huán)繼續(xù)向下走到第 4 行,實際上我們跳過檢查了原來的第 4 行(現(xiàn)在的第 3 行)。
  • 解決方案:從最后一行(或最后一列)開始,倒序向前遍歷。這樣即使刪除了當前行,也不會影響尚未檢查的前面行的索引。

Spire.XLS 提供了便捷的 ??isBlank()?? 方法來判斷一行或一列是否完全為空,大大簡化了判斷邏輯。

示例一:刪除 Excel 中的空白行

這個示例演示如何加載一個 Excel 文件,遍歷所有已使用的行,檢測并刪除那些沒有任何數(shù)據(jù)的空行。

代碼實現(xiàn)

import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class DeleteBlankRows {

    public static void main(String[] args) {
        // 1. 創(chuàng)建 Workbook 對象
        Workbook wb = new Workbook();

        // 2. 加載示例 Excel 文檔
        // 請確保當前項目目錄下存在 "sample.xlsx" 文件
        wb.loadFromFile("sample.xlsx");

        // 3. 獲取第一個工作表
        Worksheet sheet = wb.getWorksheets().get(0);

        // 4. 倒序遍歷所有已使用的行
        // getLastRow() 返回最后一行有內(nèi)容的行號(包含格式或數(shù)據(jù))
        // 我們從最后一行開始,一直循環(huán)到第 1 行
        for (int i = sheet.getLastRow(); i >= 1; i--) {
            
            // 5. 檢測當前行是否為空白
            // getRows()[i-1] 獲取第 i 行的對象(數(shù)組索引從 0 開始,所以是 i-1)
            // isBlank() 方法判斷該行是否沒有任何數(shù)據(jù)或格式
            if (sheet.getRows()[i - 1].isBlank()) {
                
                // 6. 如果為空白,則刪除該行
                // deleteRow(i) 刪除第 i 行
                sheet.deleteRow(i);
                System.out.println("已刪除空白行: " + i);
            }
        }

        // 7. 保存結(jié)果文檔
        wb.saveToFile("DeleteBlankRows_Only.xlsx", ExcelVersion.Version2016);
        
        System.out.println("空白行清理完成!文件已保存。");
    }
}

關(guān)鍵點說明

  • ??sheet.getLastRow() ??: 獲取工作表中最后一個被使用過的行號。這比遍歷整個工作表的最大行數(shù)(如 1048576 行)要高效得多。
  • ??sheet.getRows()[i-1] ???: 注意 Java 數(shù)組索引是從 0 開始的,而 Excel 行號是從 1 開始的,因此訪問第 ??i?? 行時需要使用 ??i-1??。
  • ??isBlank() ???: 這是 Spire.XLS 的核心判斷方法。它不僅檢查單元格是否有文本或數(shù)字,通常也會考慮是否包含公式或?qū)ο?。如果整行都是空的,返???true??。

示例二:刪除 Excel 中的空白列

邏輯與刪除行非常相似,只是操作對象從“行(Row)”變成了“列(Column)”,遍歷方向從“行號”變成了“列號”。

代碼實現(xiàn)

import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class DeleteBlankColumns {

    public static void main(String[] args) {
        // 1. 創(chuàng)建 Workbook 對象
        Workbook wb = new Workbook();

        // 2. 加載示例 Excel 文檔
        wb.loadFromFile("sample.xlsx");

        // 3. 獲取第一個工作表
        Worksheet sheet = wb.getWorksheets().get(0);

        // 4. 倒序遍歷所有已使用的列
        // getLastColumn() 返回最后一列有內(nèi)容的列號
        for (int j = sheet.getLastColumn(); j >= 1; j--) {
            
            // 5. 檢測當前列是否為空白
            // getColumns()[j-1] 獲取第 j 列的對象
            if (sheet.getColumns()[j - 1].isBlank()) {
                
                // 6. 如果為空白,則刪除該列
                sheet.deleteColumn(j);
                System.out.println("已刪除空白列: " + getColumnName(j));
            }
        }

        // 7. 保存結(jié)果文檔
        wb.saveToFile("DeleteBlankColumns_Only.xlsx", ExcelVersion.Version2016);
        
        System.out.println("空白列清理完成!文件已保存。");
    }

    // 輔助方法:將列號轉(zhuǎn)換為 Excel 列名(如 1 -> A, 2 -> B)
    private static String getColumnName(int columnNumber) {
        int dividend = columnNumber;
        String columnName = "";
        while (dividend > 0) {
            int modulo = (dividend - 1) % 26;
            columnName = (char)('A' + modulo) + columnName;
            dividend = (dividend - modulo) / 26;
        }
        return columnName;
    }
}

關(guān)鍵點說明

  • ??sheet.getLastColumn() ??: 獲取工作表中最后一個被使用過的列號。
  • ??sheet.deleteColumn(j) ??: 刪除指定的列,右側(cè)的列會自動向左移動填補空缺。
  • 輔助方法: 為了日志輸出更友好,我添加了一個 ??getColumnName?? 方法,將數(shù)字列號轉(zhuǎn)換為熟悉的 "A", "B", "C" 格式,方便調(diào)試。

常見問題與注意事項

1. 性能優(yōu)化

對于超大型 Excel 文件(幾十萬行),Java 的內(nèi)存消耗可能會增加。

  • 確保在操作完成后調(diào)用 ??wb.dispose()??來幫助垃圾回收。
  • 盡量避免在循環(huán)內(nèi)部進行頻繁的 IO 操作,上面的示例只在最后保存一次,這是最佳實踐。

2. 備份原始文件

自動化腳本具有破壞性(直接刪除數(shù)據(jù))。在生產(chǎn)環(huán)境中運行此類代碼前,務(wù)必備份原始文件,或者將結(jié)果保存為新文件名,以防誤刪重要數(shù)據(jù)。

總結(jié)

通過使用 Java 我們可以輕松實現(xiàn) 刪除 Excel 中的空白行和空白列,減少人工操作帶來的失誤,并提升工作效率。

到此這篇關(guān)于Java代碼實現(xiàn)自動檢測并刪除Excel中的空白行與空白列的文章就介紹到這了,更多相關(guān)Java刪除Excel空白行列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決mybatis分頁插件PageHelper導(dǎo)致自定義攔截器失效

    解決mybatis分頁插件PageHelper導(dǎo)致自定義攔截器失效

    這篇文章主要為大家介紹了解決mybatis分頁插件PageHelper導(dǎo)致自定義攔截器失效方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解JAVA 原型模式

    詳解JAVA 原型模式

    這篇文章主要介紹了JAVA 原型模式的的相關(guān)資料,文中講解非常細致,實例幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • 輕松掌握java中介者模式

    輕松掌握java中介者模式

    這篇文章主要幫助大家輕松掌握java中介者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解Java?ThreadPoolExecutor的拒絕策略

    詳解Java?ThreadPoolExecutor的拒絕策略

    這篇文章主要介紹了Java?ThreadPoolExecutor的拒絕策略,本文對于線程的池的幾種策略進行詳細的講解,在實際的生產(chǎn)中需要集合相關(guān)的場景來選擇合適的拒絕策略,需要的朋友可以參考下
    2022-08-08
  • jedis操作redis的幾種常見方式總結(jié)

    jedis操作redis的幾種常見方式總結(jié)

    Redis是一個著名的key-value存儲系統(tǒng),也是nosql中的最常見的一種,這篇文章主要給大家總結(jié)了關(guān)于在java中jedis操作redis的幾種常見方式,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Mybatis Generator Plugin悲觀鎖實現(xiàn)示例

    Mybatis Generator Plugin悲觀鎖實現(xiàn)示例

    本文將從悲觀鎖為例,讓你快速了解如何實現(xiàn)Mybatis Generator Plugin。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java線程池高效并發(fā)編程實戰(zhàn)技巧

    Java線程池高效并發(fā)編程實戰(zhàn)技巧

    線程池是一種線程管理機制,它預(yù)先創(chuàng)建一定數(shù)量的線程并放入池中,當需要執(zhí)行任務(wù)時,從池中獲取空閑線程來執(zhí)行任務(wù),任務(wù)完成后線程不銷毀而是返回池中等待下一次任務(wù),這篇文章給大家介紹Java線程池高效并發(fā)編程實戰(zhàn)技巧,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • SpringBoot+Redis實現(xiàn)外呼頻次限制功能的項目實踐

    SpringBoot+Redis實現(xiàn)外呼頻次限制功能的項目實踐

    本文提出基于SpringBoot和Redis的外呼頻次限制解決方案,采用Redis計數(shù)器與滑動窗口算法實現(xiàn)精準控制,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • java內(nèi)存溢出示例(堆溢出、棧溢出)

    java內(nèi)存溢出示例(堆溢出、棧溢出)

    這篇文章主要介紹了java內(nèi)存溢出示例(堆溢出、棧溢出),需要的朋友可以參考下
    2014-04-04
  • Spring中allowedOriginPatterns和allowedOrigins方法有何不同詳解

    Spring中allowedOriginPatterns和allowedOrigins方法有何不同詳解

    這篇文章主要給大家介紹了關(guān)于Spring中allowedOriginPatterns和allowedOrigins方法有何不同,allowedOriginPatterns和allowedOrigins都是用來設(shè)置允許跨域請求的來源,需要的朋友可以參考下
    2023-10-10

最新評論

抚松县| 辰溪县| 田阳县| 民勤县| 仁寿县| 亚东县| 句容市| 应城市| 伊吾县| 天津市| 阜新| 丽水市| 连城县| 会理县| 方山县| 巨鹿县| 二手房| 青铜峡市| 化隆| 札达县| 淮阳县| 六枝特区| 孟村| 蛟河市| 清苑县| 仁寿县| 敦化市| 洛阳市| 威海市| 耒阳市| 墨竹工卡县| 沛县| 海原县| 神农架林区| 巴南区| 叙永县| 南宫市| 铜梁县| 英吉沙县| 苗栗县| 长阳|