集大成之作,看了好多文章才搞定的

POI shiftRows后合并单元格丢失的解决办法_悟达居士-CSDN博客

[java] POI shiftRows 移动后合并的单元格被拆分了_qq_21612885的博客-CSDN博客

package com.qzsoft.modules.hdexcel.service.impl;import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.qzsoft.modules.hdexcel.service.HdExcelService;
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 HdExcelServiceImpl implements HdExcelService {public static void main(String[] args) {ExcelWriter writer = ExcelUtil.getWriter(new File("C:\\Users\\Wsong\\Desktop\\template.xlsx"),"活动信息");// startRow=5 行标为5的行后插入2行,样式拷贝第四行的 所以必须index>0int 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) {//先获取原始的合并单元格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) {//你插入了几行就加几,我这里插入了一行,加1int 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();}
}

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

  1. 如何在不丢失格式的情况下将 Excel 转换为 PDF?

    Microsoft Excel 因其专业的数据或信息显示能力而被广泛采用.但是,它在兼容性上有一个恼人的缺点. 首先,Excel只能在Windows和MacOS上使用,Linux或其他操作系统的用户将 ...

  2. Apache POI操作Excel文件

    Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用PO ...

  3. POI操作excel基本使用

    不用多说,下面的一个类中就是一些POI操作Excel (xls) 的常见操作.但是真正要生成一些如报表等复杂格式Excel的时候,通常的做法都是事先把格式一切的东西都手动制作好("数据模板& ...

  4. poi操作excel之填充数据、删除行

    poi操作excel之填充数据.删除行 每篇一句励志:有人说,这世间有两种浪漫,一种是相濡以沫,另一种是相忘于江湖. 废话不多说,直接上代码! // 获取到你要填充数据的sheet XSSFSheet ...

  5. Apache POI操作Excel导出JAVABEAN对象方法

    2019独角兽企业重金招聘Python工程师标准>>> Apache POI操作Excel导出方法说明 Apache的POI组件是Java操作Microsoft Office办公套件 ...

  6. java apache.poi_Java利用apache的POI操作Excel

    最近在写一些报表的活,顺便总结下...第一篇博文,希望多多指教. 项目中经常会设计到一些数据的报表问题,目前java中操作Excel的插件也有很多 ,我说下用apache的POI操作Excel的方法. ...

  7. 自己封装的poi操作Excel工具类

    在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完成的功能是:读取Excel.汇总Exc ...

  8. poi操作 excel 中文API文档

    poi操作 excel 中文API文档 依赖: <dependency><groupId>org.apache.poi</groupId><artifactI ...

  9. 简单实现POI操作Excel生成数据透视图

    简单实现POI操作Excel生成数据透视图 需求 思考 尝试 实现 搞完收工,去画模板了 需求 财务部门需要做一自动导出数据报表的功能,其中要有指定格式的数据透视图(柱状图.饼状图等等) 思考 正常来 ...

最新文章

  1. bg和fg指令(整理)以及 Linux中Ctrl+C、Ctrl+D等按键操作进程相关命令
  2. java list负载_java集合的扩容和负载因子的总结
  3. 零基础入门 HTML 的 8 分钟极简教程
  4. Nginx的功能特性及常用功能
  5. 牛客题霸 [寻找第K大] C++题解/答案
  6. 独立站现在好不好做?
  7. 【Express】—Express路由请求
  8. 关于js返回上一页的实现方法
  9. MTK: mtk 10A 建立socket连接问题
  10. 手动触发事件_HBase中MemStore的刷写触发机制
  11. Shopee运营中如何规避账号安全风险?站斧超级浏览器防关联运营
  12. 解决CentOS小数字键盘失效,按NumLock无效的方法
  13. 计算机操作系统安全序列详解,操作系统知识梳理
  14. 五月的庐州城《柳絮》
  15. 报名 微信 投票 php,女神微信投票PHP源码带PC报名和手机报名吸粉做微信活动必备...
  16. html5+css3实现2D动画效果演示
  17. Eclipse如何安装lombok插件
  18. 一些时间的概念与区分(UTC、GMT、LT、TAI等)
  19. 基于springboot的工资管理系统
  20. 软件测试app内存溢出,浅析软件测试人员如何对JVM进行内存溢出检测

热门文章

  1. 《三十岁前的每一天》--水湄物语 读后感
  2. VUE项目学习(三):win10版nginx部署vue项目
  3. 在HTTPS网站安装百度分享按钮代码及其SEO外链作用
  4. python如何横向输出_python数据竖着怎么变横的?
  5. 【Roboware编译(小锤子)无法选择Debug选项】
  6. ro服务器物品掉率修改,给冒险者们的一封致歉信 社交服务器持续优化 仙境传说手游常见BUG解答...
  7. HTML+CSS项目总结(建议学习三周后)
  8. 高仿微信 Windows 端
  9. openfeign远程调用接口报错:feign.codec.DecodeException: Error while extracting response for type
  10. 转录组入门(2):读文章拿到测序数据