java使用poi读取excel
注:对于一些数据量小的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相关推荐
- java通过poi读取excel中的日期类型数据或自定义类型日期
java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2019,而Excel中输入的是 2019/10/12 ...
- java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解
java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...
- Java使用POI读取Excel文件
上篇文章记录了简单的POI创建Excel文件,依赖导入可参考上篇 POI读取excel中公式 @Testpublic void testRead() throws Exception {//读取文件的 ...
- Java使用Poi读取Excel数据(exor)
读取Excel使用一个小工具exor exor是一个开源项目,封装了一些poi读取excel的操作,可以读取excel数据并格式化为二维结构 xlsx和xls格式都可以读取 exor的依赖:commo ...
- java通过poi读取excel中的日期类型
1.问题分析 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当 ...
- Java使用poi读取excel数据(excel可能很大,先转换为csv再读取)
------------配置------------ jdbc.properties中加入: excelUrl=/--xlsx文件目录路径/ (excelUrl + "xxxx.xl ...
- Java中 POI读取Excel工具类
直接上代码 pom文件需要导入这些依赖 org.apache.poi poi-ooxml 3.9 org.apache.poi poi-ooxml-schemas 3.9 org.apache.poi ...
- java使用poi读取excel表格
前言 用户上传excel表格,后端读取excel中的数据并存入数据库. 这里只演示如何读取到excel表格中的内容,excel中包括图片.日期.字符串格式. 导入依赖 <dependency&g ...
- java 利用POI 读取Excel数据的真实有效行数
前言 最近发现java导入excel数据时,我的excel数据明明只有4条数据,可是java程序却读取到了第6行.检查代码发现5.6行不小心设置了行高,导致poi的getLastRowNum()方法读 ...
最新文章
- 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★
- 揭秘Java网络爬虫程序原理
- 任务栏托盘不消失的问题-有启示
- iis出现 Server Application Error 错误解决方法(xp iis5.1 配置asp项目出现500错)
- Java IO模型--BIO、NIO Single Thread、NIO Reactor、AIO单线程及多线程AIO
- richtextbox自动滚动到最下面_自动滚动式连续真空包装机简介
- 隐藏esp_汽车一键启车主必须知道的几个“隐藏”技巧
- java 在主方法中定义两个变量 调用方法进行加10_计算机考试二级考试Java模拟试题附答案...
- ActiveMQ之Topic
- mysql各存储引擎介绍表格_十六、MySQL基础系列笔记之数据表存储引擎的介绍
- java学生信息管理系统源码(java学生管理系统 )
- ROSE HA,想说爱你不容易——为ROSE HA配置IP资源的LocalFailover
- VNC远程桌面安装配置
- No instances available for CLOUD-PAYMENT-SERVICEpayment问题
- mysql 闰年,[MySQL]--gt;查询5天之内过生日的同事中的闰年2月
- python实现爬虫_Python开发简单爬虫
- Linux基础知识详解
- JavaScript将扁平化数据转为树形结构
- MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
- 监控摄像头linux开发,PC机(ubuntu)实现usb摄像头监控
热门文章
- android手势第一次设置密码_[Android开发实战]Android手势密码(支付宝手势密码)实现(支持2.x) | 学步园...
- linux route输出分析,Traceroute原理分析
- linux服务器显示文件夹,Linux系统怎么隐藏文件夹和文件?
- RocketMq的刷盘方式
- csv数据筛选 matlab_谈谈MATLAB:CSV数据提取与处理
- 如何用matlab画动态花,花 图,一朵花,matlab编写,很漂亮
- 【原创】开源,手中的牌怎么打
- 艾永亮:四条打造超级产品的基本原则,吸引用户注意力
- 從turtle海龜動畫 學習 Python - 高中彈性課程系列 10.1 藝術畫 python繪製天然雪花結晶
- 【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(超细致)