java 读取excel数据
本文共介绍两种方式,第一种是常规POI读取,第二种是大文件读取。
依赖包
<poi.version>4.1.2</poi.version><!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><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>
第一种方式:
常规POI读取
package com.platform.modules.admin.controller;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.Date;public class ReadExcel {public static void main(String[] args) throws Exception {long t1 = new Date().getTime();excel();long t2 = new Date().getTime();System.out.println((t2-t1)/1000 + "秒");}public static void excel() throws Exception {File file = new File("C:\\Users\\Lenovo\\Desktop\\数据导入模板及填写格式 (2).xlsx");if (!file.exists()){throw new Exception("文件不存在!");}InputStream in = new FileInputStream(file);// 读取整个ExcelXSSFWorkbook sheets = new XSSFWorkbook(in);// 获取第一个表单SheetXSSFSheet sheetAt = sheets.getSheetAt(0);//默认第一行为标题行,i = 0XSSFRow titleRow = sheetAt.getRow(0);// 循环获取每一行数据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 (cell.getStringCellValue().equals("")) {continue;}sb.append(cell);}System.out.println(i + "\t" + sb);}}
}
第二种方式:
大文件excel读取
package com.platform.modules.admin.controller;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.*;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\\Lenovo\\Desktop\\数据导入模板及填写格式 (2).xlsx");long t1 = new Date().getTime();test(file);long t2 = new Date().getTime();System.out.println((t2-t1)/1000 + "秒");}
}
执行效率比对,横坐标为数据量,纵坐标为执行耗时秒
可以看出大文件读取POI的执行效率比常规POI好很多。
框起来的这一块是执行常规POI所耗资源,读取大文件POI对CPU和内存的占用也叫常规POI低很多,最重要的是不会引起内存溢出。
java 读取excel数据相关推荐
- Java读取Excel数据:基于Apache POI(一)
Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Excel表格数据.第三方的Apache提供了一个库POI用以支持Java读写Excel表格数据. 首先需要 ...
- JAVA读取Excel数据
JAVA读取Excel数据 下载 jxl.jar 导入jxl.jar 读取程序 写入Excel 写入txt 下载 jxl.jar 找到一个博主发的,下载好后去掉.zip后缀 jxl.jar下载 - 天 ...
- 项目实战 Java读取Excel数据
项目实战 Java读取Excel数据 前言 实现步骤 导入POI依赖 示例Excel表结构 编写读取Excel工具类 实现思路 读取Excel数据工具类实现代码 取出从excel中获取的数据,并插入到 ...
- java 读取Excel数据(POI)(一个sheet或者多个sheet)
1.添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...
- java读取excel数据_Java读取Excel内容(转)
借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可 本例使用java来读取exc ...
- java读取excel数据的方法是_java怎么读取excel文件里的数据
展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...
- JAVA读取excel数据(插入oracle数据库)
本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果是.xlsx类型的话 手工转化一下即可,应用的jar包是apache的poi系类的jar包和ojdbc14.jar的 ...
- 在JAVA读取Excel数据的日期格式
在ExcelReader类中.getStringCellValue()方法里: public static String getStringCellValue(Cell cell) { if(cell ...
- java读取excel数据保存到数据库中_java读取excel的内容(可保存到数据库中)
//** poi jar包 // public classReadExcel { @SuppressWarnings("static-access")private staticS ...
最新文章
- 我把SpringBoot项目从18.18M瘦身到0.18M,部署起来真省事!
- Android面试题目之三: 字符串转整形
- springboot 自动装配_Spring Boot 自动装配流程
- Oracle存在修改,不存在插入记录
- 一步步使用SAP C4C Cloud Application Studio创建一个BO和对应的屏幕
- C#中LINQ与数据管道
- 怎么使用starwind部署iscsi_2019 年总结 - 多环境多版本的部署
- Python操作Mysql实例代码教程在线版(查询手册)_python
- CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO
- python requests form data_Python爬虫:Request Payload和Form Data的简单区别说明
- 生产过程代码分析(二)--估计
- KL距离-Kullback-Leibler Divergence
- 使用GIT来管理代码的心得
- JAVA开发常用类(六)
- 一个示例让你明白界面与数据分离
- java私塾架构二,小弟我在Java私塾学习期间的学习源码
- BeanShell用法汇总
- 2.5D 组态案例合集 | 智慧园区、数据中心、SMT 生产线、汽车制造
- 关于操作系统镜像超过4G的解决办法
- KEIL 不使用microlib 报错__stdin __stdout重复定义