AnalysisContextImpl.java 5.3 KB
Newer Older
1
package com.alibaba.excel.context;
J
update  
jipengfei.jpf 已提交
2

3
import java.io.InputStream;
庄家钜's avatar
庄家钜 已提交
4
import java.util.List;
5

Z
zhuangjiaju 已提交
6 7
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
clevertension's avatar
clevertension 已提交
8

9
import com.alibaba.excel.exception.ExcelAnalysisException;
10
import com.alibaba.excel.metadata.Sheet;
11 12 13 14 15 16
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.ReadWorkbook;
import com.alibaba.excel.read.metadata.holder.ReadHolder;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.read.metadata.holder.ReadSheetHolder;
import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder;
庄家钜's avatar
庄家钜 已提交
17 18 19 20
import com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder;
庄家钜's avatar
庄家钜 已提交
21
import com.alibaba.excel.read.processor.AnalysisEventProcessor;
庄家钜's avatar
庄家钜 已提交
22
import com.alibaba.excel.read.processor.DefaultAnalysisEventProcessor;
23
import com.alibaba.excel.support.ExcelTypeEnum;
J
update  
jipengfei.jpf 已提交
24 25 26 27 28 29

/**
 *
 * @author jipengfei
 */
public class AnalysisContextImpl implements AnalysisContext {
Z
zhuangjiaju 已提交
30 31 32 33
    private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisContextImpl.class);
    /**
     * The Workbook currently written
     */
34
    private ReadWorkbookHolder readWorkbookHolder;
Z
zhuangjiaju 已提交
35 36 37
    /**
     * Current sheet holder
     */
38 39 40 41 42 43 44 45 46
    private ReadSheetHolder readSheetHolder;
    /**
     * Current row holder
     */
    private ReadRowHolder readRowHolder;
    /**
     * Configuration of currently operated cell
     */
    private ReadHolder currentReadHolder;
庄家钜's avatar
庄家钜 已提交
47 48 49 50
    /**
     * Event processor
     */
    private AnalysisEventProcessor analysisEventProcessor;
Z
zhuangjiaju 已提交
51

庄家钜's avatar
庄家钜 已提交
52
    public AnalysisContextImpl(ReadWorkbook readWorkbook, ExcelTypeEnum actualExcelType) {
53
        if (readWorkbook == null) {
Z
zhuangjiaju 已提交
54 55
            throw new IllegalArgumentException("Workbook argument cannot be null");
        }
庄家钜's avatar
庄家钜 已提交
56 57 58 59 60 61 62 63 64 65
        switch (actualExcelType) {
            case XLS:
                readWorkbookHolder = new XlsReadWorkbookHolder(readWorkbook);
                break;
            case XLSX:
                readWorkbookHolder = new XlsxReadWorkbookHolder(readWorkbook);
                break;
            default:
                break;
        }
66
        currentReadHolder = readWorkbookHolder;
庄家钜's avatar
庄家钜 已提交
67
        analysisEventProcessor = new DefaultAnalysisEventProcessor();
Z
zhuangjiaju 已提交
68 69
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Initialization 'AnalysisContextImpl' complete");
J
update  
jipengfei.jpf 已提交
70 71
        }
    }
clevertension's avatar
clevertension 已提交
72 73

    @Override
庄家钜's avatar
庄家钜 已提交
74
    public void currentSheet(ReadSheet readSheet) {
庄家钜's avatar
庄家钜 已提交
75 76 77 78 79 80 81 82 83 84
        switch (readWorkbookHolder.getExcelType()) {
            case XLS:
                readSheetHolder = new XlsReadSheetHolder(readSheet, readWorkbookHolder);
                break;
            case XLSX:
                readSheetHolder = new XlsxReadSheetHolder(readSheet, readWorkbookHolder);
                break;
            default:
                break;
        }
85
        currentReadHolder = readSheetHolder;
Z
zhuangjiaju 已提交
86 87 88 89
        if (readWorkbookHolder.getHasReadSheet().contains(readSheetHolder.getSheetNo())) {
            throw new ExcelAnalysisException("Cannot read sheet repeatedly.");
        }
        readWorkbookHolder.getHasReadSheet().add(readSheetHolder.getSheetNo());
Z
zhuangjiaju 已提交
90
        if (LOGGER.isDebugEnabled()) {
Z
zhuangjiaju 已提交
91
            LOGGER.debug("Began to read:{}", readSheetHolder);
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
        }
    }

    @Override
    public ReadWorkbookHolder readWorkbookHolder() {
        return readWorkbookHolder;
    }

    @Override
    public ReadSheetHolder readSheetHolder() {
        return readSheetHolder;
    }

    @Override
    public ReadRowHolder readRowHolder() {
        return readRowHolder;
    }

    @Override
    public void readRowHolder(ReadRowHolder readRowHolder) {
        this.readRowHolder = readRowHolder;
    }

    @Override
    public ReadHolder currentReadHolder() {
Z
zhuangjiaju 已提交
117
        return currentReadHolder;
118 119 120 121 122
    }

    @Override
    public Object getCustom() {
        return readWorkbookHolder.getCustomObject();
clevertension's avatar
clevertension 已提交
123
    }
124

庄家钜's avatar
庄家钜 已提交
125 126 127 128 129
    @Override
    public AnalysisEventProcessor analysisEventProcessor() {
        return analysisEventProcessor;
    }

庄家钜's avatar
庄家钜 已提交
130 131 132 133 134 135 136 137 138 139
    @Override
    public List<ReadSheet> readSheetList() {
        return null;
    }

    @Override
    public void readSheetList(List<ReadSheet> readSheetList) {

    }

140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    @Override
    public Sheet getCurrentSheet() {
        Sheet sheet = new Sheet(readSheetHolder.getSheetNo() + 1);
        sheet.setSheetName(readSheetHolder.getSheetName());
        sheet.setHead(readSheetHolder.getHead());
        sheet.setClazz(readSheetHolder.getClazz());
        sheet.setHeadLineMun(readSheetHolder.getHeadRowNumber());
        return sheet;
    }

    @Override
    public ExcelTypeEnum getExcelType() {
        return readWorkbookHolder.getExcelType();
    }

    @Override
    public InputStream getInputStream() {
        return readWorkbookHolder.getInputStream();
    }

    @Override
    public Integer getCurrentRowNum() {
        return readRowHolder.getRowIndex();
    }

    @Override
    public Integer getTotalCount() {
        return readSheetHolder.getTotal();
    }

    @Override
    public Object getCurrentRowAnalysisResult() {
        return readRowHolder.getCurrentRowAnalysisResult();
    }

    @Override
    public void interrupt() {
        throw new ExcelAnalysisException("interrupt error");
    }
J
update  
jipengfei.jpf 已提交
179
}