当前位置: 代码迷 >> 综合 >> Java使用POI读取Excel(Java poi cell.getCellType()版本问题)
  详细解决方案

Java使用POI读取Excel(Java poi cell.getCellType()版本问题)

热度:94   发布时间:2023-09-30 18:17:41.0

POI简介

  Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。

 

  • HSSF : 读写 Microsoft Excel XLS 格式文档
  • XSSF : 读写 Microsoft Excel OOXML XLSX 格式文档
  • SXSSF : 读写 Microsoft Excel OOXML XLSX 格式文档
  • HWPF : 读写 Microsoft Word DOC 格式文档
  • HSLF : 读写 Microsoft PowerPoint 格式文档
  • HDGF : 读 Microsoft Visio 格式文档
  • HPBF : 读 Microsoft Publisher 格式文档
  • HSMF : 读 Microsoft Outlook 格式文档

POI常用类说明
类名                           说明

HSSFWorkbook        Excel的文档对象

HSSFSheet               Excel的表单

HSSFRow                 Excel的行

HSSFCell                  Excel的格子单元

HSSFFont                 Excel字体

HSSFDataFormat     格子单元的日期格式

HSSFHeader            Excel文档Sheet的页眉

HSSFFooter             Excel文档Sheet的页脚

HSSFCellStyle         格子单元样式

HSSFDateUtil          日期

HSSFPrintSetup       打印

HSSFErrorConstants   错误信息表

官网链接:https://poi.apache.org/components/index.html

 

需要的jar包:

poi-ooxml-XXX.jar

poi-ooxml-schemas-XXX.jar

poi-scratchpad-XXX.jar

POI的不同版本在代码编写上有差异,旧版本的某些代码不适用于新版本,后面详细展开。

maven导入

<dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version></dependency></dependencies>

主程序读取Excel

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
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;public class FetchExcel {public static void main(String[] args){String filePath = "D:\\测试文件\\test.xlsx";InputStream fis = null;try{fis = new FileInputStream(filePath);Workbook wb = null;if(filePath.endsWith((".xlsx"))){wb = new XSSFWorkbook(fis);}else if(filePath.endsWith(".xls") || filePath.endsWith(".et")){wb = new HSSFWorkbook(fis);}fis.close();/* 读Excel文字内容 */// 获取第一个sheet表,也可使用sheet表名获取Sheet sheet = wb.getSheetAt(0);// 获取行Iterator<Row> rows = sheet.rowIterator();Row row;Cell cell;while(rows.hasNext()){row = rows.next();//获取单元格Iterator<Cell> cells =row.cellIterator();while (cells.hasNext()){cell = cells.next();//POIUtil是另一个类String cellValue = POIUtil.getCellValue(cell);System.out.print(cellValue + " ");}System.out.println();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (null != fis){try{fis.close();}catch (IOException e){e.printStackTrace();}}}}
}

获取cell中的值并返回String类型工具类

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.CellType;//获取cell中的值并返回String类型工具类
public class POIUtil {public static String getCellValue(Cell cell) {String cellValue = "";if (null != cell) {//以下是判断数据类型switch (cell.getCellType()) {case NUMERIC:if (DateUtil.isCellDateFormatted(cell)) { //判断是否为日期类型Date date = cell.getDateCellValue();DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");cellValue = formater.format(date);} else {DecimalFormat df = new DecimalFormat("####.####");cellValue = df.format(cell.getNumericCellValue());}break;case STRING:cellValue = cell.getStringCellValue();break;case BOOLEAN:cellValue = cell.getBooleanCellValue() + "";break;case BLANK: //空值cellValue = "";case ERROR:cellValue = "非法字符";break;}}return cellValue;}
}

  相关解决方案