社区
Java
帖子详情
Java使用POI操作Excel表格,从合并单元格取值
排行老几
2019-01-21 09:19:12
如上图,要将这组数据从Excel取出来,请教下应该怎么处理。打印结果如下图:
...全文
710
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
读
合并单元格
的内容_怎么用
POI
Excel
读取
合并单元格
的值?
POI
3.12依赖的包:代码:public class
POI
Test {public static void main(String[] args) throws Exception {File inputFile = new File("d:\\test.xlsx");InputStream is = new FileInputStream(inputFile);...
Java
POI
execl
合并单元格
判断
Java
POI
execl
合并单元格
判断并
取值
java
使用
Poi
导出
excel
表格
在之前的一篇文章
java
操作
Excel
实战干货中展示了
使用
poi
库读取
excel
表格
的的用法,今天演示另一个常用功能,将数据导出到
excel
中,按照实战演练方式,后台提供接口,数据来源于数据库,然后导出
excel
输...
java
动态生成
excel
并且需要
合并单元格
java
动态生成
excel
并且需要
合并单元格
。
Java
50,523
社区成员
85,601
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章