TableHolder.java 5.0 KB
Newer Older
Z
zhuangjiaju 已提交
1
package com.alibaba.excel.read.metadata.holder;
Z
zhuangjiaju 已提交
2

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

Z
zhuangjiaju 已提交
8 9 10
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

/**
 * sheet holder
 *
 * @author zhuangjiaju
 */
Z
zhuangjiaju 已提交
25
public class ReadTableHolder extends AbstractReadHolder {
Z
zhuangjiaju 已提交
26 27
    private static final Logger LOGGER = LoggerFactory.getLogger(TableHolder.class);

Z
zhuangjiaju 已提交
28 29 30 31
    /***
     * poi sheet
     */
    private SheetHolder parentSheet;
Z
zhuangjiaju 已提交
32 33 34 35
    /***
     * tableNo
     */
    private Integer tableNo;
Z
zhuangjiaju 已提交
36 37 38
    /**
     * current table param
     */
Z
zhuangjiaju 已提交
39
    private Table tableParam;
40

Z
zhuangjiaju 已提交
41 42
    public static TableHolder buildWriteWorkTableHolder(Table table, SheetHolder sheetHolder,
                                                        WorkbookHolder workbookHolder) {
Z
zhuangjiaju 已提交
43 44 45 46
        TableHolder tableHolder = new TableHolder();
        tableHolder.setTableParam(table);
        tableHolder.setParentSheet(sheetHolder);
        tableHolder.setTableNo(table.getTableNo());
47 48 49
        boolean noHead = (table.getHead() == null || table.getHead().isEmpty()) && table.getClazz() == null;
        if (noHead) {
            // Use parent
Z
zhuangjiaju 已提交
50 51
            tableHolder.setHead(sheetHolder.getHead());
            tableHolder.setClazz(sheetHolder.getClazz());
52
        } else {
Z
zhuangjiaju 已提交
53 54
            tableHolder.setHead(table.getHead());
            tableHolder.setClazz(table.getClazz());
55
        }
Z
zhuangjiaju 已提交
56
        tableHolder.setNewInitialization(Boolean.TRUE);
Z
zhuangjiaju 已提交
57
        // Initialization property
Z
zhuangjiaju 已提交
58 59
        tableHolder.setExcelHeadProperty(
            new ExcelHeadProperty(tableHolder.getClazz(), tableHolder.getHead(), workbookHolder.getConvertAllFiled()));
Z
zhuangjiaju 已提交
60

61
        if (table.getNeedHead() == null) {
Z
zhuangjiaju 已提交
62
            tableHolder.setNeedHead(sheetHolder.needHead());
63
        } else {
Z
zhuangjiaju 已提交
64
            tableHolder.setNeedHead(table.getNeedHead());
65 66
        }
        if (table.getWriteRelativeHeadRowIndex() == null) {
Z
zhuangjiaju 已提交
67
            tableHolder.setWriteRelativeHeadRowIndex(sheetHolder.writeRelativeHeadRowIndex());
68
        } else {
Z
zhuangjiaju 已提交
69
            tableHolder.setWriteRelativeHeadRowIndex(table.getWriteRelativeHeadRowIndex());
70 71 72 73 74 75 76
        }
        // Compatible with old code
        compatibleOldCode(table);
        List<WriteHandler> handlerList = new ArrayList<WriteHandler>();
        if (table.getCustomWriteHandlerList() != null && !table.getCustomWriteHandlerList().isEmpty()) {
            handlerList.addAll(table.getCustomWriteHandlerList());
        }
Z
zhuangjiaju 已提交
77
        // Initialization Annotation
Z
zhuangjiaju 已提交
78
        tableHolder.initAnnotationConfig(handlerList);
Z
zhuangjiaju 已提交
79

Z
zhuangjiaju 已提交
80 81 82 83 84 85 86
        tableHolder
            .setWriteHandlerMap(tableHolder.sortAndClearUpHandler(handlerList, sheetHolder.getWriteHandlerMap()));
        Map<Class, Converter> converterMap = new HashMap<Class, Converter>(sheetHolder.getWriteConverterMap());
        if (table.getCustomConverterList() != null && !table.getCustomConverterList().isEmpty()) {
            for (Converter converter : table.getCustomConverterList()) {
                converterMap.put(converter.getClass(), converter);
            }
87
        }
Z
zhuangjiaju 已提交
88
        tableHolder.setWriteConverterMap(converterMap);
Z
zhuangjiaju 已提交
89
        if (LOGGER.isDebugEnabled()) {
Z
zhuangjiaju 已提交
90
            LOGGER.debug("Table writeHandlerMap:{}", tableHolder.getWriteHandlerMap());
Z
zhuangjiaju 已提交
91
        }
Z
zhuangjiaju 已提交
92
        return tableHolder;
93 94
    }

Z
zhuangjiaju 已提交
95
    /**
96
     * Compatible with old code
Z
zhuangjiaju 已提交
97
     */
98
    @Deprecated
Z
zhuangjiaju 已提交
99
    private static void compatibleOldCode(Table table) {
100 101 102 103 104 105 106 107 108 109 110 111 112 113
        if (table.getTableStyle() != null) {
            final TableStyle tableStyle = table.getTableStyle();
            if (table.getCustomWriteHandlerList() == null) {
                table.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());
            table.getCustomWriteHandlerList().add(new RowCellStyleStrategy(headCellStyle, contentCellStyle));
        }
    }
Z
zhuangjiaju 已提交
114 115 116 117 118 119 120 121 122

    public SheetHolder getParentSheet() {
        return parentSheet;
    }

    public void setParentSheet(SheetHolder parentSheet) {
        this.parentSheet = parentSheet;
    }

Z
zhuangjiaju 已提交
123 124 125 126 127 128 129 130 131 132
    public Integer getTableNo() {
        return tableNo;
    }

    public void setTableNo(Integer tableNo) {
        this.tableNo = tableNo;
    }

    public Table getTableParam() {
        return tableParam;
Z
zhuangjiaju 已提交
133 134
    }

Z
zhuangjiaju 已提交
135 136
    public void setTableParam(Table tableParam) {
        this.tableParam = tableParam;
Z
zhuangjiaju 已提交
137 138
    }
}