poi 多行合并

poi做多行合并,一定需要先绘制单元格,然后写入数据,最后合并,不然各种坑啊。

 

 

合并单元格所使用的方法:

sheet.addMergedRegion( CellRangeAddress  cellRangeAddress  );
 
CellRangeAddress  对象的构造方法需要传入合并单元格的首行、最后一行、首列、最后一列。
CellRangeAddress cra=new CellRangeAddress(0, 3, 3, 9);
 
怎样把数据写入合并后的单元格中
  1. 首先要查看你 CellRangeAddress 构造方法的firstcol index
  2. 创建firstcol cell对象
  3. cell 的set 方法写数据
在合并单元格的后一个位置写数据
  1. 查看  CellRangeAddress 构造方法的lastcol index     
  2. 创建lastcol+1  cell
  3. cell 的set方法写数据

 

附上一个例子:

public static void test() {
        String beginTime = "2017-10-08";
        String endTime = "2017-10-11";
        HSSFWorkbook wb = new HSSFWorkbook();
        Date b = DateUtil.parse(beginTime, "yyyy-MM-dd");
        Date e = DateUtil.parse(endTime, "yyyy-MM-dd");
        String bs = DateUtil.format(b, "MM.dd");
        String es = DateUtil.format(e, "MM.dd");
        String sheetName = bs + "-" + es;
        HSSFSheet sheet = wb.createSheet(sheetName);

        HSSFRow row = sheet.createRow((short) 0);// 第一行
        // 定制表头
        List<String> header = new ArrayList<>();
        header.add("部门");
        header.add("岗位");
        header.add("员工编号");
        header.add("姓名");
        header.add("服务中心名称");
        header.add("时间段");
        header.add("次数");
        header.add("走访日期");
        header.add("到店时段");
        header.add("时长(分钟)");

        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 水平居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
        style.setWrapText(true);// 自动换行
        style.setIndention((short) 5);// 缩进

        for (int i = 0; i < header.size(); i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(header.get(i));
        }

        // List<OaPunchVisitDataDto>
        // dtos=oaReportDao.findPunchVisitData(beginTime, endTime, departName,
        // name);
        List<OaPunchVisitDataDto> dtos = Lists.newArrayList();
        OaPunchVisitDataDto dto = new OaPunchVisitDataDto();
        dto.setNAMES("张三");
        dto.setDEPARTNAME("开发部");
        dto.setLOCATION_TITLE("五里店");
        dto.setUSERID("10000");
        dto.setPOSITION("员工");
        dto.setCHECK_TIME("2017-10-09");
        dto.setCHECK_ATS("2017-10-09 09:54,2017-10-09 17:54"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值