在我们进行导入的时候难免不会遇到合并行的导入,如果在没有遇到合并行的导入的时候我们使用easypoi做导入是最方便的,因为它为我们提供了很多现成的类进行导入,去除了一些麻烦的解析判断操作,但是它没有为我们提供如果存在合并行的情况下的导入操作(当然也许是我没有发现),需要我们自己调用poi包来实现,我这里使用了4.0.1的包
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency>
使用poi-ooxml是因为可以同时解析xls和xlsx这两种情况。
下面我们看看具体的合并行代码的实现
/** * 获取合并行的数据 * * @param sheet * @param row * @param column * @return */ private static String getMergedRegionValue(Sheet sheet, int row, int column) { // 获得该sheet所有合并单元格数量 int sheetMergeCount = sheet.getNumMergedRegions(); for (int i = 0; i < sheetMergeCount; i++) { // 获得合并区域 CellRangeAddress cellAddresses = sheet.getMergedRegion(i); int firstColumn = cellAddresses.getFirstColumn(); int lastColumn = cellAddresses.getLastColumn(); int firstRow = cellAddresses.getFirstRow(); int lastRow = cellAddresses.getLastRow(); /*判断传入的单元格的行号列号是否在合并单元格的范围内, 如果在合并单元格的范围内,择返回合并区域的首单元格格值 */ if (row >= firstRow && row <= lastRow) { if (column >= firstColumn && column <= lastColumn) { Row firRow = sheet.getRow(firstRow); Cell firCell = firRow.getCell(firstColumn); return getCellValue(firCell); } } } // 如果该单元格行号列号不在任何一个合并区域,择返回null return null; }
在上面代码中我们可以看到通过判断一共有多少合并区域,然后通过循环合并区域中的起始和结束行列来判断当前行和列是否在该合并区域里面,如果在该区域就获取当前区域的第一行中表格中的值来作为当前行列的值。我们来看下获取表格值的代码片段
/** * 获取单元格值 * * @param cell * @return */ private static String getCellValue(Cell cell) { String cellValue = ""; if (cell == null) { return cellValue; } // 把数字当成String来读,避免出现1读成1.0的情况 if (cell.getCellType() == CellType.NUMERIC) { cell.setCellType(CellType.STRING); } // 判断数据的类型 switch (cell.getCellType()) { // 文本 case STRING: cellValue = cell.getStringCellValue(); break; // 数字、日期 case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { sdf = new SimpleDateFormat("yyyy/MM/dd"); // 日期型 cellValue = sdf.format(cell.getDateCellValue()); } else { // 数字 cellValue = String.valueOf(cell.getNumericCellValue()); } break; // 布尔型 case BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; // 空白 case BLANK: cellValue = cell.getStringCellValue(); break; // 错误 case ERROR: cellValue = ""; break; // 公式 case FORMULA: cellValue = ""; break; default: cellValue = ""; } return cellValue; }
以上就是主要的一些片段,具体的代码可以参考上传文件。
相关推荐
poi导入/导出Excel表格,合并单元格的读取和设置
关于java EXCEL poi 合并后无法显示或无法设置边框问题 【本人亲测】 excel poi 新手! 坑了1.5天!
POI批量导入导出示例,再使用过程中需要注意poi的版本以及对excel表格数据过大时的处理。本案例适合初学者,仅供参考学习。
//表头1 要合并的格表头描述字段 已@分割 注意 这里的表头是至第一行表头 var gauge_head2="日期@交易量汇总@设备占比@WEB占比@APP占比@互生币支付@互商订单支付@代兑互生币@兑换互生币@货币转银行";// 表头描述...
一个excel导入/导出的demo 用到Apache的poi相关接口。 利用注解及反射实现。 在建立pojo时利用自定义的@Excel注解来映射excel列名。
excel poi工具类 导入 导出 合并单元格 计算公式
POI操作PPT文档(导入,导出,读取,添加,拼接,替换文本,页面排序)
不管是poi还是jxl都无法根据列名取数据,简单的合并Excel,如果每个Excel里每列不一定是按顺序来的,或者么些列有缺失,就不好办了,这个合并方式,是依照JDBC读取数据库的方式,把Excel看成是一个数据库表,返回List<Map<>>...
Java语言利用POI读取excel文档,利用Freemarker建立word模板(带图片),excel每一行数据生成单个word文档,再利用POI合并成一个word文档(源码); 博客地址:...
获取通话记录文件格式vcf的转化,JAVA实现数据库数据导入/导出到Excel(POI)
java实现word的合并,jdk版本1.7,直接导入eclipse中即可。基于docx4j3.3.3实现。内含所有jar包,MargeDoc中含有主方法
easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
#POIDemo ##代码不能停留在看的阶段,要多运行,多调试。 这是 POIDemo 的学习程序,程序代码功能如下: ...POIDemo9.java 单元格合并 POIDemo10.java 字体测试 POIDemo11.java 测试读取与重写单元格 POIDemo12.java
java 导出,导入excel。用户自定义导出模板。模板显示内容用el表达式即可。用户可以定义每一个单元格的显示内容。可以自定义List数据的展示。一个excel的sheet内,可以有多个list的数据循环
一般在导出Excel中,在创建工作表sheet后,初始化的sheet中row都是一行一行的...方案:使用POI在Excel中插入多张图片,由于平台中只保存图片的url地址,所以首先需要获取图片数据,然后转换为二进制,最后将图片插入。
jxls作为比较好的excel模版方案,比poi和easyExcel相对扩展性更高。 demo包含全部官方例子和...环境依赖 maven JDK1.8 不管使用eclipse 或者idea 直接导入即可,项目中使用请参照demo中pom文件版本,如需交流请关注博客
内含java的poi导入导出的demo, 支持合并单元格, 代码很完整, 没有缺失, 新手也可以开箱即用.
基于springboot和poi实现单线程和多线程导出Excel之单线程导出的代码。对于工作中导出Excel数据的小伙伴有一定的帮助作用。代码比较简单易学不需要太深的底层只是既可以使用,代码完全可以直接复制粘贴即可能在自己...
poi导入、导出,支持百万级数据模板导出、合并excel。项目为spring-boot-2上开发。resource里面有模板,在junit测试类中修改为本地存在路径即可导出文件,在junit测试类中修改for循环的i可以模拟百万级数据导出。注意...
poi操作Excel的各种解释 对Excel导出和导入,对Excel的合并列,插入图片等