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

package com.oop.createObj;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.stream.Stream;/*** @ProjectName: spring-boot-lantian* @Package: com.oop.createObj* @ClassName: SendFactoryTest* @Author: zhangs* @Email: 853632587@qq.com* @Description: 工厂模式测试* @Date: 2020/11/4 15:53* @Version: 1.0*/
public class SendFactoryTest {public static void main(String[] args) throws Exception {//Sender mail= SendFactory.produceMail();//mail.send();HSSFWorkbook wk=new HSSFWorkbook(new FileInputStream("E://订单导出.xls"));HSSFSheet sheet=wk.getSheetAt(0);int rows=sheet.getPhysicalNumberOfRows();int cells=sheet.getRow(0).getPhysicalNumberOfCells();for(int r=0;r<rows;r++){HSSFRow row=sheet.getRow(r);StringBuilder str=new StringBuilder();for(int c=0;c<cells;c++){HSSFCell cell=row.getCell(c);if(isMergedRegion(sheet,r,c)){str.append(">>>"+getMergedRegionValue(sheet,r,c)+"||");}else{str.append(">>>"+row.getCell(c)+"||");}}System.out.println(r+"str"+str);str.setLength(0);}}/*** 判断指定的单元格是否是合并单元格* @param sheet* @param row 行下标* @param column 列下标* @return*/private static  boolean isMergedRegion(Sheet sheet, int row , int column) {int sheetMergeCount = sheet.getNumMergedRegions();for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress range = sheet.getMergedRegion(i);int firstColumn = range.getFirstColumn();int lastColumn = range.getLastColumn();int firstRow = range.getFirstRow();int lastRow = range.getLastRow();if(row >= firstRow && row <= lastRow){if(column >= firstColumn && column <= lastColumn){return true;}}}return false;}/*** 获取合并单元格的值* @param sheet* @param row* @param column* @return*/public static String getMergedRegionValue(Sheet sheet ,int row , int column){int sheetMergeCount = sheet.getNumMergedRegions();for(int i = 0 ; i < sheetMergeCount ; i++){CellRangeAddress ca = sheet.getMergedRegion(i);int firstColumn = ca.getFirstColumn();int lastColumn = ca.getLastColumn();int firstRow = ca.getFirstRow();int lastRow = ca.getLastRow();if(row >= firstRow && row <= lastRow){if(column >= firstColumn && column <= lastColumn){Row fRow = sheet.getRow(firstRow);Cell fCell = fRow.getCell(firstColumn);return getCellValue(fCell) ;}}}return null ;}/*** 获取单元格的值* @param cell* @return*/public  static String getCellValue(Cell cell){if(cell == null) return "";return cell.toString();}public static void main1(String[] args){Object[][] rowName = new Object[][]{{"序号",2000,"NM"},{"分组编号",2000,"NM"},{"订单编号",6500,"NM"},{"第三方订单号",6500,"CM"},{"SKU",2500,"NM"},{"订单金额",2500,"CM"},{"运费",2500,"CM"},{"商品名称",12000,"NM"},{"规格",7000,"NM"},{"单位",2500,"NM"},{"数量",2500,"NM"},{"单价",2500,"NM"},{"金额",2500,"NM"}, {"税率",2500,"NM"},{"税额",2500,"NM"},{"结算主体",7000,"M"},{"发票抬头",12000,"M"},{"发票类型",2500,"M"},{"客户名称",7000,"M"},{"项目名称",5000,"M"},{"采购员",5000,"M"},{"收件人",6500,"M"},{"详细地址",7000,"M"},{"店铺",7000,"M"},{"订单状态",2500,"CM"},{"订单标签",4500,"CM"},{"结算状态",4500,"CM"},{"发票编号",5000,"CM"},{"订单开始时间",5000,"CM"},{"审批完成时间",5000,"CM"},{"订单完成时间",5000,"CM"},{"下单月",5000,"CM"}, {"订单完成月",5000,"CM"},{"商品一级分类",5000,"NM"}, {"商品二级分类",5000,"NM"}, {"商品三级分类",5000,"NM"}};Stream.iterate(0, i -> i + 1).limit(rowName.length).forEach(i -> System.out.println(rowName[i][2]));}
}

POI获取合并单元格的值相关推荐

  1. poi读取合并单元格

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

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

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

  3. php excel获取合并单元格的内容,并自动向上获取第一个有值的单元格数据

    获取合并单元格的数据 Yii::$enableIncludePath=false;         Yii::import('application.extensions.PHPExcel.PHPEx ...

  4. Apache POI读合并单元格

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

  5. VBA中获取合并单元格的真实地址

    2019独角兽企业重金招聘Python工程师标准>>> 二少工作需要在VBA中获取合并单元格的地址范围, 于是有了此方法,作此记录 Private Sub Worksheet_Bef ...

  6. npoi获取合并单元格_梦琪小生 C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

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

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

  8. poi 获取excel单元格超链接和设置excel单元格超链接及导出excel

    导入excel及需要的jar包看之前链接:https://blog.csdn.net/sipengfei_/article/details/88184964 先说一下导出的时候怎么给单元格设置超链接, ...

  9. java POI 实现合并单元格

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

最新文章

  1. 三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
  2. Nosql简介 Redis,Memchche,MongoDb的区别
  3. 义教资料均衡验收计算机室解说词,义教均衡迎检现场会导引解说词
  4. uva 558 Wormholes
  5. 3 Curator框架实现分布式锁
  6. oracle 计算公式解析,用PL/SQL如何实现公式解析计算
  7. javascript总for of和for in的区别?
  8. 朋友圈新增访客记录?大众点评辟谣”被放弃”;百度 7 款 APP 进入 App Store 前十 | 极客头条...
  9. EF架构~将数据库注释添加导入到模型实体类中
  10. 大学生买macbookpro合适吗?
  11. 公司人事管理系统(C++)
  12. 如何干净的卸载Mac版VMware Fusion
  13. cocos creator周边工具开发【spine预览】小记
  14. java 内存很高_Java服务器内存和CPU占用过高的原因
  15. android ios图片丢失,如何恢复iPhone、安卓智能手机上误删、丢失的图片?
  16. win10关闭防火墙脚本.bat
  17. 全志T7 Display驱动简介
  18. pycharm找不到安装包解决方法
  19. 宝塔绑定域名访问不了_建站系列教程(二)--本地局域网访问和域名解析
  20. python selenium语法_selenium之xpath语法总结

热门文章

  1. saltstack(4)动态pillar
  2. 域名,COOKIE是什么?有什么用处?COOKIE SESSION的区别?COOKIE的失效期?
  3. 忘记IBM,联想进入赢利性增长
  4. 联想 23 亿美元收购 IBM x86 服务器业务
  5. 计算机二级c语言教学百度网盘,职业资格认证教程:计算机等级考试二级C语言MS Office高级应用视频教程(共42讲)百度网盘下载...
  6. 【微信公众号开发(Java版)笔记整理二】消息处理
  7. 哈理工院赛练习题 小瑞-开心消消乐 II
  8. 如何用R语言参破每个复仇者的口头禅?
  9. 阿里Redis最全面试全攻略,读完这个就可以和阿里面试官好好聊聊
  10. 东南亚成云服务掘金地,为何却跑不出一家本土云巨头?