java操作excel
使用Java操作excel可以使用两种方式:
关于表格导入导出,市面上比较知名的开源就是 Apache 的POI 和 阿里巴巴的 EasyExcel了。EasyExcel 也是对 POI 的改进和封装, 更加好用。
1:POI是Apache 的开源项目,由Java编写的跨平台 Java API,可操作Microsoft Office。借助POI,可以方便的生成数据报表,数据批量上传,数据备份等工作。但是将文件数据一次性全部加载到内存可能导致OOM。
2:EasyExcel 能大大减少内存占用的主要原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
加入依赖:
<!-- xls 03版本的<!– https://mvnrepository.com/artifact/org.apache.poi/poi –><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><!– xls 07版本的 –><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency>--><!--日期格式化的工具--><!-- https://mvnrepository.com/artifact/joda-time/joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency>
poi简单操作excel
package com.dongmu;import com.sun.corba.se.spi.orbutil.threadpool.Work;
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.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;public class TestExcelWrite {public static void main(String[] args) throws Exception {// Workbook workbook = new HSSFWorkbook();//xls
// Workbook workbook = new XSSFWorkbook();//xlsx// write(workbook,"D:\\word文档\\电子版练习册\\JAVA\\15:easyExcelAndPOI\\Excel\\07版本.xlsx");read();}public static void write(Workbook workbook,String path) throws Exception {/*创建一共表*/Sheet sheet = workbook.createSheet("冬木学习技术栈掌握表");/*创建一行*/Row row1 = sheet.createRow(0);/*创建一个单元格*/Cell cell = row1.createCell(0);/*设置单元格的内容*/cell.setCellValue("学习的内容");cell = row1.createCell(1);cell.setCellValue("java操作ecxel");Row row2 = sheet.createRow(1);cell = row2.createCell(0);cell.setCellValue("学习的时间");cell = row2.createCell(1);cell.setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));FileOutputStream fileOutputStream = new FileOutputStream(path);workbook.write(fileOutputStream);fileOutputStream.flush();fileOutputStream.close();}public static void read() throws Exception{// FileInputStream stream = new FileInputStream("D:\\word文档\\电子版练习册\\JAVA\\15:easyExcelAndPOI\\Excel\\07版本.xlsx");FileInputStream stream = new FileInputStream("D:\\word文档\\电子版练习册\\JAVA\\15:easyExcelAndPOI\\Excel\\03版本.xls");// Workbook workbook = new XSSFWorkbook(stream);Workbook workbook = new HSSFWorkbook(stream);Sheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(0);Cell cell = row.getCell(0);String stringCellValue = cell.getStringCellValue();System.out.println(stringCellValue);}
}
批量地读取excel表中的数据:
package com.dongmu;import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils;import java.io.FileInputStream;public class TestExcelRead {public static void main(String[] args) throws Exception {FileInputStream inputStream = new FileInputStream("D:\\word文档\\武汉理工大学\\过去文件夹\\通信1904班云动会参赛情况.xlsx");Workbook workbook = new XSSFWorkbook(inputStream);Sheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(2);int physicalNumberOfCells = row.getPhysicalNumberOfCells();for (int i = 0; i < physicalNumberOfCells; i++) {Cell cell = row.getCell(i);String stringCellValue = cell.getStringCellValue();System.out.print(stringCellValue+"| ");}System.out.println("一共"+physicalNumberOfCells+"列。");int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();for (int i = 4; i < physicalNumberOfRows; i++) {Row row1 = sheet.getRow(i);int physicalNumberOfCells1 = row1.getPhysicalNumberOfCells();for (int i1 = 0; i1 < physicalNumberOfCells1; i1++) {Cell cell = row1.getCell(i1);if (cell!=null){int cellType = cell.getCellType();switch (cellType){// case XSSFCell.case XSSFCell.CELL_TYPE_STRING:System.out.print(cell.getStringCellValue()+"| ");break;case XSSFCell.CELL_TYPE_BLANK:System.out.print("空值| ");break;case XSSFCell.CELL_TYPE_BOOLEAN:System.out.print(cell.getBooleanCellValue()+"| ");break;case XSSFCell.CELL_TYPE_FORMULA:FormulaEvaluator formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);//获得计算公式String cellFormula = cell.getCellFormula();CellValue evaluate = formulaEvaluator.evaluate(cell);String s = evaluate.formatAsString();System.out.print(s+"| ");break;case XSSFCell.CELL_TYPE_NUMERIC:if (HSSFDateUtil.isCellDateFormatted(cell)){System.out.print(cell.getDateCellValue()+"| ");}else {cell.setCellType(XSSFCell.CELL_TYPE_STRING);System.out.print(cell.getStringCellValue()+"| ");}break;case XSSFCell.CELL_TYPE_ERROR:System.out.print("数据类型错误| ");break;}}
// System.out.println();}System.out.println();}}
}
使用EasyExcel操作excel
加入依赖
<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>
1:写数据
创建一个实体类对应excel表中的字段数据
package com.dongmu.easyExcel;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;import java.util.Date;@Getter
@Setter
@EqualsAndHashCode
public class DemoData {@ExcelProperty("字符串标题")private String string;@ExcelProperty("日期标题")private Date date;@ExcelProperty("数字标题")private Double doubleData;
// * 忽略这个字段@ExcelIgnoreprivate String ignore;
}
将这个实体类保存的数据封装在一个list集合中
private static List<DemoData> data() {List<DemoData> list = ListUtils.newArrayList();for (int i = 0; i < 10; i++) {DemoData data = new DemoData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}
编写程序写出数据到excel
@Testpublic void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入// 写法1 JDK8+// since: 3.0.0-beta1String fileName = "D:\\word文档\\电子版练习册\\JAVA\\15:easyExcelAndPOI\\Excel\\easyTest.xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(() -> {// 分页查询数据return TestEasyExcel.data();});}
2:读数据
直接进行读取
@Testpublic void simpleRead() {// 写法1:JDK8+ ,不用额外写一个DemoDataListener// since: 3.0.0-beta1String fileName = "D:\\word文档\\电子版练习册\\JAVA\\15:easyExcelAndPOI\\Excel\\easyTest.xlsx";// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭// 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行EasyExcel.read(fileName, DemoData.class, new PageReadListener<DemoData>(dataList -> {for (DemoData demoData : dataList) {// log.info("读取到一条数据{}", JSON.toJSONString(demoData));System.out.println("读取到一条数据{}"+ JSON.toJSONString(demoData));}})).sheet().doRead();}
如果涉及到将读取到的数据存储到数据库,和更多的样式设置,参照
https://www.yuque.com/easyexcel/doc/read
讲解非常详细。
java操作excel相关推荐
- java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)
Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...
- java excel类库,jExcelApi Java 操作 Excel 的类库
jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...
- java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
Java操作Excel/Jakarta POI API/data/Jakarta POI API.doc Java操作Excel/Jakarta POI API/jar/poi-3.0.2-FINAL ...
- java操作Excel、PDF文件
java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...
- java操作excel表
文章分类:Java编程 http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介 JAVA EXCEL API简介 Java ...
- JAVA操作Excel时文字自适应单元格的宽度设置方法
使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...
- java excel 插入新行_POI ,Java 操作 Excel 實現行的插入(insert row)
POI ,Java 操作 Excel 實現行的插入(insert row) 前幾天,正在做一個項目,主要用 POI 來操作 Excel 其中,要使用一個,插入功能.主要是因為從數據庫,返回結果集(數據 ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- Java操作Excel之Excel文件的下载
1.有的时候在Web应用会有下载Excel的需求,现分享下后台实现下载Excel文件的代码 @RequestMapping(value = "/exportExcel", meth ...
- Java 操作excel表格 - JXL(Java excel api)
Java 操作excel表格 Java 操作 Excel 最常用的就是JXL(Java excel api)和POI,用起来挺简单的,不过相应的其功能也并非很强大,够用就行! 首先,下载jxl.jar ...
最新文章
- 传海思砍台积电第三季度一半手机订单
- Vertebrae 发布了新的SDK!
- linux c 读写mbr_一文看懂Linux开机流程BIOS-MBR-GRUB-Kernel-Init-Runlevel
- 附笔记pdf下载,MIT中文线性代数课程精细笔记[第四课]
- 造轮子是什么意思_程序员发文质疑阿里天启为kpi项目,重复造轮子,阿里回应:诽谤...
- 浏览器的headers
- python中str和int区别_python中eval与int的区别浅析
- php 虚拟空间,什么是php虚拟主机?
- java int转bitmap_Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码...
- 机器学习第18篇 - Boruta特征变量筛选(2)
- 太棒了!PyTorch 1.7发布,支持CUDA 11、Windows分布式训练
- VS2012下基于Glut 矩阵变换示例程序:
- wamp添加mysql版本_最新版PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本...
- python中matplotlib调整图例位置
- 裸金属服务器开通原理
- 「需求广场」需求词更新明细(十二)
- 终极单词index 排序 K-L
- Html和Xml中注释符
- RADIUS 服务器之 hostapd 配置说明
- 8 9区别 endnote7_带鱼5-7和8-9的区别