注:对于一些数据量小的excel使用什么插件都可以,但是大的数据量都建议使用poi,因为内存消耗会非常高。一般推荐使用EasyExcel 。

导入pom

<properties><java.version>1.8</java.version><poi.version>4.1.2</poi.version></properties>
<dependencies><!--excel操作框架--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>${poi.version}</version></dependency><!-- 读取大量excel数据时使用 --><dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.1.0</version></dependency>
</dependencies>

方法一

package com.fmz.demofmztest.testUtil;import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Objects;/*** @Description: 常规POI读取* 只能读取 xlsx 格式文件* @Author yizhixiansheng* @Date 2022/6/20*/
public class ReadExcel {public static void main(String[] args) throws Exception {long t1 = System.currentTimeMillis();excel("C:\\Users\\88999\\Desktop\\临时文件夹\\活动数据提取表.xlsx",1,0);long t2 = System.currentTimeMillis();System.out.println((t2-t1) + "毫秒");}/*** 读取excel,含列头名称* @param filePath xlsx 格式文件 路径* @param sheetIndex sheet标签页下标  从0开始* @param titleRowIndex 默认第一行为列头名称* @return void* @author yizhixiansheng* @create 2022/6/20**/public static void excel(String filePath,int sheetIndex,int titleRowIndex) throws Exception {File file = new File(filePath);if (!file.exists()){throw new Exception("文件不存在!");}InputStream in = new FileInputStream(file);// 读取整个ExcelXSSFWorkbook sheets = new XSSFWorkbook(in);if(Objects.isNull(sheets)){throw new Exception("读取Excel异常!");}// 获取指定表单SheetXSSFSheet sheetAt = sheets.getSheetAt(sheetIndex);// 获取指定默认标题行XSSFRow titleRow = sheetAt.getRow(titleRowIndex);// 循环获取每一行数据for (int i = 1; i < sheetAt.getPhysicalNumberOfRows(); i++) {XSSFRow row = sheetAt.getRow(i);// 读取每一格内容StringBuilder sb = new StringBuilder();for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {XSSFCell titleCell = titleRow.getCell(index);XSSFCell cell = row.getCell(index);cell.setCellType(CellType.STRING);if (null == cell.getStringCellValue() || "".equals(cell.getStringCellValue())) {continue;}sb.append(cell);}System.out.println(i + "\t" + sb);}}/*** 读取excel* @param filePath xlsx 格式文件 路径* @param sheetIndex sheet标签页下标  从0开始* @return void* @author yizhixiansheng* @create 2022/6/20**/public static void excel(String filePath,int sheetIndex) throws Exception {File file = new File(filePath);if (!file.exists()){throw new Exception("文件不存在!");}InputStream in = new FileInputStream(file);// 读取整个ExcelXSSFWorkbook sheets = new XSSFWorkbook(in);if(Objects.isNull(sheets)){throw new Exception("读取Excel异常!");}// 获取指定表单SheetXSSFSheet sheetAt = sheets.getSheetAt(sheetIndex);// 循环获取每一行数据for (int i = 0; i < sheetAt.getPhysicalNumberOfRows(); i++) {XSSFRow row = sheetAt.getRow(i);// 读取每一格内容StringBuilder sb = new StringBuilder();for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {XSSFCell cell = row.getCell(index);cell.setCellType(CellType.STRING);if (null == cell.getStringCellValue() || "".equals(cell.getStringCellValue())) {continue;}sb.append(cell);}System.out.println(i + "\t" + sb);}}
}

方法二

package com.fmz.demofmztest.testUtil;import com.monitorjbl.xlsx.StreamingReader;
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 java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Description: 大文件excel读取* 只能读取 xlsx 格式文件* @Author yizhixiansheng* @Date 2022/6/20*/
public class ReadBigExcel {public static Map<String, List<String>> test(File file) throws Exception{FileInputStream in = new FileInputStream(file);Map<String,List<String>> mapData = new HashMap<String, List<String>>();Workbook wk = StreamingReader.builder().rowCacheSize(100)  //缓存到内存中的行数,默认是10.bufferSize(4096)  //读取资源时,缓存到内存的字节大小,默认是1024.open(in);  //打开资源,必须,可以是InputStream或者是File,注意:只能打开XLSX格式的文件int sheetNums = wk.getNumberOfSheets();for(int i = 0 ; i < sheetNums;i ++){List<String> sheetData = new ArrayList<String>();Sheet sheet = wk.getSheetAt(i);String sheetName = wk.getSheetName(i);//遍历所有的行int k = 0;for (Row row : sheet) {StringBuilder sb = new StringBuilder();//遍历所有的列for (Cell cell : row) {sb.append(cell.getStringCellValue());}System.out.println(k++ + "\t" + sb.toString());}}return mapData;}public static void main(String[] args) throws Exception {File file = new File("C:\\Users\\88999\\Desktop\\临时文件夹\\活动数据提取表.xlsx");long t1 = System.currentTimeMillis();test(file);long t2 = System.currentTimeMillis();System.out.println((t2-t1)/1000 + "秒");}
}

结果

java使用poi读取excel相关推荐

  1. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  2. java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解

    java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...

  3. Java使用POI读取Excel文件

    上篇文章记录了简单的POI创建Excel文件,依赖导入可参考上篇 POI读取excel中公式 @Testpublic void testRead() throws Exception {//读取文件的 ...

  4. Java使用Poi读取Excel数据(exor)

    读取Excel使用一个小工具exor exor是一个开源项目,封装了一些poi读取excel的操作,可以读取excel数据并格式化为二维结构 xlsx和xls格式都可以读取 exor的依赖:commo ...

  5. java通过poi读取excel中的日期类型

    1.问题分析 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当 ...

  6. Java使用poi读取excel数据(excel可能很大,先转换为csv再读取)

      ------------配置------------   jdbc.properties中加入: excelUrl=/--xlsx文件目录路径/ (excelUrl + "xxxx.xl ...

  7. Java中 POI读取Excel工具类

    直接上代码 pom文件需要导入这些依赖 org.apache.poi poi-ooxml 3.9 org.apache.poi poi-ooxml-schemas 3.9 org.apache.poi ...

  8. java使用poi读取excel表格

    前言 用户上传excel表格,后端读取excel中的数据并存入数据库. 这里只演示如何读取到excel表格中的内容,excel中包括图片.日期.字符串格式. 导入依赖 <dependency&g ...

  9. java 利用POI 读取Excel数据的真实有效行数

    前言 最近发现java导入excel数据时,我的excel数据明明只有4条数据,可是java程序却读取到了第6行.检查代码发现5.6行不小心设置了行高,导致poi的getLastRowNum()方法读 ...

最新文章

  1. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★
  2. 揭秘Java网络爬虫程序原理
  3. 任务栏托盘不消失的问题-有启示
  4. iis出现 Server Application Error 错误解决方法(xp iis5.1 配置asp项目出现500错)
  5. Java IO模型--BIO、NIO Single Thread、NIO Reactor、AIO单线程及多线程AIO
  6. richtextbox自动滚动到最下面_自动滚动式连续真空包装机简介
  7. 隐藏esp_汽车一键启车主必须知道的几个“隐藏”技巧
  8. java 在主方法中定义两个变量 调用方法进行加10_计算机考试二级考试Java模拟试题附答案...
  9. ActiveMQ之Topic
  10. mysql各存储引擎介绍表格_十六、MySQL基础系列笔记之数据表存储引擎的介绍
  11. java学生信息管理系统源码(java学生管理系统 )
  12. ROSE HA,想说爱你不容易——为ROSE HA配置IP资源的LocalFailover
  13. VNC远程桌面安装配置
  14. No instances available for CLOUD-PAYMENT-SERVICEpayment问题
  15. mysql 闰年,[MySQL]--gt;查询5天之内过生日的同事中的闰年2月
  16. python实现爬虫_Python开发简单爬虫
  17. Linux基础知识详解
  18. JavaScript将扁平化数据转为树形结构
  19. MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
  20. 监控摄像头linux开发,PC机(ubuntu)实现usb摄像头监控

热门文章

  1. android手势第一次设置密码_[Android开发实战]Android手势密码(支付宝手势密码)实现(支持2.x) | 学步园...
  2. linux route输出分析,Traceroute原理分析
  3. linux服务器显示文件夹,Linux系统怎么隐藏文件夹和文件?
  4. RocketMq的刷盘方式
  5. csv数据筛选 matlab_谈谈MATLAB:CSV数据提取与处理
  6. 如何用matlab画动态花,花 图,一朵花,matlab编写,很漂亮
  7. 【原创】开源,手中的牌怎么打
  8. 艾永亮:四条打造超级产品的基本原则,吸引用户注意力
  9. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 10.1 藝術畫 python繪製天然雪花結晶
  10. 【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(超细致)