社区
Java
帖子详情
Java使用POI操作Excel表格,从合并单元格取值
排行老几
2019-01-21 09:19:12
如上图,要将这组数据从Excel取出来,请教下应该怎么处理。打印结果如下图:
...全文
841
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
文件
数据的样子是这样的 报表名称 班次 生产线 站点编号 设备区域 1:无;2:左右 报表状态0:未启用;1启用 检查项目 检查方法 填报方式 标准值 偏差值 频次 import1 1 LC 52V451 2 1 检查项目1 目测 数值 10 1 10 检查项目2 填报 OK/NO 66 6 6
Apache
POI
解析复杂的
excel
表格
一篇文章教你如何
使用
apache
POI
框架解析工作中遇到的复杂的
Excel
文件,内含完整项目代码以及测试文件。
Java
读取
Excel
中的
合并单元格
本文以
Java
示例展示读取
Excel
中的
合并单元格
的方法。 1、Maven仓库下载导入 在pom.xml中配置maven路径,指定依赖,如下: <dependency> <groupId>org.apache.
poi
</groupId> <artifactId>
poi
</artifactId> <version>4.1.1</version> </dependency> <.
Java
Excel
合并单元格
Java
Excel
实现尾部添加数据
Java
Excel
合并单元格
添加数据
poi
excel
合并单元格
最近的工作中,遇到一个需求,在生成的
Excel
表格
后,需要在尾部添加 一个合并的单元格数据。
Java
Excel
合并单元格
Java
Excel
实现尾部添加数据
Java
Excel
合并单元格
添加数据
使用
poi
来导入具有
合并单元格
的
excel
表格
pom依赖 <dependency> <groupId>org.apache.
poi
</groupId> <artifactId>
poi
-ooxml</artifactId> <version>3.17</version> &l...
Java
51,407
社区成员
86,124
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章