1.背景

在实际开发中导出Excel报表数据是很常见的功能

这篇文章重点讲解一下如何合并单元格

2.实现代码

导出样式

这里只是给出合并单元格的思路,具体样式和字体需要自己设置

行数据模型

public class ExcelObject {// 序号private Integer num;// 部门private String departmentName;// 小组private String groupName;// 小组2private String subGroupName;// 事务 3行private List<String> task;// 具体事项 5行private List<String> taskDeatil;
}

导出代码demo

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** @Copyright (C) XXXXXXXXXXX科技股份技有限公司* @Author: lidongping* @Date: 2021-08-20 10:23* @Description: <p>* 合并单元格的方法:* 指定 4 个参数,起始行,结束行,起始列,结束列。然后这个区域将被合并。* CellRangeAddress region01 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 0, 0);* sheet.addMergedRegion(region01);* </p>*/
public class TestExcel01 {public static void main(String[] args) throws IOException {// 定义excel表格HSSFWorkbook workbook = new HSSFWorkbook();HSSFCellStyle style = workbook.createCellStyle();HSSFSheet sheet = workbook.createSheet("周明细");CellRangeAddress regionx = new CellRangeAddress(0, 0, 0, 5);sheet.addMergedRegion(regionx);// 表头数据List<String> title = new ArrayList<String>();title.add("序号");title.add("部门");title.add("小组");title.add("小组II");title.add("事务"); // 3行title.add("具体事项"); // 5行// 第一行 标题HSSFRow row0 = sheet.createRow(0);HSSFCell cell_00 = row0.createCell(0);cell_00.setCellValue("周计划");cell_00.setCellStyle(style);// 第二行 表头设置HSSFRow row1 = sheet.createRow(1);for (int i = 0; i < title.size(); i++) {String s = title.get(i);HSSFCell cell = row1.createCell(i);cell.setCellValue(s);}// 表行数据 第三行开头List<ExcelObject> dataList = createData();int rowNum = 2;for (int i = 0; i < dataList.size(); i++) {// 创建行ExcelObject excelObject = dataList.get(i);Integer rowNumTaskDeatil = excelObject.getTaskDeatil().size();for (int j = 0; j < rowNumTaskDeatil; j++) {HSSFRow row = sheet.createRow(rowNum);// 填充列数据HSSFCell cell0 = row.createCell(0);HSSFCell cell1 = row.createCell(1);HSSFCell cell2 = row.createCell(2);HSSFCell cell3 = row.createCell(3);HSSFCell cellTAsk4 = row.createCell(4);HSSFCell cellTAskDetail5 = row.createCell(5);if (j == 0) {cell0.setCellValue(excelObject.getNum());cell1.setCellValue(excelObject.getDepartmentName());cell2.setCellValue(excelObject.getGroupName());cell3.setCellValue(excelObject.getSubGroupName());}//事务设置  创建多行用于合并使用if (j < excelObject.getTask().size()) {cellTAsk4.setCellValue(excelObject.getTask().get(j));}// 设置事项明细cellTAskDetail5.setCellValue(excelObject.getTaskDeatil().get(j));rowNum = rowNum + 1;}// 合并 序号CellRangeAddress region01 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 0, 0);sheet.addMergedRegion(region01);// 合并 部门CellRangeAddress region02 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 1, 1);sheet.addMergedRegion(region02);// 合并 小组CellRangeAddress region03 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 2, 2);sheet.addMergedRegion(region03);// 合并 小组2CellRangeAddress region04 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 3, 3);sheet.addMergedRegion(region04);// 合并事务CellRangeAddress region05 = new CellRangeAddress(i * 5 + 4, i * 5 + 6, 4, 4);sheet.addMergedRegion(region05);}// 文件输出String fileName = "F:\\excelTest\\周计划测试-" + System.currentTimeMillis() + ".xls";File file = new File(fileName);FileOutputStream fout = new FileOutputStream(file);workbook.write(fout);fout.close();System.out.println("导出完成fileName=" + fileName);}/*** 模拟数据 10行** @return*/private static List<ExcelObject> createData() {List<ExcelObject> dataList = new ArrayList<ExcelObject>();for (int i = 0; i < 10; i++) {int num = i + 1;ExcelObject rowList = new ExcelObject();rowList.setNum(num);rowList.setDepartmentName("部门-" + num);rowList.setGroupName("小组-" + num);rowList.setSubGroupName("小组II-" + num);rowList.setTask(createData03(num));rowList.setTaskDeatil(createData05(num));dataList.add(rowList);}return dataList;}/*** 创建三个子项,用于事务*/private static List<String> createData03(Integer num) {List<String> list = new ArrayList<String>(3);for (int i = 1; i <= 3; i++) {list.add(num + "-事务子项-" + i);}return list;}/*** 创建5个子项,用于具体事项*/private static List<String> createData05(Integer num) {List<String> list = new ArrayList<String>(3);for (int i = 1; i <= 5; i++) {list.add(num + "-具体事子项-" + i);}return list;}
}

3.完美

POI-HSSFWorkbook合并单元格相关推荐

  1. POI获取合并单元格的值

    POI获取合并单元格时,如果是遍历获取合并单元格的所有子单元格的值,office的excel都会有值,wps的excel只会第一个子单元格有值,其他子单元格都没值,即cell=null.故意凡是获取合 ...

  2. poi读取合并单元格

    poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...

  3. Apache POI读合并单元格

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/77193464,建议读者阅读原文,确保获得完整的信息 场景 ...

  4. java POI 实现合并单元格

    合并单元格所使用的方法: sheet.addMergedRegion( CellRangeAddress  cellRangeAddress  ); CellRangeAddress  对象的构造方法 ...

  5. Java poi导入合并单元格的excel数据【最完整】附pom文件和excel截图

    代码如下: package com.haha.demo;import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermo ...

  6. java poi excel合并单元格 相同的列以及在有父级约束条件下合并二级列

    import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress;public clas ...

  7. java poi居中_使用apache poi在合并单元格中水平居中图像

    将图片放置在Excel表格中是一件棘手的事情,因为图片被锚定在两个单元格上.左上角的锚点单元加上delta-x和delta-y来确定图片左上角的位置.右下角锚点单元格加上delta-x和delta-y ...

  8. 【Java】poi | excel | 合并单元格

    一.说明 1.maven项目 2.基于ruoyi-fast 二.解决方案 1.合并行 需求:合并第一行和第二行 解决: CellRangeAddress region = new CellRangeA ...

  9. Java POI 导出 Excel 单元格 合并单元格 相邻的相同值 合并

    通过poi导出合并单元格 合并单元格 并合并相邻并相同值的单元格 poi依赖 <dependency><groupId>org.apache.poi</groupId&g ...

  10. bootstraptable合并标题_bootstrapTable 合并单元格

    /** * 合并单元格 * @param data 原始数据(在服务端完成排序) * @param fieldName 合并属性名称 * @param colspan 合并列 * @param tar ...

最新文章

  1. Linux下使用Vim粘贴文本错乱问题解决
  2. pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)--转载...
  3. mysql错误:……is marked as crashed and should be repai
  4. 数据导出到Excel
  5. 均方误差、平方差、方差、均方差、协方差(重点)
  6. java后ping不是内部_ping不是内部或外部命令,也不是可运行的程序解决方案
  7. 走近分形与混沌(part7)--三体与混沌
  8. ltrim函数php,php ltrim函数怎么用?
  9. Oracle触发器2-DML触发器
  10. 简易博客编辑器:玩转document.execCommand命令
  11. excel频率分布表的绘制
  12. hadoop保姆级安装教程
  13. 入行自媒体怎么快速变现,详细教程,教你手把手运营
  14. js 验证身份证格式
  15. ibm邮件怎么撤回_请问LotusNotes具备发出邮件后撤回 – 手机爱问
  16. 一台主机 两台显示器 就可以两个用户同时使用电脑
  17. LHS与RHS查询(已完结)
  18. 【Flash笔记】Flash-8动画入门常见问题解决办法
  19. 怎么在php中设置收藏按钮,如何在ecshop首页给商品加入立即购买与收藏按钮
  20. arcgis表转excel一直失败_arcGIS中属性表怎么导出到EXCEL里|excel表格转shp数据丢失...

热门文章

  1. 计算机word铁路试题,计算机word试题含答案
  2. 【docker】 docker-server启动重启关闭
  3. 手把手教你批量收藏宗介和波妞壁纸
  4. galaxy nexus升级包takju-jop40d的boot.img和recovery.img中ramdisk对比
  5. 访问者模式Visitor
  6. 再议访问者模式 - Visitor vs Acyclic Visitor
  7. scrum要素读书笔记
  8. C语言 生产者消费者模型
  9. Scrapy 2.6 Items 数据项定义、加载、传输使用指南
  10. 【Matlab学习手记】bsxfun的使用