JXLUtils.java

package com.github.mygreen.cellformatter.lang;

import java.lang.reflect.Field;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.SheetImpl;
import jxl.read.biff.WorkbookParser;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * JExcelAPIのユーティリティクラス。
 * @author T.TSUCHIE
 *
 */
public class JXLUtils {
    
    private static final Logger logger = LoggerFactory.getLogger(JXLUtils.class);
    
    /**
     * ファイルが1904年始まりの設定かどうか。
     * @param workbook 判定対象のワークブック。
     * @return true:1904年始まり
     * @throws IllegalArgumentException {@literal workbook == null.}
     */
    public static boolean isDateStart1904(final Workbook workbook) {
        ArgUtils.notNull(workbook, "workbook");
        
        if(workbook instanceof WorkbookParser) {
            try {
                Field field = WorkbookParser.class.getDeclaredField("nineteenFour");
                field.setAccessible(true);
                
                boolean value = field.getBoolean(workbook);
                return value;
                
            } catch (NoSuchFieldException | SecurityException e) {
                logger.warn("fail access field WrokbookParser#nineteenFour", e);
                return false;
                
            } catch (IllegalArgumentException | IllegalAccessException e) {
                logger.warn("fail invoke field WrokbookParser#nineteenFour", e);
                return false;
            }
            
        }
        
        return false;
    }
    
    /**
     * ファイルが1904年始まりの設定かどうか。
     * @param sheet 判定対象のシート。
     * @return true:1904年始まり
     * @throws IllegalArgumentException  {@literal sheet == null.}
     */
    public static boolean isDateStart1904(final Sheet sheet) {
        ArgUtils.notNull(sheet, "sheet");
        
        if(sheet instanceof SheetImpl) {
            try {
                Field field = SheetImpl.class.getDeclaredField("nineteenFour");
                field.setAccessible(true);
                
                boolean value = field.getBoolean(sheet);
                return value;
                
            } catch (NoSuchFieldException | SecurityException e) {
                logger.warn("fail access field SheetImpl#nineteenFour", e);
                return false;
                
            } catch (IllegalArgumentException | IllegalAccessException e) {
                logger.warn("fail invoke field SheetImpl#nineteenFour", e);
                return false;
            }
            
        }
        
        return false;
    }
    
}