POI Excel解析

Maven 引入POI

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.13</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.13</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.13</version></dependency>

excel 工具类

package com.iris.controller.hello;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;/*** @author* @date Created in 2018/5/2* @see*/
public class PoiExcelUtil {private static DataFormatter formatter = new DataFormatter();/*** 合并单元格值** @param sheet* @param cell* @param excelMap*/public static void getMergedRegionValue(Sheet sheet, Cell cell, Map<String, Object> excelMap) {// 获得一个 sheet 中合并单元格的数量int sheetmergerCount = sheet.getNumMergedRegions();// 便利合并单元格for (int i = 0; i < sheetmergerCount; i++) {// 获得合并单元格CellRangeAddress ca = sheet.getMergedRegion(i);// 获得合并单元格的起始行, 结束行, 起始列, 结束列int firstC = ca.getFirstColumn();int firstR = ca.getFirstRow();if (cell.getColumnIndex() == firstC && cell.getRowIndex() == firstR) {System.out.println("第" + (cell.getRowIndex() + 1) + "行 第" + (cell.getColumnIndex() + 1) + "列 的内容是: "+ getCellValue(cell));excelMap.put((cell.getRowIndex() + 1) + "-" + (cell.getColumnIndex() + 1), getCellValue(cell));}}}/*** 判断是否在合并单元格** @param sheet* @param cell* @return*/public static boolean isMergedRegion(Sheet sheet, Cell cell) {// 得到一个sheet中有多少个合并单元格int sheetMergerCount = sheet.getNumMergedRegions();for (int i = 0; i < sheetMergerCount; i++) {// 具体的合并单元格CellRangeAddress ca = sheet.getMergedRegion(i);// 合并单元格的起始列, 结束列;起始行, 结束行。int firstC = ca.getFirstColumn();int lastC = ca.getLastColumn();int firstR = ca.getFirstRow();int lastR = ca.getLastRow();// 判断该单元格是否在合并单元格范围之内, 如果是, 则返回 trueif ((cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) && (cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR)) {return true;}}return false;}/*** @param filePath      文件路径* @param sheetIndex    sheet* @param startRowIndex 开始行(不包含)* @return*/private static Map<String, Object> getExcelValue(String filePath, int sheetIndex, int startRowIndex) {//保存解析的值 key: 行-列Map<String, Object> excelMap = new LinkedHashMap<>();try {// 创建对Excel工作簿文件Workbook book = null;try {//.xlsx 2007版本+book = new XSSFWorkbook(new FileInputStream(filePath));} catch (Exception ex) {//.xls 2003版本book = new HSSFWorkbook(new FileInputStream(filePath));}//读取sheet页Sheet sheet = book.getSheetAt(sheetIndex);// 获取到Excel文件中的所有行数int rows = sheet.getPhysicalNumberOfRows();for (int i = startRowIndex; i < rows; i++) {// 读取单元格Row row = sheet.getRow(i);if (row != null) {// 获取到Excel文件中的所有的列int cells = row.getPhysicalNumberOfCells();for (int j = 0; j < cells; j++) {// 获取到列的值Cell cell = row.getCell(j);if (cell != null) {if (isMergedRegion(sheet, cell)) {getMergedRegionValue(sheet, cell, excelMap);} else {System.out.println("第" + (i + 1) + "行 第" + (j + 1) + "列 的内容是: " + getCellValue(cell));excelMap.put((i + 1) + "-" + (j + 1), getCellValue(cell));}}}}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return excelMap;}/*** 获取 cell 值** @param cell* @return*/private static String getCellValue(Cell cell) {return formatter.formatCellValue(cell);}public static void main(String[] args) throws Exception {String file = "E://excel.xlsx";Map<String, Object> excelValue = getExcelValue(file, 0, 0);for (Map.Entry<String, Object> entry : excelValue.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}}
}

输出结果

第1行 第1列 的内容是: 品牌
第1行 第2列 的内容是: 车系
第1行 第3列 的内容是: 车型
第1行 第4列 的内容是: 车款
第1行 第5列 的内容是: 价格(万元)
第1行 第6列 的内容是: 首付比例
第2行 第1列 的内容是: 路虎
第2行 第2列 的内容是: 星脉
第2行 第3列 的内容是: L560 2.0P
第2行 第4列 的内容是: 2.0P AWD SWB S
第2行 第5列 的内容是: 399
第2行 第6列 的内容是: 20%
第3行 第1列 的内容是: 路虎
第3行 第2列 的内容是: 进EV
第3行 第3列 的内容是: Range Rover Evoque
第3行 第4列 的内容是: 敞篷版 2.0L P Convertible 4WD HSE Dynamic 2017款
第3行 第5列 的内容是: 599
第3行 第6列 的内容是: 25%
1-1:品牌
1-2:车系
1-3:车型
1-4:车款
1-5:价格(万元)
1-6:首付比例
2-1:路虎
2-2:星脉
2-3:L560 2.0P
2-4:2.0P AWD SWB S
2-5:399
2-6:20%
3-1:路虎
3-2:进EV
3-3:Range Rover Evoque
3-4:敞篷版 2.0L P Convertible 4WD HSE Dynamic 2017款
3-5:599
3-6:25%

转载于:https://www.cnblogs.com/liu-king/p/8982013.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux项目第一次访问非常慢,后来很快的异常

最近项目本地访问和测试服务器访问都没出现访问很慢的问题。 近期要上生产部署&#xff0c;所以对生产环境的组件及各服务进行了部署&#xff0c;部署完成后进行测试发现请求耗时异常 比如一个订单查询请求&#xff0c;第一次请求耗时5m 或者15s 而且很有规律&#xff0c;不多…

mysql order by按照汉字拼音进行排序

Mysql的处理办法是&#xff1a; SELECT * FROM user_info ORDER BY CONVERT(user_name USING GBK) ASC;

spring注解大全

【转载】https://www.cnblogs.com/zxf330301/articles/6559210.html spring component的作用 1、controller 控制器&#xff08;注入服务&#xff09; 2、service 服务&#xff08;注入dao&#xff09; 3、repository dao&#xff08;实现dao访问&#xff09; 4、component &am…

深度学习的常用框架

目 录 一、Caffe (源于Berkeley的主流CV工具包) 二、TensorFlow (Google的深度学习框架) 三、Torch (Facebook用的卷积神经网络工具包) 四、Theano 五、Keras 六、MXNet 七、其他深度学习框架 八、其他知识拓展认识 前言&#xff1a;深度学习框架是帮助使用者进行深度学习的工…

Flink1.12.0使用过程中遇到的异常

1.Record has Long.MIN_VALUE timestamp ( no timestamp marker). Is the time characteristic set to ProcessingTime, or did you forget to call DataStream.assignTimestampsAndWatermarks(...)? 解决办法&#xff1a; 时间窗口事件选择此方法&#xff0c;Time导包也需要…

多个字段条件相同进行分组并过滤拼装SQL

select posts,term,user_name,GROUP_CONCAT(put_department) put_dept from hrbp_info group by posts,term,user_name having count(*)>1

我对外键的回忆

添加外键&#xff1a;&#xff08;注意&#xff1a;constraint前面没得add&#xff0c;add是alter的时候才会有的&#xff09;CONSTRAINT stu_class_fkFOREIGN KEY(stu_id)REFERENCES stu_class(id)ON UPDATE CASCADEON DELETE CASCADE在添加外键的时候&#xff0c;必须保证外键…

记录一次@Transactional问题处理

Transactional注解标志在方法上会对这个方法全局内的sql产生事务控制 如&#xff1a; Transactional mothod(){ insert A(); select A->result ->insert B(); } 同事务下用A插入的结果对B查询插入 此时的result是获取不到的 不能在method上加事务&#xff0c;需要对A单…

一道清华期中考试题(逃)

据出题的jzh老师所说... 求和【问题描述】组合数 C(n,m)是从 n 个物品中取 m 个的方案数。C(n,m)(n!)/(m!(n-m)!)斐波那契数列 F 满足&#xff0c; F[0]F[1]1&#xff0c; n≥2 时 F[n]F[n-1]F[n-2]给出 n&#xff0c;求 C(n,0)F[0]C(n,1)F[1]…C(n,n)F[n]【输入格式】一行一个…

记录docker-Skywalking集成es7异常处理

遇到的问题&#xff1a; es7容器启动成功 skywalking的oap容器启动一直在restart 启动失败 处理过程&#xff1a; 1.docker logs oap容器ID 2.对应处理解决 PUT http://192.168.1.10:9200/_cluster/settings { “transient”: { “cluster”: { “max_shards_per_node”:1…

第七章:跨程序共享数据-探究内容提供器

运行时权限 Android 6.0 之后的系统提供了两种权限&#xff1a; 普通权限。例如&#xff1a;访问网络状态、监控开机是否完成等。这种权限会在安装 APP 时询问用户是否同意。危险权限&#xff0c;也就是说运行时权限&#xff0c;需要在程序运行时动态获取用户许可。例如&#x…

记录一次docker项目连接不上docker mysql的问题

异常如下&#xff1a; CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server做了个demo项目运行dockerfile打包镜像容器并运行抛出了如…

第十周补做作业

第十周课下补做作业 相关知识点的总结 Comparable接口&#xff1a;如果链表中存放的对象不是字符串数据&#xff0c;那么创建对象的类必须实现Comparable接口&#xff0c;即实现该接口中的方法int compareTo(Object b)来规定对象的大小关系。也就是让待排序对象所在的类实现Com…

hdu-5707-Combine String

题意&#xff1a;给你三个字符串&#xff0c;让你计算1 2 串和3 串是否匹配&#xff0c;就是3串可以分解为 1 2 串&#xff0c;字母顺序必须是按照1 2 串的字母前后顺序。 DP代码太深奥 看不太透&#xff0c;这个代码比较好理解一点&#xff1a; #include<stdio.h> #inc…

求1-100的所有数的和

#!/usr/bin/env python# -*- coding: utf-8 -*-# Time : 2018/5/6 0006 10:25# Author : Anthony.Waa# Site : # File : 求1-100的所有数的和.py# Software: PyCharm# demo1# 定义基数sum 0count 1# 循环开始while count < 101: sum count count 1print…

月赛 SX_ACM 惨痛教训

1.cnt变量若有多次询问&#xff0c;一定要记得初始化!!! 2.多组数据输出入&#xff0c;区泛~。 3.高性能问题&#xff0c;考虑位运算&#xff0c;转载于:https://www.cnblogs.com/luv-letters/p/8981869.html

windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error...

windows下配置redis集群&#xff0c;启动节点报错&#xff1a;createing server TCP listening socket *:7000:listen:Unknown error 学习了&#xff1a;https://blog.csdn.net/u014652744/article/details/71774171 竟然真的是需要bind 127.0.0.1 不同的机器为啥就不一样呢&am…

Linux7使用光盘作为本地repo源

[1]上传centos7光盘镜像到指定目录下&#xff08;这里定为/usr/local/src&#xff09; [2]挂载镜像文件 mkdir /media/cdrom # 新建光盘目录&#xff1b; mount -t iso9660 -o loop /usr/local/src/CentOS-7.0-1406-x86_64-Everything.iso /media/cdrom/ #挂载镜像文件 [3]…

PyCharm安装与配置,python的Hello World

1. 访问https://www.jetbrains.com/zh/pycharm/download/download-thanks.html, 下载pycharm 安 装包,点击安装. 2. 用记事本打开hosts文件,Windows系统hosts文件路径为&#xff1a;c:\windows\system32\drivers\etc,将0.0.0.0 account.jetbrains.com添加到hosts文件最后 3.打开…

由于没有远程桌面授权服务器可以提供许可证,远程会话被中断

window-2012 server R2 实现多用户登录 删除 注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GrcePeriod 下的所有文件&#xff0c;重启服务器即可。