Apache POI 合并单元格

package com.ltsk.whcg.test;

import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class Test {

    @RequestMapping("test55")
    public String demo(HttpServletResponse response) {
        try {
            XSSFWorkbook book = new XSSFWorkbook();
            List<Map<String, Object>> czjl_tj = new ArrayList<>();
            for (int i = 0; i < 100; i++) {
                HashMap<String, Object> map = new HashMap<>();
                map.put("AREA", "111");
                map.put("TRANSPORTUNIT", "111");
                map.put("CARNO", "111");
                map.put("COUNT", "111");
                map.put("SUM", "111");
                czjl_tj.add(map);
            }

            String[] title = {"行政区", "运输单位", "车牌号", "车数", "垃圾量(吨)"};
            int mus = 100;
            int total = czjl_tj.size();
            int page = total / mus;
            int left = total%mus;
            if(left!=0){
              page += 1;
            }
            XSSFSheet sheet = null;
            for (int i = 0; i < page; i++) {
                sheet = book.createSheet("第" + (i + 1) + "页");
                XSSFRow row = sheet.createRow(0);
                int headInt = 0;
                for (String t : title) {
                    row.createCell(headInt++).setCellValue(t);
                }
                int num = i * mus;
                int index = 0;
                int rowInt = 1;
                for (int m = num; m < czjl_tj.size(); m++) {
                    if (index == mus) {// 判断index == mus的时候跳出当前for循环
                        break;
                    }
                    row = sheet.createRow(rowInt++); // 创建行
                    Map<String, Object> map = czjl_tj.get(m);
                    row.createCell(0).setCellValue(map.get("AREA").toString());
                    row.createCell(1).setCellValue(map.get("TRANSPORTUNIT").toString());
                    row.createCell(2).setCellValue(map.get("CARNO").toString());
                    row.createCell(3).setCellValue(map.get("COUNT").toString());
                    row.createCell(4).setCellValue(map.get("SUM").toString());
                    index++;
                }
//				合并单元格
                excel(sheet, 0);
                excel(sheet, 1);
            }
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            OutputStream os = response.getOutputStream();
            response.setHeader("Content-disposition", "attachment;filename=test.xls");//默认Excel名称
            book.write(os);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success!";
    }

    //	合并相同内容的行
    public static void excel(XSSFSheet sheet, int cell) {
        int start = 1;
        for (int j = 0; j < sheet.getLastRowNum() - 1; j++) {
            String value = sheet.getRow(j + 1).getCell(cell).getStringCellValue();
            String value2 = sheet.getRow(j + 2).getCell(cell).getStringCellValue();
            if (!value.equals(value2)) {
                if (start != j + 1)
                    sheet.addMergedRegion(new CellRangeAddress(start, j + 1, cell, cell));
                start = j + 2;
            }
            if (value.equals(sheet.getRow(sheet.getLastRowNum()).getCell(cell).getStringCellValue())) {
                if (start != sheet.getLastRowNum())
                    sheet.addMergedRegion(new CellRangeAddress(start, sheet.getLastRowNum(), cell, cell));
                break;
            }
        }
    }

}

结果
在这里插入图片描述
合并纵向单元格

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Apache POI 的 `CellRangeAddress` 类来获取表格中的合并单元格信息。以下是获取合并单元格起始和结束行列号的示例代码: ```java import org.apache.poi.ss.usermodel.*; public class ExcelUtils { public static CellRangeAddress getMergedRegion(Sheet sheet, int row, int column) { for (int i = 0; i < sheet.getNumMergedRegions(); i++) { CellRangeAddress merged = sheet.getMergedRegion(i); if (merged.isInRange(row, column)) { return merged; } } return null; } public static int getMergedRegionStartRow(CellRangeAddress merged) { return merged.getFirstRow(); } public static int getMergedRegionEndRow(CellRangeAddress merged) { return merged.getLastRow(); } public static int getMergedRegionStartColumn(CellRangeAddress merged) { return merged.getFirstColumn(); } public static int getMergedRegionEndColumn(CellRangeAddress merged) { return merged.getLastColumn(); } } ``` 使用示例: ```java Sheet sheet = workbook.getSheetAt(0); Cell cell = sheet.getRow(1).getCell(1); // 获取合并单元格信息 CellRangeAddress merged = ExcelUtils.getMergedRegion(sheet, cell.getRowIndex(), cell.getColumnIndex()); if (merged != null) { int startRow = ExcelUtils.getMergedRegionStartRow(merged); int endRow = ExcelUtils.getMergedRegionEndRow(merged); int startColumn = ExcelUtils.getMergedRegionStartColumn(merged); int endColumn = ExcelUtils.getMergedRegionEndColumn(merged); System.out.println("合并单元格起始行:" + startRow); System.out.println("合并单元格结束行:" + endRow); System.out.println("合并单元格起始列:" + startColumn); System.out.println("合并单元格结束列:" + endColumn); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值