poi导出excel,数据相同时自动居中合并

这段代码展示了如何使用HSSFCellStyle在Excel中设置单元格样式为居中对齐,并通过遍历对象集合和指定列数组,实现特定列的单元格合并。它首先创建样式并设置文字居中,然后定义需要合并的列,接着根据对象ID判断并合并相同的行。最后,将合并信息应用到工作表的相应区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 设置格式样式
HSSFCellStyle cellStyle = (HSSFCellStyle) workbook.createCellStyle();
// 设置所有单元格文字左右居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置所有单元格文字上下居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);


//将需要合并的列,放入数组
int[] arr = new int[]{13,14,15,16};
//根据唯一标识来id判断,合并对应的单元格
List<Excel> merge = merge(dataList, arr);
for (Excel excel : merge) {
   sheet.addMergedRegion(new CellRangeAddress(excel.getStartRow(),excel.getEndRow(),excel.getStartCol(),excel.getEndCol()));
}


//传入导出的对象集合,并传入需要合并的列数组
private static List<Excel> merge(List<Contract> list, int[] arr){
   int start = 1;//记录开始行号(0行为表头,需要去除)
   int end = 1;//记录结束行号
   int count = 1;//记录结束行号
   List<Excel> excel = new ArrayList<Excel>();
   //遍历集合,判断,id一样的有几个
   for (int i = 0; i < list.size(); i++) {
      Integer id1 = list.get(i).getId();
      Integer id2 = 0;
      if (i+1<list.size()){
         id2 = list.get(i + 1).getId();
      }
      if (id1.equals(id2)){
         end = i+2;
      }else {
         if (start != end){
            start = count;
            for (int a : arr) {
               excel.add(new Excel(start,end,a,a));
            }
         }
         count = i+2;
         start =end;
      }
   }
   return excel;
}

// 设置格式样式
HSSFCellStyle cellStyle = (HSSFCellStyle) workbook.createCellStyle();
// 设置所有单元格文字左右居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置所有单元格文字上下居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

//将需要合并的列,放入数组
int[] arr = new int[]{13,14,15,16};
//根据唯一标识来id判断,合并对应的单元格
List<Excel> merge = merge(dataList, arr);
for (Excel excel : merge) {
   sheet.addMergedRegion(new CellRangeAddress(excel.getStartRow(),excel.getEndRow(),excel.getStartCol(),excel.getEndCol()));
}
//传入导出的对象集合,并传入需要合并的列数组
private static List<Excel> merge(List<Contract> list, int[] arr){
   int start = 1;//记录开始行号(0行为表头,需要去除)
   int end = 1;//记录结束行号
   int count = 1;//记录结束行号
   List<Excel> excel = new ArrayList<Excel>();
   //遍历集合,判断,id一样的有几个
   for (int i = 0; i < list.size(); i++) {
      Integer id1 = list.get(i).getId();
      Integer id2 = 0;
      if (i+1<list.size()){
         id2 = list.get(i + 1).getId();
      }
      if (id1.equals(id2)){
         end = i+2;
      }else {
         if (start != end){
            start = count;
            for (int a : arr) {
               excel.add(new Excel(start,end,a,a));
            }
         }
         count = i+2;
         start =end;
      }
   }
   return excel;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值