社区
Java
帖子详情
Java使用POI操作Excel表格,从合并单元格取值
排行老几
2019-01-21 09:19:12
如上图,要将这组数据从Excel取出来,请教下应该怎么处理。打印结果如下图:
...全文
828
2
打赏
收藏
Java使用POI操作Excel表格,从合并单元格取值
如上图,要将这组数据从Excel取出来,请教下应该怎么处理。打印结果如下图:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38757817
2019-09-04
打赏
举报
回复
PageOffice操作Excel表格,从合并单元格取值,也很方便的
JUIYI
2019-08-15
打赏
举报
回复
package cn.boccaccio.qdjxhzqzhxxpt.self.baseInfo.service.imp; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * 导入包含合并单元格的Excel文档 * */ public class mergeCellExcelImport { public static void main(String[] args) throws FileNotFoundException { File file = new File("d://111.xlsx"); InputStream is = new FileInputStream(file); mergeCellExcelImport ti = new mergeCellExcelImport(); // 读取Excel文件工作表 Workbook wb = ti.readFile(is, "111.xlsx"); //取得第一个工作表 Sheet sheet = wb.getSheetAt(0); // 获取工作表数据 List<Map<Integer,Object>> list = ti.getBody(sheet,8); for(Map<Integer,Object> item : list) { System.out.println(item); } } /** * 读取Excel文件工作表 * @param inputStream 文件流 * @param fileName 文件名称 * @return */ public Workbook readFile(InputStream inputStream,String fileName){ Workbook wb = null; //判断是否是excel2007格式 boolean isE2007 = false; if(fileName.endsWith("xlsx")){ isE2007 = true; } try { //建立输入流 InputStream input = inputStream; //根据文件格式(2003或者2007)来初始化 if(isE2007){ wb = new XSSFWorkbook(input); }else{ wb = new HSSFWorkbook(input); } } catch (IOException e) { e.printStackTrace(); } return wb; } /** * 获取内部内容 * @param sheet 工作表 * @param column 有效数据列数 * @return */ public List<Map<Integer,Object>> getBody(Sheet sheet, int column){ //总行数 int count = sheet.getLastRowNum()+1; //sheet中所有合并的单元格信息 List<CellRangeAddress> cras = getCombineCell(sheet); //存储行信息 List<Map<Integer,Object>> irs = new ArrayList<>(); //表头只有2行 for(int i = 2; i < count;i++){ //存储列信息 Map<Integer,Object> map = new HashMap<Integer,Object>(); for(int x = 0;x < column;x++) { // 判断当前处理单元格是不是合并单元格 CellRangeAddress range = isMergedRegion(cras,i,x); // 如果当前单元格属于合并单元格 if(null != range){ //拿到合并单元格的开始行数和开始列数 int firstColumn = range.getFirstColumn(); int firstRow = range.getFirstRow(); //根据开始行数和开始列数获取单元格的值 Row row = sheet.getRow(firstRow); map.put(x,getCellValue(row.getCell(firstColumn))); }else{ //如果不是合并单元格,直接拿当前单元格的值 Row row = sheet.getRow(i); map.put(x,getCellValue(row.getCell(x))); } } irs.add(map); } return irs; } /** * 获取sheet中合并的单元格信息,并返回合并的单元格list * @param sheet 需要导入的工作表 * @return List<CellRangeAddress> 合并的单元格list */ public List<CellRangeAddress> getCombineCell(Sheet sheet) { List<CellRangeAddress> list = new ArrayList<CellRangeAddress>(); //获得一个 sheet 中合并单元格的数量 int sheetmergerCount = sheet.getNumMergedRegions(); //遍历所有的合并单元格 for(int i = 0; i<sheetmergerCount;i++) { //获得合并单元格保存进list中 CellRangeAddress ca = sheet.getMergedRegion(i); list.add(ca); } return list; } /** * 判断指定的单元格是否是合并单元格 * @param cras 合并的单元格list * @param row 行下标 * @param column 列下标 * @return */ private CellRangeAddress isMergedRegion(List<CellRangeAddress> cras,int row ,int column) { for (CellRangeAddress range : cras) { 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 range; } } } return null; } /** * 获取单元格的值 * @param cell * @return */ public String getCellValue(Cell cell){ if(cell == null) { return ""; } else { if(cell.getCellType() == Cell.CELL_TYPE_STRING){ return cell.getStringCellValue(); } else { cell.setCellType(Cell.CELL_TYPE_STRING); return cell.getStringCellValue(); } } } }
java
poi
读取有
合并单元格
的
EXCEL
文件
介绍了
使用
Java
POI
读取包含
合并单元格
的
Excel
文件相关内容,虽未详细展开,但明确了核心
操作
是利用
Java
POI
对有
合并单元格
的
Excel
文件进行数据读取。
Apache
POI
解析复杂的
excel
表格
本文介绍
使用
Apache
POI
解析复杂
Excel
表格
。先说明了复杂
表格
解析的场景,接着介绍了Apache
POI
常用类,如HSSF、XSSF等,重点
使用
XSSF接口。案例分析中阐述了解析思路,包括遍历单元格记录数据存储位置、判断
合并单元格
等,还展示了重要代码,最后提供了项目示例代码。
Java
Excel
合并单元格
Java
Excel
实现尾部添加数据
Java
Excel
合并单元格
添加数据
poi
excel
合并单元格
本文介绍了如何
使用
Java
处理
Excel
文件,在已生成的
Excel
表格
尾部动态添加
合并单元格
内容。通过Apache
POI
库,实现了
Excel
Config类来配置
合并单元格
的相关属性,并提供了测试代码示例,展示了在不同位置添加
合并单元格
数据的方法。
Java
读取
Excel
中的
合并单元格
该文章介绍如何
使用
Java
的Apache
POI
库来读取
Excel
文件中的
合并单元格
。通过示例代码展示了如何识别和处理
合并单元格
,包括获取合并区域的值和边界信息,并提供了完整的读取
合并单元格
数据的实现。
java
导出
Excel
合并单元格
本文提供了一个
使用
Java
POI
库导出
Excel
文件并
合并单元格
的完整示例。通过模拟数据类和导出方法,展示了如何创建带有特定格式的工作表。
Java
51,408
社区成员
86,098
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章