java Poi操作Excel,插入行,保留行格式

poi操作Excel在原有的数据里插入一条新的数据 一、POI概述 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 结构: HSSF --提供读写Microsoft Excel格式档案的功能。 XSSF --提供读写MicrosoftExcelOOXML格式档案的功能。 HWPF --提供读写Microsoft Word格... 阅读详情
AI摘要

文章介绍了在Java中使用ApachePOI库处理Excel时遇到的一个问题,即当尝试在最后一行插入新行时会失败。为解决此问题,提供了创建最后一行下一行的解决方案,并展示了如何在特定行后插入多行并复制样式。示例代码详细说明了插入和复制行样式的操作步骤。

2023/03/20修改bug,startRow为最后一行时无法插入新行

如果复制最后一行,首先需要创建最后一行的下一行,否则无法插入

例1:

编辑

问:如果我想在李四下方插入一个空行该如何操作

我们应该在行标为3的下方插入1行

startRow = 3

row = 1


public static void main(String[] args) {
        ExcelWriter writer= ExcelUtil.getWriter(new File("C:\\Users\\Wsong\\Desktop\\template.xlsx"),"活动信息");
        int startRow= 3;
        introws=1;
        XSSFSheet sheet= (XSSFSheet)writer.getSheet();

        ExcelCopyUtils.InsertRow(writer, startRow, rows, sheet,false);
    }

结果

执行后的结果,我们可以看到样式与行标为3的行一致。

编辑

例2

问:在例1的结果基础上,我们想要在张三后插入3行,样式拷贝张三,如何操作

我们应该在行标为5的下方插入3行

startRow =5

row = 3


public static void main(String[] args) {
        ExcelWriter writer= ExcelUtil.getWriter(new File("C:\\Users\\Wsong\\Desktop\\template.xlsx"),"活动信息");
        int startRow= 5;
        introws=3;
        XSSFSheet sheet= (XSSFSheet)writer.getSheet();

        ExcelCopyUtils.InsertRow(writer, startRow, rows, sheet,false);
    }

结果

编辑

代码如下。

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.0.5</version>
        </dependency>

package com.ws.excel;
 
 
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFSheet;
 
import java.io.File;
import java.util.List;
 
public class ExcelCopyUtils {
 
    public static void main(String[] args) {
        ExcelWriter writer = ExcelUtil.getWriter(new File("C:\\Users\\Wsong\\Desktop\\template.xlsx"),"活动信息");
        // startRow=5 行标为5的行后插入2行,样式拷贝第5行的样式
        int startRow= 5;
        int rows = 2;
        XSSFSheet sheet = (XSSFSheet)writer.getSheet();
 
        InsertRow(writer, startRow, rows, sheet,false);
    }
 
    /**
     *
     * @param writer ExcelWriter
     * @param startRow 插入行的行标,即在哪一行下插入
     * @param rows 插入多少行
     * @param sheet XSSFSheet
     * @param copyvalue 新行复制(startRow-1)行的样式,而且在拷贝行的时候可以指定是否需要拷贝值
     * @Author Wsong qzsoft
     */
    private static void InsertRow(ExcelWriter writer, int startRow, int rows, XSSFSheet sheet,Boolean copyvalue) {
        if(sheet.getRow(startRow+1)==null){
            // 如果复制最后一行,首先需要创建最后一行的下一行,否则无法插入,Bug 2023/03/20修复
            sheet.createRow(startRow+1);
        }
 
        //先获取原始的合并单元格address集合
        List<CellRangeAddress> originMerged = sheet.getMergedRegions();
 
        for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
            CellRangeAddress region = sheet.getMergedRegion(i);
            //判断移动的行数后重新拆分
            if(region.getFirstRow()>startRow){
                sheet.removeMergedRegion(i);
            }
        }
 
        sheet.shiftRows(startRow,sheet.getLastRowNum(),rows,true,false);
        sheet.createRow(startRow);
 
        for(CellRangeAddress cellRangeAddress : originMerged) {
            //这里的8是插入行的index,表示这行之后才重新合并
            if(cellRangeAddress.getFirstRow() > startRow) {
                //你插入了几行就加几,我这里插入了一行,加1
                int firstRow = cellRangeAddress.getFirstRow() + rows;
                CellRangeAddress newCellRangeAddress = new CellRangeAddress(firstRow, (firstRow + (cellRangeAddress
                        .getLastRow() - cellRangeAddress.getFirstRow())), cellRangeAddress.getFirstColumn(),
                        cellRangeAddress.getLastColumn());
                sheet.addMergedRegion(newCellRangeAddress);
            }
        }
        writer.flush();
        CellCopyPolicy cellCopyPolicy = new CellCopyPolicy();
        cellCopyPolicy.setCopyCellValue(copyvalue);
        cellCopyPolicy.isCopyCellValue();
        for (int i = 0; i < rows; i++) {
            sheet.copyRows(startRow-1,startRow-1,startRow+i,cellCopyPolicy);
        }
        writer.close();
    }
}

java读取excel模板并复制_POI复制Excel模板并填充数据 3、在javaee工程中引入poi的相关jar包,并把excel模板放入相应工程的WEB-INF目录下,名称换为temple.xlsxorg.apache.poipoi-ooxml3.12org.apache.poipoi3.12org.apache.poipoi-ooxml-schemas3.124、读取模板文件,这里读取的是xlsx方式的,//excel模板路径File f = new Fil... 阅读详情

相关推荐

POI插入EXCEL图片【成功】

这几天一直在弄POI操作EXCEL,本人用的是POI3.8,本人前面的几篇关于POI的文章全部是从各个网站拷贝过来的,实验后发现都不能很好的操作EXCEL2007+的,也就是“.xlsx‘格式的文档,本人根据前面几篇文章做了部分改动,现发出代码如下,希望能够帮到和我一样遇到同类问题的童鞋。 import java.awt.image.BufferedImage; import java.io.

ggcaozheng的专栏 2048

POI Excel 如何插入新的行?

使用shifRows方法,第1个参数是指要开始插入的行,第2个参数是结尾行数 HSSFSheet sheet = workbook.getSheetAt(0); sheet.shiftRows(12, 24, 1);

ABCAA1024的博客 4724

使用POI在Excel表中插入数据

1.如图,需要用代码控制Excel数据的生成。Excel表格式如下(有13列,部分信息已码) 2、导入POI到工程中,我用的maven仓库导入的。或者直接下载导入工程也可以 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <g...

Coding&Sharing 1173

Poi操作Excel,保留格式的情况下插入行

动态Excel处理,在指定行后插入指定数量的行,插入的行复制指定行的样式 package com.qzsoft.modules.hdexcel.service.impl; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com..

javaMylife的博客 6082

poi包 EXCEL模板读取填数据并导出以及在模板某行插入新的行

NULL 博文链接:https://gojava1.iteye.com/blog/750718

不用变压器也能联网?手把手教你PHY芯片直连的3种实用方案

本文详细介绍了PHY芯片直连的3种实用方案,帮助开发者在物联网设备中实现更经济、更精简的网络连接设计。通过分析电压驱动型和电流驱动型PHY的核心原理,提供具体的电路配置和优化建议,确保信号质量的同时节省成本和空间。

smartcontract5的博客 333

利用Apache POI在已有的Excel文件中插入一行新的数据

在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表。那么在这个章节里面,我将会给大家演示一下,如何用Apache POI在已有的Excel文件中插入一行新的数据。具体代码,请看下面的例子。 [java] view plain copy print?import java.io.File;  imp

付石头的博客 1万+

高通410刷OpenWRT后网络共享配置全攻略

本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。

grafana6viz的博客 572

POI Excel插入行,下面的行动态移动

直接上代码 package com.csk.controller; 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.poifs.fi

cooooooooold的博客 4122

从稀疏表示到低秩表示(一)

确定研究方向后一直在狂补理论,最近看了一些文章,有了些想法,顺便也总结了representation系列的文章,由于我刚接触,可能会有些不足,愿大家共同指正。 从稀疏表示到低秩表示系列文章包括如下内容: 一、 sparse representation 二、 一、 sparse representation 1  sparsity  一个线性表示解决的问题如下图所示:

彼岸花 3万+

别再瞎选了!手把手教你根据车型等级,在CarSim里快速匹配最合适的动力学模型

本文详细介绍了如何在CarSim中根据车型等级快速匹配最合适的动力学模型,提升仿真效率。通过分析CarSim模型库与A/B/C/D级车标准的对应关系,提供四步精准定位方法和不同车型的特殊处理技巧,帮助工程师避免常见错误,显著缩短模型准备时间。

weixin_27015733的博客 264

POI在指定excel插入行java

我想在第三行,插入数据库的数据,这里假如数据库有10条,并且继承第二行的格式 数据库数据{"clark",25},我写个json对象,10条这个 读xls,xlsx,io流,fastJson整体,可直接复制 结果

前方的路在刚开始 3593

单像素成像技术原理与Matlab仿真实现

傅里叶变换是数字图像处理的核心数学工具,它将图像从空间域转换到频率域表示。基于傅里叶频谱分析的成像技术通过采集关键频率分量实现图像重建,这种原理催生了单像素成像这一创新技术。单像素成像利用空间光调制器和单个探测器直接测量傅里叶系数,结合压缩感知算法实现高效成像,在红外、太赫兹等特殊波段展现出独特优势。通过Matlab仿真可以验证傅里叶基测量矩阵的构建、压缩感知重建等关键技术环节,为实际系统开发提供理论基础。该技术在弱光环境成像、显微观测等领域具有重要应用价值,其低成本特性也大大降低了特殊波段成像的门槛。

weixin_29061425的博客 345

Java中POI操作Excel常用方法

一、 POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对MicrosoftOffice格式档案读和写的功能。 二、 HSSF概况 HSSF 是HorribleSpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和e

zxh66的专栏 1万+

获取微信公众号历史文章列表页链接

action=home&__biz=这里替换你的biz==4、链接分享、发送到微信即可访问,注意该链接仅可在微信客户端使用,外部浏览器无法打开。3、拼接通用公式生成链接即为微信公众号历史文章列表链接。,如下图找到红框部分值,复制即为上文biz值。2、浏览器右键查看网页源码,新开页面搜索(1、复制公众号任意文章的链接在浏览器打开。

珞瑜的博客 7958

Agent应用实践之三十六 - AgentScope高阶用法:AG-UI

AI 大模型飞速进化,不懂 AI、不会用 Agent 的程序员,正在慢慢被行业淘汰。现在 AI 新技术迭代快到离谱:RAG 还没学明白,MCP 接踵而来;工具刚上手,Skills、各类新 Agent 概念又轮番刷屏;Manus还没看懂,就出来OpenClaw,OpenClaw热度还没退,又出来Hermes。越追越乱、越学越焦虑,永远在被动跟风,陷入学不完、跟不上、用不上的内耗。其实焦虑的根本原因,不是新技术太多,而是不懂大模型 Agent 应用底层原理,只会零散跟风,没有通用方法论。为此我专门推出Agent

代码让AI扣 140

POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】

原文:http://javacrazyer.iteye.com/blog/894758 实际开发过程中通常用到的就是从数据库导出EXCEL表格了,JXL可以这样做,其实POI也可以(关于JXL与POI的异同可访问我之前总结的文章),之前写过POI对七种文档(当然也包括EXCEL)的内容读取操作的文章,这次要写的就非常重要了,就是开发中经常会用到的POI读取数据库导出EXC

Frist_huangsuli的专栏 2万+

在时间轴上联动多张内表:ABAP 的 PROVIDE ... ENDPROVIDE 区间联动迭代实战

PROVIDE 是 ABAP 中处理有效期区间数据的强大工具,它能自动将多张内表按时间维度切片并联合处理。其核心功能包括:指定区间边界字段(BOUNDS),定义外部总区间(BETWEEN),并通过工作区和标志位(VALID)标识每张表在当前子区间是否生效。该语法特别适合 HR 信息类型等有效期数据,能避免手动处理区间重叠、排序和空档等问题。使用时需注意字段投影(FIELDS)限制、工作区只读原则,以及异常处理(如区间重叠或未排序)。典型应用场景包括员工调岗记录、价格有效期管理等需要时间轴联动的业务逻辑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1672

利用Java+POI 读写Excel文档&向Excel中插入图片

<br />一.POI简介<br />Jakarta POI是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API<br />目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。<br />二.HSSF概况<br />HSSF是Horrible SpreadSheet Format的缩写,也即“讨厌的电

lizhenchao2009的专栏 3490

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POI操作Excel文档-插入图片

转自: http://dev.firnow.com/course/3_program/java/javajs/20100412/202070.html一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等

java journey 1845

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

excel poi 加背景图_java 在Excel中插入图片 POI实现

一、POI简介Jakarta POI是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。二、HSSF概况HSSF是Horrible S...

weixin_39959615的博客 1116

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

poi操作 excel 中文API文档

poi操作 excel 中文API文档 依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <depende

Mr_going的博客 2382

Java POI Excel移动行和复制行的处理

目录 Java POI Excel移动行和复制行的处理 坑点: 实现的代码 Java POI Excel移动行和复制行的处理 POI操作Excel时,不支持移动行的操作,因此在需要通过复制行+删除行+创建空白行的组合方式来达成移动行的效果。 坑点: POI操作Excel文档和Excel软件操作文档的理解是不一样的,Excel软件日常操作时不是严格区分空白行和空行,而POI操作时必须严格区分,空白行可以直接操作,而空行则必须先执行创建行操作后才能操作。 copyRows复制行从源位置到目标位.

飞一站的博客 5935

POI 操作EXCEL 之插入图片 2003,2007

原文链接出自:https://silencelyn.iteye.com/blog/2170520 package com.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import...

不抛弃、不放弃:Aaron莫言 1025

Java操作Excel(Apache Poi详解)

在Java中操作Excel是日常工作中经常遇到的问题。使用Apache Poi是一种流行且广泛使用的方式,它提供了各种库和工具,可以帮助开发人员直接从Java代码中读取、写入和处理Excel文件。本篇文章将详细介绍如何使用Apache Poi来进行Excel文件操作,在这里,我们着重讲解Apache Poi的基础知识、如何读取Excel文件以及如何编写数据到Excel文件。

java_beautiful的博客 1112
上一篇: 常用docker容器安装,mysql,redis,clickhouse,elasticsearch
下一篇: Flink 双流Join
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值