java读取excel,指定列A列为空,将下方空行上移,并将指定列F列数据拼接

news2024/11/16 9:17:20

java读取excel,将空行上移


改造前:
改造前
效果图:
效果图
上代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class RemoveEmptyRows {
    public static void main(String[] args) {

        // 设置Excel文件路径
        String excelFilePath = "C:\\Users\\17315\\Desktop\\newFolder\\合并单元格.xlsx";

        // 读取Excel文件
        try (FileInputStream fis = new FileInputStream(excelFilePath);
             Workbook workbook = new XSSFWorkbook(fis)) {

            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);

            String remarkValue = "";
            String remarkNextValue = "";
            String remarkValue1 = "";
            String remarkNextValue1 = "";
            String remarkValue2 = "";
            // 循环遍历行,从最后一行开始
            for (int rowIndex = sheet.getLastRowNum(); rowIndex >= 0; rowIndex--) {

                Row row = sheet.getRow(rowIndex);
                if(row==null){
                    sheet.shiftRows(rowIndex+1 , sheet.getLastRowNum(), -1);
                }else {
                    // 获取A列的单元格
                    if (row.getCell(0) == null) {

                        if(row.getCell(5)!=null){

                            Row remarkRow = sheet.getRow(rowIndex-1);
                            remarkValue1 = remarkValue.concat(remarkRow.getCell(5).getStringCellValue() + "|");
                            remarkNextValue1 = remarkNextValue.concat(row.getCell(5).getStringCellValue());
                            remarkValue2 = remarkValue1.concat(remarkNextValue1);
                            Cell remarkCell = remarkRow.createCell(5);
                            remarkCell.setCellValue(remarkValue2.toString());
                            System.out.println("remarkCell " + remarkValue2);
                        }
                        // 如果A列单元格为空,删除该行
                        //sheet.removeRow(row);
                        // 移动删除行上方的行,使单元格连续
                        sheet.shiftRows(rowIndex+1 , sheet.getLastRowNum(), -1);

                    } else {
                        // 如果A列单元格不为空,结束循环
                        continue;
                    }
                }
            }
            // 保存修改后的Excel文件
            try (FileOutputStream fos = new FileOutputStream(excelFilePath)) {
                workbook.write(fos);
            }
            System.out.println("删除空行并将下方行上移成功。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>5.2.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>5.2.3</version>
    </dependency>
      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.1.2</version>
      </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-scratchpad</artifactId>
      <version>5.2.3</version>
    </dependency>

tips:poi版本4.0.1以下shiftRows方法,移动单元格缺少复制下部单元格,此处建议使用4.1.2之上版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SqueezeNet算法解析—鸟类识别—Paddle实战

文章目录 一、理论基础1.前言2.设计理念2.1 CNN微架构&#xff08;CNN MicroArchitecture&#xff09;2.2 CNN宏架构&#xff08;CNN MacroArchitecture&#xff09;2.3 模型网络设计探索过程2.4 结构设计策略2.5 Fire模块 3.网络结构4.评估分析 二、实战1.数据预处理2.数据读取…

树莓派登录密码忘记了怎么办????

我们常常会不记得我们的密码&#xff0c;比如说我近期想玩一下我们树莓派开发版&#xff0c;登录的时候忘记了怎么办&#xff0c;第一想到的就是重刷系统&#xff0c;从头再来&#xff0c;今天我给大家带来了一个解决忘记了登录密码如何去修改它&#xff0c;从而进入系统里。 …

分享一款超级好用的下载软件,IDM--不限速,破解版,IDM破解版下载安装

本片文章分为四个部分&#xff1a; 第一部分&#xff0c;下载安装IDM 第二部分&#xff0c;IDM破解 第三部分&#xff0c;浏览器插件的安装 第四部分&#xff0c;百度网盘使用IDM下载 下载IDM 首先大家可以在浏览器搜索IDM 网址&#xff1a;https://www.internetdownloadma…

Zynq PS无法读取SD卡(TF卡)异常分析及如何读写SD卡

最近我正在进行一个Zynq项目&#xff0c;我使用了Xilinx SDK自带的系统库函数来读取SD卡中的配置信息。然而&#xff0c;一直读取异常。 我进行了一系列的调试和检查&#xff0c;包括确认PS部分的代码正确性以及Xilffs的配置是否正确&#xff0c;但是问题仍然没有解决。最后&am…

NYDIG最新报告:比特币今年上半年回报率达83.6%,远超其他资产类别

本文要点&#xff1a; 比特币的强劲势头延续到了二季度&#xff0c;本季度比特币上涨 6.8%&#xff0c;年初至今上涨 83.6%。 二季度末&#xff0c;一系列新的现货比特币 ETF 申请&#xff08;尤其是 ETF 巨头贝莱德的申请&#xff09;提振了比特币价格。 在多家机构提交现货 B…

POI下载excel通用方法

POI下载excel通用方法 最近遇到一个业务是需要下载excel&#xff0c;使用POI,这里记录一下实现过程 1、导包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency>…

本周大新闻|传微软曾考虑收购Niantic;腾讯引进Quest挑战重重

本周XR大新闻&#xff0c;AR方面&#xff0c;传微软曾考虑收购AR头部公司Niantic&#xff1b;Q-PIXEL公布5000PPI可调色Micro LED&#xff1b;三星智能眼镜商标曝光&#xff1b;Humane公布首款产品Ai Pin&#xff1b;空客推企业级AR解决方案。 VR方面&#xff0c;Vision Pro销…

边缘计算那些事儿-漫谈网络切片关键技术

0、背景 网络切片作为一种比较前沿的技术&#xff0c;当前并没有太多系统的资料可以学习&#xff0c;很多的技术资料都是比较分散地分布在论文和一些技术博客中&#xff0c;笔者当前是通过论文的解读获取相关的技术信息&#xff0c;在过程中笔者总结了相关的技术栈&#xff0c;…

pytorch多分类问题 CrossEntropyLoss()函数的输入size/shape不一致问题

在使用pytorch实现一个多分类任务的时候&#xff0c;许多多分类任务在训练过程中都会有如下的代码&#xff1a; criterion nn.CrossEntropyLoss() loss criterion(output, target) # output.size : [batch_size, class_num] # target.size : [batch_size]许多的初学者会卡在…

Kubernetes 容器类型 Init - pause - sidecar - app容器

目录 Kubernetes 的容器类型 Init 初始化容器 参考文档&#xff1a;Init 容器 | Kubernetes 使用 Init 容器的情况 案例&#xff1a;定义了一个具有 2 个 Init 容器的简单 Pod 你通过运行下面的命令启动 Pod&#xff1a; 发现两个Init容器都没有运行成功 查看更多详细…

一些行业报告--From 艾瑞咨询

一些行业报告--From 艾瑞咨询 1 介绍2 机械臂行业研究 [From 艾瑞咨询 -- 中国工业机器人行业研究报告&#xff08;2023&#xff09;2.1 发展历程2.2 中国工业机器人相关政策2.3 产业链2.4 三大部分六大系统2.5 伺服&控制器 主要玩家 及 关键指标及难点2.6 减速机 主要玩家…

mysql中根据已有的表来创建新表的三种方式

mysql根据现有表创建新表 1、语法1&#xff1a;CREATE TABLE new_tbl LIKE orig_tbl; 1、1 根据departments表创建新表departments1 departments 表结果和表数据库如下 创建departments1如下 使用命令&#xff1a; CREATE TABLE departments1 LIKE departments; 这种语法&…

GEE:在地图上添加时间滑动条,以交互式可视化不同年份影像

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上的地图显示区域创建一个交互式界面,可以为用户添加一个时间滑动条,通过滑动条可以选择显示不同年份的遥感影像。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 // 使用滑块从图像集合中选…

Auto-Rig Pro 手指控制器骨骼(IK-FK)

选中手指控制器骨骼,在tool面板里看到snap IK-FK, IK-FK,还有snap all to IK 和 FK: 这些都是Auto-Rig Pro提供的一些工具&#xff0c;可以让您在IK&#xff08;反向动力学&#xff09;和FK&#xff08;正向动力学&#xff09;之间切换和同步。IK和FK是两种不同的绑定方式&…

43. 间断连续登录用户问题

文章目录 题目需求思路一实现一题目来源 题目需求 现有各用户的登录记录表&#xff08;login_events&#xff09;如下&#xff0c;表中每行数据为&#xff1a;一个用户何时登录了平台。 现要求统计各用户最长的连续登录天数&#xff0c;间断一天也算作连续&#xff0c;例如&a…

git安装及初步使用

git的安装 &#xff1a; 在CentOS 7.6环境下可以使用一条语句就能安装git yum -y install git如果上面命令包以下错误&#xff0c;说明权限不够 [leijiefl ~]$ yum -y install git Loaded plugins: fastestmirror You need to be root to perform this command.可以转换成ro…

神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一

神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同&#xff0c;最大的指标可能会差到3-4%这样&#xff0c;这是因为随机种子没有设定导致的&#xff0…

电源频率检测器/采用555时基电路的过流检测器电路设计

电源频率检测器 对于某些电子仪器和电气设备&#xff0c;对见六电源的频率有着一定的要求&#xff0c;电源频率高于或低于 50Hz&#xff0c;都会影响设备的正常工作&#xff0c;甚至造成仪器和设备的损坏。因此&#xff0c;对于此类设备需要装设电源频率检测装置&#xff0c;当…

Linux开发工具之【vim】

Linux开发工具之【vim】 文章目录&#xff1a; Linux开发工具之【vim】1. Linux软件包管理器yum1.1 查看软件1.2. 下载软件1.3 卸载软件 2. vim编辑器的使用2.1 vim常用模式2.2 vim基本操作2.3 vim命令模式命令集2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 替换文本…

Openpose原理总结

Openpose是一种开源的实时多人姿态估计库&#xff0c;由卡耐基梅隆大学开发。它通过分析图像或视频中的人体关键点来估计人体的姿态&#xff0c;识别身体的各个部分&#xff0c;并推断出人体的姿势信息。 Openpose能够同时检测和跟踪多个人的姿态&#xff0c;可以用于人机交互、…