java读取excel时间_使用POI读取xlsx文件,包含对excel中自定义时间格式的处理

该博客展示了如何使用Apache POI库读取xlsx文件,并处理其中自定义时间格式的数据。代码示例中,程序遍历Excel的每个单元格,根据单元格的格式ID判断是否为自定义日期格式,并转换为标准的yyyy-MM-dd HH:mm:ss格式。
摘要由CSDN通过智能技术生成

packagepoi;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.text.DecimalFormat;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.poi.ss.usermodel.CellStyle;importorg.apache.poi.xssf.usermodel.XSSFCell;importorg.apache.poi.xssf.usermodel.XSSFRow;importorg.apache.poi.xssf.usermodel.XSSFSheet;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;public classGetExcelData {public static List>readFile(File file){//excel中第几列 : 对应的表头

Map colAndNameMap = new HashMap<>();

List> resultList = new ArrayList<>();

FileInputStream fs= null;

XSSFWorkbook wb= null;try{

fs= newFileInputStream(file);

wb= newXSSFWorkbook(fs);for(int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++){//获取sheet数据

XSSFSheet st =wb.getSheetAt(sheetIndex);//遍历一个sheet中每一行

for (int rowIndex = 0; rowIndex <= st.getLastRowNum(); rowIndex++) {//表头:值

Map nameAndValMap = new HashMap<>();//获取到一行数据

XSSFRow row =st.getRow(rowIndex);for(int cellIndex = 0; cellIndex < row.getPhysicalNumberOfCells(); cellIndex++){if(rowIndex==0){

colAndNameMap.put(cellIndex, row.getCell(cellIndex).getStringCellValue());

}else if(!colAndNameMap.isEmpty()){

nameAndValMap.put(cellIndex, buildDate(row.getCell(cellIndex)));

}

}if(!nameAndValMap.isEmpty()){

resultList.add(nameAndValMap);

}

}

}returnresultList;

}catch(FileNotFoundException e) {

System.out.println(">>>>>>>>>> 读取excel文件时出错了!!!");

e.printStackTrace();

}catch(IOException e) {

System.out.println(">>>>>>>>>> 读取excel文件时出错了!!!");

e.printStackTrace();

}catch(Exception e) {

System.out.println(">>>>>>>>>> 读取excel文件时出错了!!!");

e.printStackTrace();

}finally{try{

wb.close();

}catch(IOException e) {

e.printStackTrace();

}try{

fs.close();

}catch(IOException e) {

e.printStackTrace();

}

}return null;

}//将excel中时间格式字段进行处理

@SuppressWarnings("deprecation")public staticString buildDate(XSSFCell cell) {

String result= newString();switch(cell.getCellType()) {caseXSSFCell.CELL_TYPE_NUMERIC:if (cell.getCellStyle().getDataFormat() == 176) {//处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");double value =cell.getNumericCellValue();

Date date=org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);

result=sdf.format(date);

}else{double value =cell.getNumericCellValue();

CellStyle style=cell.getCellStyle();

DecimalFormat format= newDecimalFormat();

String temp=style.getDataFormatString();//单元格设置成常规

if (temp.equals("General")) {

format.applyPattern("#");

}

result=format.format(value);

}break;case XSSFCell.CELL_TYPE_STRING://String类型

result =cell.getStringCellValue();break;default:

result= "";break;

}returnresult;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值