使用Java操作excel可以使用两种方式:
关于表格导入导出,市面上比较知名的开源就是 Apache 的POI 和 阿里巴巴的 EasyExcel了。EasyExcel 也是对 POI 的改进和封装, 更加好用。
1:POI是Apache 的开源项目,由Java编写的跨平台 Java API,可操作Microsoft Office。借助POI,可以方便的生成数据报表,数据批量上传,数据备份等工作。但是将文件数据一次性全部加载到内存可能导致OOM。
2:EasyExcel 能大大减少内存占用的主要原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。


加入依赖:

 <!--  xls 03版本的&lt;!&ndash; https://mvnrepository.com/artifact/org.apache.poi/poi &ndash;&gt;<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency>&lt;!&ndash; xls 07版本的 &ndash;&gt;<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相关推荐

  1. java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)

    Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...

  2. java excel类库,jExcelApi Java 操作 Excel 的类库

    jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...

  3. 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 ...

  4. java操作Excel、PDF文件

    java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...

  5. java操作excel表

    文章分类:Java编程 http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介 JAVA EXCEL API简介 Java ...

  6. JAVA操作Excel时文字自适应单元格的宽度设置方法

    使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...

  7. java excel 插入新行_POI ,Java 操作 Excel 實現行的插入(insert row)

    POI ,Java 操作 Excel 實現行的插入(insert row) 前幾天,正在做一個項目,主要用 POI 來操作 Excel 其中,要使用一個,插入功能.主要是因為從數據庫,返回結果集(數據 ...

  8. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  9. Java操作Excel之Excel文件的下载

    1.有的时候在Web应用会有下载Excel的需求,现分享下后台实现下载Excel文件的代码 @RequestMapping(value = "/exportExcel", meth ...

  10. Java 操作excel表格 - JXL(Java excel api)

    Java 操作excel表格 Java 操作 Excel 最常用的就是JXL(Java excel api)和POI,用起来挺简单的,不过相应的其功能也并非很强大,够用就行! 首先,下载jxl.jar ...

最新文章

  1. 传海思砍台积电第三季度一半手机订单
  2. Vertebrae 发布了新的SDK!
  3. linux c 读写mbr_一文看懂Linux开机流程BIOS-MBR-GRUB-Kernel-Init-Runlevel
  4. 附笔记pdf下载,MIT中文线性代数课程精细笔记[第四课]
  5. 造轮子是什么意思_程序员发文质疑阿里天启为kpi项目,重复造轮子,阿里回应:诽谤...
  6. 浏览器的headers
  7. python中str和int区别_python中eval与int的区别浅析
  8. php 虚拟空间,什么是php虚拟主机?
  9. java int转bitmap_Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码...
  10. 机器学习第18篇 - Boruta特征变量筛选(2)
  11. 太棒了!PyTorch 1.7发布,支持CUDA 11、Windows分布式训练
  12. VS2012下基于Glut 矩阵变换示例程序:
  13. wamp添加mysql版本_最新版PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本...
  14. python中matplotlib调整图例位置
  15. 裸金属服务器开通原理
  16. 「需求广场」需求词更新明细(十二)
  17. 终极单词index 排序 K-L
  18. Html和Xml中注释符
  19. RADIUS 服务器之 hostapd 配置说明
  20. 8 9区别 endnote7_带鱼5-7和8-9的区别

热门文章

  1. 嵌入式linux使用A7680C 4G 网卡
  2. EN 16034门窗及配件—CE认证
  3. 共识算法比较:Tendermint的BFT与EOS的dPoS
  4. 一级计算机B理论知识和答案,计算机一级B试题+理论答案 10秋06
  5. topsis(优劣解距离法)在matlab上的实现
  6. 西门子PLC之间如何建立无线通讯?
  7. 基于北向资金指数择时策略验证与思考
  8. “手术机器人”掀起融资潮,行业正加速打破“达芬奇”神话
  9. 趣学PYTHON 第一章python不是大蟒蛇
  10. 新型能力的识别与确定