1. 程式人生 > >POI處理excel日期格式問題(xlsx)

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);
    }
}


相關推薦

POI處理excel日期格式問題xlsx

package com.wonders.task.excel.util; import com.wonders.task.excel.model.SendBo; import org.apache.poi.xssf.usermodel.XSSFCell; import o

用python處理Excel文件2——用xlsxwriter模組寫xls/xlsx文件

本文主要總結一下如何使用xlsxwriter模組來自動化生成和處理Excel文件。 簡單用法demo # !/usr/bin/python # coding:utf-8 # xlsxwriter的基本用法 import xlsxwriter # 1

C# 應用Excel條件格式

add mfile cell 運行程序 afa arc lin png studio Excel中的條件格式功能是個十分強大且方便的功能,通過對使用條件格式功能可以在很大程度上改進表格的設計和可讀性,用戶可以指定單個或者多個單元格區域應用一種或者多種格式,如此一來,也大大提

C# 設置Excel條件格式

result pbo 調試運行 註意 sin 兩個 collect raw gree 上一篇文章中介紹了關於設置Excel條件格式,包括基於單元格值、自定義公式等應用條件格式、應用數據條條件類型格式、刪除條件格式等內容。在本篇文章中將繼續介紹C# 設置條件格式的方法。 要點

POI實現Excel匯入匯出

利用idea建立java web的maven專案,在pom中新增對poi的jar的依賴。 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/200

Java使用POI匯出Excel工具類反射

pom.xml: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId&g

《轉載》POI匯出excel日期格式

參考帖子: 再讀本篇文章之前,請先看我的前一篇文章,前一篇文章中有重點講到POI設定EXCEL單元格格式為文字格式,剩下的設定小數、百分比、貨幣、日期、科學計數法和中文大寫這些將在下面一一寫出 以下將要介紹的每一種都會用到這三行中的變數             HSSFWorkbook de

POI匯出excel日期格式

參考帖子:再讀本篇文章之前,請先看我的前一篇文章,前一篇文章中有重點講到POI設定EXCEL單元格格式為文字格式,剩下的設定小數、百分比、貨幣、日期、科學計數法和中文大寫這些將在下面一一寫出以下將要介紹的每一種都會用到這三行中的變數            HSSFWorkbo

poi操作Excel高階格式處理隨專案更新

前言: 隨著人們審美要求的提高,對於excel表格的格式也提出了相應的要求,針對每個專案模板的需求不同,excel所呈現的形式也是大相徑庭。雖然我們為了方便維護管理,可以使用類似 **WindDistriButionReportToExcel extends E

利用POI框架的SAX方式處理大資料2007版Excelxlsx【第2版】

【第1版】地址 針對老早寫的POI處理Excel的大資料讀取問題,看到好多人關注,感覺自己還是更新一版,畢竟雖然是自己備份,但是如果新手能少走彎路,也算欣慰。下面的版本是我的專案迭代過程中個人認為畢竟穩定和健壯的,算作【第2版】吧,裡面修復了【第1版】的很多bug,諸如

POI處理Excel中各種日期格式問題

前不久寫過一篇隨筆《EXCEL解析之終極方法WorkbookFactory》,提到使用WorkbookFactory來處理Excel檔案資料,最近發現一個問題就是這個辦法不能很好的處理各種日期格式,比如下面這些: 那麼如何將這些格式正確識別並輸出呢?下面來分享一下解決方法。 其實答案已

POI解析自定義日期格式標題雖然大眾,但是內容絕非大眾

在專案中遇到過一種情況,匯入的時間格式為 yyyy/mm/dd hh:mm:ss,這個很好弄,自定義一下日期格式,並且新增資料有效性。。。。趕著下班,暫時不廢話那麼多了。就是兩種情況:一個是解析自定義日期,還有解釋從別的地方複製過來的日期,雖然也能新增上去,但是後天解析時間資料不對。直接上程式碼,希望有所幫助

關於Oracle日期格式DD-MM-YY轉化為YYYY-mm-DD

一、DD-MM-RR SELECT TO_CHAR(TO_DATE('12-01-49', 'DD-MM-RR'), 'YYYYMMDD') "Year",TO_CHAR(TO_DATE('12-01-98', 'DD-MM-RR'), 'YYYYMMDD') "Year" FROM DUAL;

SpringMVC之全域性異常處理 ——統一返回格式自定義異常

SpringMVC之全域性異常處理 老規矩開篇咱們先介紹一下背景 因當前APP越來越流行,或是提供的第三方介面等等都需要你來統一返回格式。這個時候問題就來了 ,很多時候系統的異常以及為了程式碼的可讀性我們必然會抽出很多的間接層(例如資料格式校驗、資料有效性校驗等),一層層的retur

日期型轉json格式springboot

可以在屬性上增加 GMT+8表示東八區 @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd") 或 @JsonFormat(shape = JsonFormat.Shape.NUMBER) 全域性修改可以在application.

EXCEL檔案xlsx的讀取與data的寫入

使用ExcelFile時,通過將xls或xlsx的路徑傳入,生成一個例項: xlsx = pd.ExcelFile('example/ex1.xlsx') 儲存在表中的資料可以通過pandas.read_excel讀取到DataFrame中: 如果你讀取的是

JS中時間戳轉日期格式YYYY-MM-dd HH:mm:ss

function formatUnixtimestamp (unixtimestamp){ var unixtimestamp = new Date(unixtimestamp*100

JAVA實現EXCEL公式專題——數字處理函式

由於數字處理已經是非常常見的了,比如四捨五入、取整、整除等等,在這裡不多說,上點簡單的程式碼 /** * 專案名稱: * 檔案說明:EXCEL公式型別:數字公式 * 主要特點: *

JAVA實現EXCEL公式專題——字符串函數

main 問題 int start boolean java ... ringbuf out substring 直接上代碼:/** * 項目名稱: * 文件說明: ExCEL公式類型:字符串公式 * 主要特點: * 版本:1.0 * 制作人:劉晨曦

angularJs 處理單選按鈕radio

label style eve div del inpu level blog val <label class="radio"> <input type="radio" name="level" ng-model="levelName" val