基于POI的Java-Excel读写操作
基于POI的Excel操作
Based on 【狂神说Java】POI及EasyExcel一小时搞定通俗易懂 @ https://www.bilibili.com/video/BV1Ua4y1x7BK
1、POI介绍
2、POI的读写
POM 引用
<!-- xls --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <!-- 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.1</version> </dependency>
2.1 POI基本读写
2.1.1 一个简单测试类
public void testWrtXls(){ //1. Create a Workbook Workbook wb - new HSSFWorkbook(); //2. Create a Sheet Sheet sheet = wb.createSheet("sheet1"); //3. Create a row Row row = sheet.createRow(0); //4. Create a cell Cell cell = row.createCell(0); //5. Set cell value cell.setCellValue("SampleText"); //Create as a File new FileOutputStream fos = new FileOutputStream(PATH + FILENAME + EXTNAME); wb.write(fos); //Close Stream fos.close(); System.out.println("FILE GENERATE SUCCESS!"); }
注:打开文件使用 new HSSFWorkbook(fis)
FileInputStream fis = new FileInputStream(FILEPATH+FILENAME); Workbook wb = new HSSFWorkbook(fis); //TODO fis.close(); //关闭流操作
注:03版: HSSF,07版: XSSF
2.1.2 常见用例
2.1.2.1 获取该行字段数
· 如获取表格首行字段数:
Workbook wb = new HSSFWorkbook(new FileInputStream(FILEPATH)); Sheet sheet = wb.getSheetAt(0); Row rowTitle = sheet.getRow(0); if(rowTitle != null){ int cellCnt = rowTitle.getPhysicalNumberOfCells(); //此时获得实际的行宽(列个数) cellCnt }
2.1.2.2 规范化输出,输出内容前,判断row、cell不为空
Row rowData = sheet.getRow(rowNum); if(rowData != null){ int cellCnt = rowData.getPhysicalNumbberOfCells(); for(int cellNum = 0; cellNum < cellCnt; cellNum++){ Cell cell = row.getCell(cellNum); //非空判断 if(cell != null){ //对cell进行进一步操作 } } |
2.2 数据格式
2.2.1 格式信息
Cell 格式与数字的映射表# | TYPE | NUMBER |
1 | CELL_TYPE_NUMERIC | 0 |
2 | CELL_TYPE_STRING | 1 |
3 | CELL_TYPE_FORMULA | 2 |
4 | CELL_TYPE_BLANK | 3 |
5 | CELL_TYPE_BOOLEAN | 4 |
6 | CELL_TYPE_ERROR | 5 |
2.2.1 获取cell单元格类型,进而进行数据处理
if(cell != null){ int cellType = cell.getCellType(); switch(cellType){ String cellValue = ""; //1 CELL_TYPE_NUMERIC 数字型(日期型、数字型) case HSSFCell.CELL_TYPE_NUMERIC: //首先判断是否为日期型,日期则格式化输出,数字则转为字符型输出 if(HSSFDateUtil.isCellDateFormatted(cell)){ //日期型 处理: Date date = cell.getDateCellValue(); cellValue = new DateTime(date).toString("yyyy-MM-dd"); }else{ //数字型转为字符输出: cell.setCellType(HSSFCell.CELL_TYPE_STRING); cellValue = cell.toString(); } break; //2 CELL_TYPE_STRING 字符型 case HSSFCell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue(); break; //3 CELL_TYPE_FORMULA 公式型 //首先需要在外面获取到计算公式处理 //FormulaEvaluator fe = new HSSFFormulaEvaluator((HSSFWorkbook) wb); case HSSFCell.CELL_TYPE_FORMULA: CellValue evaluate = fe.evaluate(cell); cellValue = evaluate.formatAsString(); break; //4 CELL_TYPE_BLANK 空值 case HSSFCell.CELL_TYPE_STRING: //直接break(cellValue初值为空) break; //5 CELL_TYPE_BOOLEAN 布尔型 case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; } }
3、EasyExcel
3.1 EasyExcel介绍
官方文档:www.yuque.com/easyexcel/doc/easyexcel
快速、简单避免OOM的Java处理Excel工具。
3.1.1 POM引用*
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.2.0-beta2</version> </dependency>
注:easyexcel引用到了poi相关的pom,故
无需重新引用poi
的dependency;easyExcel 引用的还包含
fastjson
、lombok
、spring-boot
、spring-boot-starter-web
等。
3.2 快速开始EasyExcel
(3.2节中下面的)例子来自官方Reference:https://www.yuque.com/easyexcel/doc/read
未完待续。
编辑: Za。
固定链接:https://www.cnblogs.com/zeazje/articles/java_poi_excel.html
除页面内声明来源外,其余均为原创内容,转载时须保留此段声明,且在文章页面明显位置标出,禁止商业使用。
© 2024 Some Rights Reserved.
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步