POI在行合并时时,弹出merge警告后处理

       首先是通过查询语句获取到二维数组的结果集,之后调用excel的模板或者直接创建工作薄对象WritableWorkbook,将数据写入。此时工作薄对象内是类似用SQL语句在Navicat等工具内查询时显示。

       此时如果需要对相同记录的相同列内容进行合并,如大小项时,或者按类别分类后,合并类别那一列等情况。在合并时逻辑上是根据要合并的列来GROUP BY。 然后取第一条数据,依次与之后的进行比较,如果相同则合并,不同则用下一条记录比较。

       原理:但实现时,可以先将第i条数据与第i+1条比较,如果相同则记录行号i+1,再与下一条i+2比较,直到i+n不同时,合并第i-(i+n-1)条。

注意: 此时正常情况下会将第i+1条执行以上循环,由于他已经被合并了,所以会提示合并警告,提示无法合并。因此,在每次合并完后,需要将合并的最后行数-1 作为比较的起始行, 如上一次合并了第1-5条,则下一次需要从5开始跟6比较,为什么不直接从6开始,是因为这样可以避免合并空行。


   部分代码截图如上,这是第一次写博客,用来记录自己这段时间的一丢丢收获吧。有错误的话帮忙大笑指出下谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用POI的方法来合并单元格和复制合并后的单元格可以分为以下几步: 1. 创建一个新的工作簿和一个新的工作表。 ```java Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet1"); ``` 2. 合并需要合并的单元格。 ```java CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1); // 合并第1和第2的第1列和第2列 sheet.addMergedRegion(region); ``` 3. 复制合并后的单元格。 ```java Row row = sheet.getRow(0); // 获取第1 Cell cell = row.getCell(0); // 获取第1第1列的单元格 Cell mergedCell = sheet.getRow(region.getFirstRow()).getCell(region.getFirstColumn()); // 获取合并后的单元格 cell.setCellValue(mergedCell.getStringCellValue()); // 将合并后的单元格的值赋值给第1第1列的单元格 ``` 完整的代码示例: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class MergeCellsAndCopy { public static void main(String[] args) throws IOException { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet1"); CellStyle style = wb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); Row row1 = sheet.createRow(0); Cell cell11 = row1.createCell(0); cell11.setCellValue("A1"); cell11.setCellStyle(style); Cell cell12 = row1.createCell(1); cell12.setCellValue("B1"); cell12.setCellStyle(style); Row row2 = sheet.createRow(1); Cell cell21 = row2.createCell(0); cell21.setCellValue("A2"); cell21.setCellStyle(style); Cell cell22 = row2.createCell(1); cell22.setCellValue("B2"); cell22.setCellStyle(style); CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1); sheet.addMergedRegion(region); Row row = sheet.getRow(0); Cell cell = row.getCell(0); Cell mergedCell = sheet.getRow(region.getFirstRow()).getCell(region.getFirstColumn()); cell.setCellValue(mergedCell.getStringCellValue()); FileOutputStream fileOut = new FileOutputStream("merge_cells_and_copy.xlsx"); wb.write(fileOut); fileOut.close(); wb.close(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值