POI处理excel日期格式问题(xlsx)

Posted skinchqqhah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POI处理excel日期格式问题(xlsx)相关的知识,希望对你有一定的参考价值。

package com.wonders.task.excel.util;

import com.wonders.task.excel.model.SendBo;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created with IntelliJ IDEA.
 * User: zhoushun
 * Date: 2014/12/6
 * Time: 20:25
 * To change this template use File | Settings | File Templates.
 */
public class PoiUtil {
    private static String excel2007 = "D:\all.xlsx";

    private static void setCode(SendBo bo){
        Pattern pattern = Pattern.compile("(\S+)\((\d+)\)(\d+)号");

        String sendId = bo.getSendId();
        if(sendId == null || sendId.length() == 0){
            bo.setCode1("");bo.setCode2("");bo.setCode3("");
        }else{
            Matcher matcher = pattern.matcher(sendId);
            if(matcher.find()){
                bo.setCode1(matcher.group(1));
                bo.setCode2(matcher.group(2));
                bo.setCode3(matcher.group(3));
            }
        }
    }

    public static List<SendBo> readExcel2007(){
        List<SendBo> list = new ArrayList<SendBo>();
        try{
            File excelFile = new File(excel2007);
            FileInputStream is = new FileInputStream(excelFile);// 获取文件输入流
            XSSFWorkbook workbook2007 = new XSSFWorkbook(is);// 创建Excel2003文件对象
            XSSFSheet sheet = workbook2007.getSheetAt(0);// 取出第一个工作表,索引是0
            // 开始循环遍历行,表头不处理,从1开始
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                XSSFRow row = sheet.getRow(i);// 获取行对象
                if (row == null) {// 如果为空,不处理
                    continue;
                }
                SendBo bo = new SendBo();
                // 循环遍历单元格
                for (int j = 0; j < row.getLastCellNum(); j++) {

                    XSSFCell cell = row.getCell(j);// 获取单元格对象
                    switch(j){
                        case 0 :
                            bo.setSendDept(getStringCellValue(cell).trim());
                            break;
                        case 1 :
                            bo.setSendId(getStringCellValue(cell).trim());
                            break;
                        case 2 :
                            bo.setSendDate(getStringCellValue(cell).trim());
                            setCode(bo);
                            break;
                        case 3 :
                            bo.setTitle(getStringCellValue(cell).trim());
                            break;
                        case 4 :
                            bo.setSendMain(getStringCellValue(cell).trim());
                            break;
                        case 5 :
                            break;
                        case 6 :
                            break;
                        default:
                            break;
                    }

                }
                list.add(bo);
            }


        }catch(Exception e){}



        return list;
    }


    /**
     * 获取单元格数据内容为字符串类型的数据
     *
     * @param cell Excel单元格
     * @return String 单元格数据内容
     */
    private static String getStringCellValue(XSSFCell cell) {
        String strCell = "";
        switch (cell.getCellType()) {
            case XSSFCell.CELL_TYPE_STRING:
                strCell = cell.getStringCellValue();
                break;
            case XSSFCell.CELL_TYPE_NUMERIC:
                if (XSSFDateUtil.isCellDateFormatted(cell)) {
                    //  如果是date类型则 ,获取该cell的date值
                    strCell = new SimpleDateFormat("yyyy-MM-dd").format(XSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
                } else { // 纯数字
                    strCell = String.valueOf(cell.getNumericCellValue());
                }
                    break;
            case XSSFCell.CELL_TYPE_BOOLEAN:
                strCell = String.valueOf(cell.getBooleanCellValue());
                break;
            case XSSFCell.CELL_TYPE_BLANK:
                strCell = "";
                break;
            default:
                strCell = "";
                break;
        }
        if (strCell.equals("") || strCell == null) {
            return "";
        }
        if (cell == null) {
            return "";
        }
        return strCell;
    }


    public static void main(String[] args){
        String s = "沪地铁(2014)22号";
        Pattern pattern = Pattern.compile("(\S+)\((\d+)\)(\d+)号");
        Matcher matcher = pattern.matcher(s);
        if(matcher.find()){
            int gc = matcher.groupCount();
            for(int i = 0; i <= gc; i++)
                System.out.println("group " + i + " :" + matcher.group(i));
        }
        //readExcel2007();
    }
}

 

自定义处理日期:

 

package com.wonders.task.excel.util;

import org.apache.poi.ss.usermodel.DateUtil;

import java.util.Calendar;

/**
 * Created with IntelliJ IDEA.
 * User: zhoushun
 * Date: 2014/12/7
 * Time: 0:36
 * To change this template use File | Settings | File Templates.
 */
public class XSSFDateUtil extends DateUtil {
    protected static int absoluteDay(Calendar cal, boolean use1904windowing) {
        return DateUtil.absoluteDay(cal, use1904windowing);
    }
}


再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow



以上是关于POI处理excel日期格式问题(xlsx)的主要内容,如果未能解决你的问题,请参考以下文章

14java实现poi操作excel,包括读和写日期格式,并且设置字体样式

如何使用POI处理Excel中的日期数据类型

java怎么将xlsx转换成csv格式

使用java读取xlsx格式的execl,除了poi还都有哪些方式

POI处理Excel中各种日期格式问题

POI处理Excel中各种日期格式问题