poi 워크북의cellstyle 4000을 초과할 수 없는 해결 방법 만들기

3483 단어
POI를 사용하여 Excel 워크시트(Sheet)를 복사할 때 복사된 워크시트(Sheet)가 많거나(100개 정도) Excel 행 수가 많거나(5000+) 워크북의 cellstyle 생성이 4000을 초과하면 안 되는 오류가 보고됩니다.The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xlsworkbook(주: 인터넷의 대부분 해결 방안은 CreateCellStyle을 순환 밖에 두는 것이지만 Excel에 대한 복제는 통하지 않습니다. CellStyle을 최대한 활용하고 4000개 이내로 제어하기 위해 캐시 대상을 만들었습니다. 캐시로 만든 CellStyle을 캐시합니다. 모든 CellStyle은 캐시에서 가져오고 존재하지 않으면 다시 만듭니다. 코드는 아래와 같습니다)
public class CellStyleCache {

    private static List list = null;

    public CellStyleCache(){

    }

    public static void Initialized(){
        if(list==null||CacheManager.getCacheInfo("CellStyleCache").getValue()==null){
            list = new ArrayList();
            CacheManager.putCacheInfo("CellStyleCache", list, 7200);
        }
    }

    public static void addCellStyle(HSSFCellStyle style){
        list.add(style);
    }

    public static HSSFCellStyle getCellStyle(HSSFCellStyle cellStyle){

        for(HSSFCellStyle style : list){
            if(style.getAlignment() == cellStyle.getAlignment()
                    //     
                    && style.getBorderBottom() == cellStyle.getBorderBottom()
                    && style.getBorderLeft() == cellStyle.getBorderLeft()
                    && style.getBorderRight() == cellStyle.getBorderRight()
                    && style.getBorderTop() == cellStyle.getBorderTop()
                    && style.getTopBorderColor() == cellStyle.getTopBorderColor()
                    && style.getBottomBorderColor() == cellStyle.getBottomBorderColor()
                    && style.getRightBorderColor() == cellStyle.getRightBorderColor()
                    && style.getLeftBorderColor() == cellStyle.getLeftBorderColor()
                    //     
                    && style.getFillBackgroundColor() == cellStyle.getFillBackgroundColor()
                    && style.getFillForegroundColor() == cellStyle.getFillForegroundColor()
                    && style.getHidden() == cellStyle.getHidden()
                    && style.getVerticalAlignment() == cellStyle.getVerticalAlignment()){
                return style;
            }
        }
        addCellStyle(cellStyle);
        return null;
    }
}

좋은 웹페이지 즐겨찾기