poi解析excel

一.遇见的问题:

  当单元格设置为日期类型时,cell.getCellStyle().getDataFormat()返回的值都为176。

  poi jar包3.14以上不支持用cell.getCellType()判断类型的方法。

  使用poi解析技术需要导入poi以及poi-ooxml两个jar包。

二.单元格的类型cell.getCellType():

  HSSFCell.CELL_TYPE_NUMERIC:数字类型(包含日期)

  CELL_TYPE_STRING:字符串

  CELL_TYPE_BOOLEAN:布尔类型

  CELL_TYPE_BLANK:没有值

  CELL_TYPE_FORMULA:公式取值

三.单元格为自定义类型的时候,cell.getCellStyle().getDataFormat()值:

  yyyy-MM-dd---->14

  yyyy年m月d日--->31

  yyyy年m月------>57

  m月d日  -------->58

  HH:mm--------->20

  h时mm分  ------>32

四.最终代码:

package cn.trashman.excel;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date; 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.DateUtil;
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; public class PoiExcel {
public static void main(String[] args) {
poiExcel("D:/1.xlsx");
}
@SuppressWarnings("resource")
public static void poiExcel(String fileName){
boolean is2007 = true; //判断是否是excel2007格式
if(fileName.endsWith("xlsx"))
is2007 = false;
try {
InputStream input = new FileInputStream(fileName); //建立输入流
Workbook wb = null;
//根据文件格式(2003或者2007)来初始化
if(is2007)
wb = new HSSFWorkbook(input);
else
wb = new XSSFWorkbook(input);
Sheet sheet = wb.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i <= lastRowNum; i++) {
//具体到某一行
Row row = sheet.getRow(i);
//单元格的数量
int lastCellNum = row.getLastCellNum();
for (int j = 0; j < lastCellNum; j++) {
Cell cell = row.getCell(j);
//根据cell中的类型来输出数据
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
Object result = cell.getNumericCellValue();
// // 判断单元格是否属于日期格式
// if(HSSFDateUtil.isCellDateFormatted(cell)){
// //java.util.Date类型
// result = cell.getDateCellValue();
// }
short format = cell.getCellStyle().getDataFormat();
SimpleDateFormat sdf = null;
if(format != 0){
// format == 176时是当指定单元格格式为日期是都是176
if(format == 14 || format == 31 || format == 57 || format == 58||format == 176){
//日期
sdf = new SimpleDateFormat("yyyy-MM-dd");
}else if (format == 20 || format == 32) {
//时间
sdf = new SimpleDateFormat("HH:mm");
}
double value = cell.getNumericCellValue();
Date date = DateUtil.getJavaDate(value);
result = sdf.format(date);
}
System.out.println(result);
break;
case HSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BLANK:
System.out.println("为空");
break;
default:
System.out.println("unsuported sell type");
break;
}
}
System.out.println();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上一篇:VBS脚本代码(手工编写---在windows 7上调用系统对话框,来选择文件)


下一篇:(转)Android调用系统自带的文件管理器进行文件选择并获得路径