当前位置: 首页 > news >正文

java操作Excel两种方式EasyExcel 和POI

一、POI

1.引入依赖

<!-- 03 xls-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency><!-- 07 xlsx -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency><!-- 日期格式化 -->
<dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.4</version>
</dependency>

2.读取Excel

package com.example;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.*;public class Test {public static void main(String[] args) throws Exception {//获取文件的数据流InputStream inputStream = new FileInputStream("D:\\java\\测试.xls");//创建文件对象Workbook workbook = new HSSFWorkbook(inputStream);//获取SheetSheet sheet = workbook.getSheetAt(0);//获取行Row row = sheet.getRow(0);//获取列Cell cell = row.getCell(0);String stringCellValue = cell.getStringCellValue();System.out.println(stringCellValue);inputStream.close();}
}

3.写入Excel

package com.example;import org.apache.poi.hssf.usermodel.HSSFCell;
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 java.io.*;public class Test {public static void main(String[] args) throws Exception {//获取文件的数据流InputStream inputStream = new FileInputStream("D:\\java\\demo.xls");//创建文件对象Workbook workbook = new HSSFWorkbook(inputStream);//获取SheetSheet sheet = workbook.getSheetAt(0);int rows = sheet.getPhysicalNumberOfRows();for (int i = 0; i < rows; i++) {Row row = sheet.getRow(i);int cells = row.getPhysicalNumberOfCells();for (int j = 0; j < cells; j++) {Cell cell = row.getCell(j);int type = cell.getCellType();String value = "";switch (type){case HSSFCell.CELL_TYPE_STRING:value = cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_NUMERIC:cell.setCellType(HSSFCell.CELL_TYPE_STRING);value = cell.getStringCellValue();break;}System.out.print(value+" ");}System.out.println();}inputStream.close();}
}

二、EasyExcel

EasyExcel 会将 Excel 数据和 Java 对象之间绑定起来

1.引入依赖

<!-- EasyExcel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version>
</dependency>

2.创建跟 Excel 数据格式对应的 Java 类

package com.example;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;import java.util.Date;@Data
public class ExcelVO {@ExcelProperty("ID")private Integer id;@ExcelProperty("公司名称")private String name;@ExcelProperty("停车场")private String park;@ExcelProperty("车牌号")private String number;@ExcelProperty("支付类别")private String type;@ExcelProperty("支付金额(元)")private Integer money;@ExcelProperty("支付时间")private Date time;
}

3.读取数据

package com.example;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.apache.poi.hssf.usermodel.HSSFCell;
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 java.io.*;public class Test {public static void main(String[] args) throws Exception {InputStream inputStream = new FileInputStream("D:\\java\\demo.xls");EasyExcel.read(inputStream).head(ExcelVO.class).sheet().registerReadListener(new AnalysisEventListener<ExcelVO>() {@Overridepublic void invoke(ExcelVO o, AnalysisContext analysisContext) {System.out.println(o);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("文件解析完成");}}).doRead();}
}

4.写数据

package com.southwind.handler;import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.CollectionUtils;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;import java.util.HashMap;
import java.util.List;
import java.util.Map;public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy {private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);if (needSetWidth) {Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());if (maxColumnWidthMap == null) {maxColumnWidthMap = new HashMap<>();CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);}Integer columnWidth = this.dataLength(cellDataList, cell, isHead);if (columnWidth >= 0) {if (columnWidth > 255) {columnWidth = 255;}Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());if (maxColumnWidth == null || columnWidth > maxColumnWidth) {maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);}}}}private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {if (isHead) {return cell.getStringCellValue().getBytes().length;} else {CellData cellData = cellDataList.get(0);CellDataTypeEnum type = cellData.getType();if (type == null) {return -1;} else {switch (type) {case STRING:return cellData.getStringValue().getBytes().length;case BOOLEAN:return cellData.getBooleanValue().toString().getBytes().length;case NUMBER:return cellData.getNumberValue().toString().getBytes().length;default:return -1;}}}}
}
package com.example;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.southwind.handler.CustomCellWriteHandler;
import org.apache.poi.hssf.usermodel.HSSFCell;
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 java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class Test {public static void main(String[] args) throws Exception {List<ExcelVO> list = new ArrayList<>();for (int i = 0; i < 5; i++) {ExcelVO excelVO = new ExcelVO();excelVO.setId(i+1);excelVO.setType("临时车");excelVO.setTime(new Date());excelVO.setPark("软件园停车场");excelVO.setMoney(100);excelVO.setNumber("电A123456");excelVO.setName("Java科技有限公司");list.add(excelVO);}OutputStream outputStream = new FileOutputStream("D:\\java\\demo2.xls");EasyExcel.write(outputStream,ExcelVO.class).registerWriteHandler(new CustomCellWriteHandler()).sheet("停车缴费记录").doWrite(list);}
}
http://www.lryc.cn/news/590650.html

相关文章:

  • Vue加密文章密码 VuePress
  • 使用defineExpose暴露子组件的属性和方法、页面生命周期onLoad和onReady的使用
  • 微服务架构升级:从Dubbo到SpringCloud的技术演进
  • CSS动画与变换全解析:从原理到性能优化的深度指南
  • Web前端性能优化原理与方法
  • PHP8.5.0 Alpha 1 正式发布!
  • Fiddler 中文版 API 调试与性能优化实践 官方中文网全程支持
  • 算法精讲--正则表达式(二):分组、引用与高级匹配技术
  • Hadoop(二)
  • java-面向对象之继承特性
  • 【时时三省】(C语言基础)通过指针引用多维数组2
  • 亚马逊云科技快速上手之EC2 WindowsServer如何设置初始密码和重置
  • 网络劫持对用户隐私安全有何影响?
  • 电力名词通俗解析5:计量系统
  • 矿业自动化破壁者:EtherCAT转PROFIBUS DP网关的井下实战
  • 0 - MIT 6.S081 2020 操作系统 实验环境配置
  • 计算机网络——数据链路层(25王道最新版)
  • python中pymysql中的错误 raise AttributeError(name)AttributeError: commit解决办法
  • [MySQL基础1]数据定义语言DDL与数据操作语言DML
  • 系统性学习C语言-第十八讲-C语言内存函数
  • 微服务的编程测评系统2
  • EP02:【NLP 第二弹】自然语言处理数据
  • 需求分析方法论
  • VUEX 基础语法
  • STM32 | 定时器 PWM 呼吸灯
  • 基于渐进式迁移学习网络(PTLN)​的小样本故障诊断模型
  • [特殊字符] Electron 中的 `global` 变量
  • 用PyTorch手写透视变换
  • 【2025/07/16】GitHub 今日热门项目
  • 推客系统开发全攻略:从架构设计到高并发实战