SheetHolder.java 6.0 KB
Newer Older
Z
zhuangjiaju 已提交
1 2
package com.alibaba.excel.metadata.holder;

3 4
import java.util.ArrayList;
import java.util.HashMap;
Z
zhuangjiaju 已提交
5 6 7 8 9 10
import java.util.List;
import java.util.Map;

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

import com.alibaba.excel.converters.Converter;
11 12 13
import com.alibaba.excel.metadata.CellStyle;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.TableStyle;
Z
zhuangjiaju 已提交
14
import com.alibaba.excel.metadata.property.ExcelHeadProperty;
Z
zhuangjiaju 已提交
15
import com.alibaba.excel.write.handler.WriteHandler;
16 17
import com.alibaba.excel.write.style.RowCellStyleStrategy;
import com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy;
Z
zhuangjiaju 已提交
18 19 20 21 22 23

/**
 * sheet holder
 *
 * @author zhuangjiaju
 */
24
public class SheetHolder extends AbstractConfigurationSelector {
Z
zhuangjiaju 已提交
25

Z
zhuangjiaju 已提交
26 27 28 29
    /***
     * poi sheet
     */
    private Sheet sheet;
Z
zhuangjiaju 已提交
30 31 32 33 34 35 36 37 38 39 40 41
    /***
     * sheetNo
     */
    private Integer sheetNo;
    /***
     * sheetName
     */
    private String sheetName;
    /***
     * poi sheet
     */
    private WorkbookHolder parentWorkBook;
Z
zhuangjiaju 已提交
42 43 44 45 46 47 48 49 50
    /***
     * has been initialized table
     */
    private Map<Integer, TableHolder> hasBeenInitializedTable;
    /**
     * current param
     */
    private com.alibaba.excel.metadata.Sheet sheetParam;

51 52 53 54 55 56 57 58 59 60 61 62 63
    public SheetHolder(com.alibaba.excel.metadata.Sheet sheet, WorkbookHolder workbookHolder) {
        super();
        this.sheetParam = sheet;
        this.parentWorkBook = workbookHolder;
        boolean noHead = (sheet.getHead() == null || sheet.getHead().isEmpty()) && sheet.getClazz() == null;
        if (noHead) {
            // Use parent
            setHead(workbookHolder.getHead());
            setClazz(workbookHolder.getClazz());
        } else {
            setHead(sheet.getHead());
            setClazz(sheet.getClazz());
        }
Z
zhuangjiaju 已提交
64 65 66
        // Initialization property
        setExcelHeadProperty(new ExcelHeadProperty(getClazz(), getHead(), workbookHolder.getConvertAllFiled()));

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
        setNewInitialization(Boolean.TRUE);
        if (sheet.getNeedHead() == null) {
            setNeedHead(workbookHolder.needHead());
        } else {
            setNeedHead(sheet.getNeedHead());
        }
        if (sheet.getWriteRelativeHeadRowIndex() == null) {
            setWriteRelativeHeadRowIndex(workbookHolder.writeRelativeHeadRowIndex());
        } else {
            setWriteRelativeHeadRowIndex(sheet.getWriteRelativeHeadRowIndex());
        }
        // Compatible with old code
        compatibleOldCode(sheet);
        List<WriteHandler> handlerList = new ArrayList<WriteHandler>();
        if (sheet.getCustomWriteHandlerList() != null && !sheet.getCustomWriteHandlerList().isEmpty()) {
            handlerList.addAll(sheet.getCustomWriteHandlerList());
        }
Z
zhuangjiaju 已提交
84 85 86
        // Initialization Annotation
        initAnnotationConfig(handlerList);

87 88 89 90 91 92 93 94 95
        setWriteHandlerMap(sortAndClearUpHandler(handlerList, workbookHolder.getWriteHandlerMap()));
        Map<Class, Converter> converterMap = new HashMap<Class, Converter>(workbookHolder.converterMap());
        if (sheet.getCustomConverterMap() != null && !sheet.getCustomConverterMap().isEmpty()) {
            converterMap.putAll(sheet.getCustomConverterMap());
        }
        setConverterMap(converterMap);
        setHasBeenInitializedTable(new HashMap<Integer, TableHolder>());
    }

Z
zhuangjiaju 已提交
96
    /**
97
     * Compatible with old code
Z
zhuangjiaju 已提交
98
     */
99 100 101 102 103 104 105 106 107
    @Deprecated
    private void compatibleOldCode(com.alibaba.excel.metadata.Sheet sheet) {
        if (sheet.getColumnWidthMap() != null && !sheet.getColumnWidthMap().isEmpty()) {
            final Map<Integer, Integer> columnWidthMap = sheet.getColumnWidthMap();
            if (sheet.getCustomWriteHandlerList() == null) {
                sheet.setCustomWriteHandlerList(new ArrayList<WriteHandler>());
            }
            sheet.getCustomWriteHandlerList().add(new AbstractHeadColumnWidthStyleStrategy() {
                @Override
Z
zhuangjiaju 已提交
108
                protected Integer columnWidth(Head head) {
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
                    if (columnWidthMap.containsKey(head.getColumnIndex())) {
                        columnWidthMap.get(head.getColumnIndex());
                    }
                    return 20;
                }
            });
        }
        if (sheet.getTableStyle() != null) {
            final TableStyle tableStyle = sheet.getTableStyle();
            if (sheet.getCustomWriteHandlerList() == null) {
                sheet.setCustomWriteHandlerList(new ArrayList<WriteHandler>());
            }
            CellStyle headCellStyle = new CellStyle();
            headCellStyle.setFont(tableStyle.getTableHeadFont());
            headCellStyle.setIndexedColors(tableStyle.getTableContentBackGroundColor());
            CellStyle contentCellStyle = new CellStyle();
            contentCellStyle.setFont(tableStyle.getTableContentFont());
            contentCellStyle.setIndexedColors(tableStyle.getTableContentBackGroundColor());
            sheet.getCustomWriteHandlerList().add(new RowCellStyleStrategy(headCellStyle, contentCellStyle));
        }
    }
Z
zhuangjiaju 已提交
130 131 132 133 134 135 136 137 138

    public Sheet getSheet() {
        return sheet;
    }

    public void setSheet(Sheet sheet) {
        this.sheet = sheet;
    }

Z
zhuangjiaju 已提交
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
    public Integer getSheetNo() {
        return sheetNo;
    }

    public void setSheetNo(Integer sheetNo) {
        this.sheetNo = sheetNo;
    }

    public String getSheetName() {
        return sheetName;
    }

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public WorkbookHolder getParentWorkBook() {
        return parentWorkBook;
    }

    public void setParentWorkBook(WorkbookHolder parentWorkBook) {
        this.parentWorkBook = parentWorkBook;
    }

Z
zhuangjiaju 已提交
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    public Map<Integer, TableHolder> getHasBeenInitializedTable() {
        return hasBeenInitializedTable;
    }

    public void setHasBeenInitializedTable(Map<Integer, TableHolder> hasBeenInitializedTable) {
        this.hasBeenInitializedTable = hasBeenInitializedTable;
    }

    public com.alibaba.excel.metadata.Sheet getSheetParam() {
        return sheetParam;
    }

    public void setSheetParam(com.alibaba.excel.metadata.Sheet sheetParam) {
        this.sheetParam = sheetParam;
    }
}