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

Java使用Spire.XLS for Java實現(xiàn)插入和刪除Excel行和列

 更新時間:2026年05月25日 08:11:07   作者:用戶372157426135  
日常開發(fā)中,報表導(dǎo)出、數(shù)據(jù)批量規(guī)整、模板修改等場景,經(jīng)常需要動態(tài)對 Excel 表格插入、刪除行和列,本文將介紹如何使用 Java 操作 Excel 文件的行和列,包括對.xls、.xlsx格式表格的行、列新增與刪除,附帶完整可運行示例,希望對大家有所幫助

日常開發(fā)中,報表導(dǎo)出、數(shù)據(jù)批量規(guī)整、模板修改等場景,經(jīng)常需要動態(tài)對 Excel 表格插入、刪除行和列。本文將介紹如何使用 Java 操作 Excel 文件的行和列,包括對.xls、.xlsx格式表格的行、列新增與刪除,附帶完整可運行示例。

安裝依賴

本文示例使用的是 Spire.XLS for Java,這是一個專門處理Excel文件的Java庫。你可以在pom.xml文件從添加以下代碼從Maven安裝該庫:

Maven依賴

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

一、插入行和列

最基礎(chǔ)的操作就是插入行和列了。比如要在第2行前面 插入一個新行:

import com.spire.xls.*;

public class InsertRowsColumns {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet worksheet = workbook.getWorksheets().get(0);
        
        // 在第2行位置插入一行
        worksheet.insertRow(2);
        
        // 在第2列位置插入一列
        worksheet.insertColumn(2);
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

批量插入也很簡單,第二個參數(shù)指定插入的數(shù)量:

// 從第5行開始,連續(xù)插入2行
worksheet.insertRow(5, 2);

// 從第5列開始,連續(xù)插入2列
worksheet.insertColumn(5, 2);

實際場景:我經(jīng)常在生成報表時,根據(jù)數(shù)據(jù)量動態(tài)插入行。比如有10條記錄,就在表頭后面 插入10行。

二、刪除行和列

刪除操作和插入類似,但要注意:刪除后后面的行/列會自動前移。

import com.spire.xls.*;

public class DeleteRowsColumns {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet worksheet = workbook.getWorksheets().get(0);
        
        // 從第5行開始,刪除4行(刪除第5、6、7、8行)
        worksheet.deleteRow(5, 4);
        
        // 從第2列開始,刪除2列(刪除第2、3列)
        worksheet.deleteColumn(2, 2);
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

踩過的坑:如果循環(huán)刪除多行,記得從后往前刪,否則索引會亂。

三、刪除空白行和列

這個功能特別實用!經(jīng)常遇到導(dǎo)出的Excel里有很多空白行,手動刪太麻煩。

import com.spire.xls.*;

public class DeleteBlankRows {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("messy_data.xlsx");
        
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        // 刪除空白行(從后往前遍歷)
        for (int i = sheet.getRows().length - 1; i >= 0; i--) {
            if (sheet.getRows()[i].isBlank()) {
                sheet.deleteRow(i + 1);  // 注意:行號從1開始
            }
        }
        
        // 刪除空白列(從后往前遍歷)
        for (int j = sheet.getColumns().length - 1; j >= 0; j--) {
            if (sheet.getColumns()[j].isBlank()) {
                sheet.deleteColumn(j + 1);  // 注意:列號從1開始
            }
        }
        
        workbook.saveToFile("cleaned.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

為什么要從后往前刪? 因為刪除一行后,后面的行號會變化。如果從前往后刪,可能會跳過某些行或者刪錯位置。

應(yīng)用場景:清理從數(shù)據(jù)庫導(dǎo)出的Excel、去除模板中的占位行等。

四、復(fù)制行和列

有時候需要在同一個Sheet內(nèi)復(fù)制行,或者跨Sheet復(fù)制數(shù)據(jù)。

同一Sheet內(nèi)復(fù)制

import com.spire.xls.*;

public class CopyRows {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        // 把第1行復(fù)制到第3行
        // 參數(shù):源行、目標(biāo)行、是否復(fù)制值、是否復(fù)制格式、是否復(fù)制公式
        sheet.copy(sheet.getRows()[0], sheet.getRows()[2], true, true, true);
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2010);
        workbook.dispose();
    }
}

跨Sheet復(fù)制

Worksheet sheet1 = workbook.getWorksheets().get(0);
Worksheet sheet2 = workbook.getWorksheets().get(1);

// 把Sheet1的第1行復(fù)制到Sheet2的第2行
sheet1.copy(sheet1.getRows()[0], sheet2.getRows()[1], true, true, true);

三個布爾參數(shù)說明

  • 第一個:是否復(fù)制單元格的值
  • 第二個:是否復(fù)制格式(字體、顏色等)
  • 第三個:是否復(fù)制公式

實際用途:我經(jīng)常用它來復(fù)制表頭到多個Sheet,或者根據(jù)模板行批量生成數(shù)據(jù)行。

五、隱藏和顯示行列

有些敏感數(shù)據(jù)不想直接顯示,可以隱藏起來:

import com.spire.xls.*;

public class HideRowsColumns {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet worksheet = workbook.getWorksheets().get(0);
        
        // 隱藏第2列
        worksheet.hideColumn(2);
        
        // 隱藏第4行
        worksheet.hideRow(4);
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

取消隱藏

// 顯示第2列
worksheet.showColumn(2);

// 顯示第4行
worksheet.showRow(4);

使用場景:財務(wù)報表中隱藏中間計算過程、保護敏感信息等。

六、設(shè)置行高和列寬

默認(rèn)的行列尺寸可能不合適,需要自定義:

import com.spire.xls.*;

public class SetHeightWidth {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet worksheet = workbook.getWorksheets().get(0);
        
        // 設(shè)置第4列寬度為30
        worksheet.setColumnWidth(4, 30);
        
        // 設(shè)置第4行高度為30
        worksheet.setRowHeight(4, 30);
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

批量設(shè)置默認(rèn)值

// 設(shè)置所有行的默認(rèn)高度
worksheet.setDefaultRowHeight(20);

// 設(shè)置所有列的默認(rèn)寬度
worksheet.setDefaultColumnWidth(15);

經(jīng)驗之談:中文內(nèi)容通常需要更寬的列,英文可以窄一些。我一般會根據(jù)內(nèi)容類型預(yù)設(shè)不同的列寬。

七、自動調(diào)整列寬

如果不確定列寬設(shè)多少合適,可以讓Excel自動調(diào)整:

import com.spire.xls.*;

public class AutoFitColumns {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet worksheet = workbook.getWorksheets().get(0);
        
        // 自動調(diào)整指定區(qū)域的列寬
        worksheet.getAllocatedRange().autoFitColumns();
        
        // 也可以只調(diào)整某幾列
        // worksheet.getCellRange("A1:C10").autoFitColumns();
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

注意:自動調(diào)整會遍歷所有單元格,數(shù)據(jù)量大時會比較慢。如果性能重要,建議手動設(shè)置固定寬度。

八、分組行列(大綱功能)

Excel的大綱功能可以把相關(guān)行/列折疊起來,適合層級數(shù)據(jù):

import com.spire.xls.*;

public class GroupRowsColumns {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        // 對第1到5行進行分組(可以折疊)
        // 第三個參數(shù):是否在下方顯示匯總行
        sheet.groupByRows(1, 5, false);
        
        // 對第1到3列進行分組
        sheet.groupByColumns(1, 3, false);
        
        workbook.saveToFile("result.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

實際場景:財務(wù)報表按月分組、項目計劃按階段分組等。用戶可以選擇展開或折疊查看不同粒度的數(shù)據(jù)。

九、根據(jù)條件刪除行

有時候需要根據(jù)內(nèi)容篩選并刪除某些行,比如刪除包含特定關(guān)鍵詞的行:

import com.spire.xls.*;

public class RemoveRowByKeyword {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");
        
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        String keyword = "測試";
        
        // 從后往前遍歷,刪除包含關(guān)鍵詞的行
        for (int i = sheet.getRows().length - 1; i >= 0; i--) {
            boolean shouldDelete = false;
            
            // 檢查該行所有單元格
            for (Object cell : sheet.getRows()[i]) {
                if (cell != null && cell.toString().contains(keyword)) {
                    shouldDelete = true;
                    break;
                }
            }
            
            if (shouldDelete) {
                sheet.deleteRow(i + 1);
            }
        }
        
        workbook.saveToFile("filtered.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

應(yīng)用場景:清理測試數(shù)據(jù)、過濾無效記錄、刪除標(biāo)記為廢棄的行等。

十、綜合實戰(zhàn):動態(tài)生成報表

最后分享一個完整的例子:根據(jù)數(shù)據(jù)動態(tài)生成帶格式的報表。

import com.spire.xls.*;
import java.util.List;
import java.util.ArrayList;

public class DynamicReport {
    
    // 模擬數(shù)據(jù)類
    static class Product {
        String name;
        double price;
        int quantity;
        
        Product(String name, double price, int quantity) {
            this.name = name;
            this.price = price;
            this.quantity = quantity;
        }
    }
    
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        // 準(zhǔn)備數(shù)據(jù)
        List<Product> products = new ArrayList<>();
        products.add(new Product("產(chǎn)品A", 99.9, 100));
        products.add(new Product("產(chǎn)品B", 199.9, 50));
        products.add(new Product("產(chǎn)品C", 299.9, 30));
        
        // 1. 寫入表頭
        String[] headers = {"產(chǎn)品名稱", "單價", "數(shù)量", "總價"};
        for (int i = 0; i < headers.length; i++) {
            sheet.getCellRange(1, i + 1).setValue(headers[i]);
        }
        
        // 格式化表頭
        sheet.getCellRange(1, 1, 1, headers.length).getStyle().getFont().isBold(true);
        sheet.getCellRange(1, 1, 1, headers.length).getStyle()
            .setKnownColor(ExcelColors.LightBlue);
        
        // 2. 動態(tài)插入數(shù)據(jù)行
        for (int i = 0; i < products.size(); i++) {
            int row = i + 2;  // 從第2行開始(第1行是表頭)
            Product p = products.get(i);
            
            sheet.getCellRange(row, 1).setValue(p.name);
            sheet.getCellRange(row, 2).setNumberValue(p.price);
            sheet.getCellRange(row, 3).setNumberValue(p.quantity);
            
            // 總價 = 單價 * 數(shù)量(使用公式)
            sheet.getCellRange(row, 4).setFormula("=B" + row + "*C" + row);
            sheet.getCellRange(row, 4).getStyle().setNumberFormat("¥#,##0.00");
        }
        
        // 3. 添加匯總行
        int summaryRow = products.size() + 2;
        sheet.getCellRange(summaryRow, 1).setValue("合計");
        sheet.getCellRange(summaryRow, 1).getStyle().getFont().isBold(true);
        
        // 匯總公式
        sheet.getCellRange(summaryRow, 3).setFormula("=SUM(C2:C" + (summaryRow - 1) + ")");
        sheet.getCellRange(summaryRow, 4).setFormula("=SUM(D2:D" + (summaryRow - 1) + ")");
        sheet.getCellRange(summaryRow, 4).getStyle().setNumberFormat("¥#,##0.00");
        
        // 4. 設(shè)置列寬
        sheet.setColumnWidth(1, 20);  // 產(chǎn)品名稱
        sheet.setColumnWidth(2, 15);  // 單價
        sheet.setColumnWidth(3, 15);  // 數(shù)量
        sheet.setColumnWidth(4, 20);  // 總價
        
        // 5. 自動調(diào)整(可選)
        // sheet.getAllocatedRange().autoFitColumns();
        
        // 6. 添加邊框
        sheet.getCellRange(1, 1, summaryRow, 4).getBorders()
            .setLineStyle(LineStyleType.Thin);
        
        workbook.saveToFile("product_report.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
        
        System.out.println("報表生成完成!");
    }
}

這個例子展示了:

  • 動態(tài)插入數(shù)據(jù)行(根據(jù)數(shù)據(jù)量)
  • 使用公式自動計算
  • 設(shè)置格式(加粗、背景色、數(shù)字格式)
  • 調(diào)整列寬
  • 添加邊框

小結(jié)

總結(jié)一下幾個關(guān)鍵點:

  1. 插入行列用 insertRow() 和 insertColumn(),支持批量插入
  2. 刪除行列用 deleteRow() 和 deleteColumn(),循環(huán)刪除要從后往前
  3. 刪除空白用 isBlank() 判斷,清理臟數(shù)據(jù)很實用
  4. 復(fù)制行列用 copy() 方法,可以控制是否復(fù)制值、格式、公式
  5. 隱藏顯示用 hideRow/Column() 和 showRow/Column()
  6. 設(shè)置尺寸用 setRowHeight() 和 setColumnWidth()
  7. 自動調(diào)整用 autoFitColumns(),但大數(shù)據(jù)量時注意性能
  8. 分組折疊用 groupByRows/Columns(),適合層級數(shù)據(jù)

實際使用中,最重要的是理解業(yè)務(wù)需求。不是所有場景都需要復(fù)雜的操作,有時候簡單的插入和刪除就能解決問題。

以上就是Java使用Spire.XLS for Java實現(xiàn)插入和刪除Excel行和列的詳細(xì)內(nèi)容,更多關(guān)于Java操作Excel行和列的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot 如何編寫配置文件

    SpringBoot 如何編寫配置文件

    這篇文章主要介紹了SpringBoot 編寫配置文件的兩種方法,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • eclipse下ini設(shè)置詳情

    eclipse下ini設(shè)置詳情

    這篇文章主要介紹了eclipse下ini設(shè)置詳情,需要的朋友可以參考下
    2017-10-10
  • 面試總結(jié):秒殺設(shè)計、AQS 、synchronized相關(guān)問題

    面試總結(jié):秒殺設(shè)計、AQS 、synchronized相關(guān)問題

    Java語言的關(guān)鍵字,當(dāng)它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行該段代碼。本文給大家介紹java中 synchronized的用法,對本文感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot+TestNG單元測試的實現(xiàn)

    SpringBoot+TestNG單元測試的實現(xiàn)

    本文主要介紹了SpringBoot+TestNG單元測試的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • mybatis 通過攔截器打印完整的sql語句以及執(zhí)行結(jié)果操作

    mybatis 通過攔截器打印完整的sql語句以及執(zhí)行結(jié)果操作

    這篇文章主要介紹了mybatis 通過攔截器打印完整的sql語句以及執(zhí)行結(jié)果操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • IntelliJ IDEA maven 構(gòu)建簡單springmvc項目(圖文教程)

    IntelliJ IDEA maven 構(gòu)建簡單springmvc項目(圖文教程)

    在工作當(dāng)中,我們有時需要創(chuàng)建一個全新的工程,而基于spring-mvc web的工程較為常見,這篇文章主要介紹了IntelliJ IDEA maven 構(gòu)建簡單springmvc項目(圖文教程),感興趣的小伙伴們可以參考一下
    2018-05-05
  • SpringBoot如何實現(xiàn)防盜鏈

    SpringBoot如何實現(xiàn)防盜鏈

    這篇文章主要為大家詳細(xì)介紹了SpringBoot是如何實現(xiàn)防盜鏈的,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Rocketmq事務(wù)消息之半消息詳解

    Rocketmq事務(wù)消息之半消息詳解

    這篇文章主要介紹了Rocketmq事務(wù)消息之半消息詳解,RocketMQ的事務(wù)消息支持在業(yè)務(wù)邏輯與發(fā)送消息之間提供事務(wù)保證,RocketMQ通過兩階段的方式提供事務(wù)消息的支持,需要的朋友可以參考下
    2023-09-09
  • 基于Java語言在窗體上實現(xiàn)飛機大戰(zhàn)小游戲的完整步驟

    基于Java語言在窗體上實現(xiàn)飛機大戰(zhàn)小游戲的完整步驟

    這篇文章主要給大家介紹了基于Java語言在窗體上實現(xiàn)飛機大戰(zhàn)小游戲的完整步驟,文中通過圖文以及實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • SpringBoot中使用websocket出現(xiàn)404的解決方法

    SpringBoot中使用websocket出現(xiàn)404的解決方法

    在Springboot中使用websocket時,本地開發(fā)環(huán)境可以正常運行,但部署到服務(wù)器環(huán)境出現(xiàn)404問題,所以本文小編講給大家詳細(xì)介紹一下SpringBoot中使用websocket出現(xiàn)404的解決方法,需要的朋友可以參考下
    2023-09-09

最新評論

江油市| 浙江省| 东至县| 兰考县| 调兵山市| 保亭| 利津县| 沙田区| 江西省| 连江县| 弥渡县| 东光县| 青岛市| 嘉峪关市| 边坝县| 综艺| 南平市| 邵阳市| 东兰县| 济源市| 万山特区| 万山特区| 都江堰市| 山东| 泾阳县| 犍为县| 六安市| 策勒县| 田林县| 崇明县| 西城区| 凌云县| 耿马| 甘泉县| 遵义市| 大渡口区| 桂平市| 静安区| 西藏| 淮安市| 峨边|