mirror of https://github.com/alibaba/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.2 KiB
146 lines
4.2 KiB
package com.alibaba.excel.context; |
|
|
|
import java.io.InputStream; |
|
|
|
import org.slf4j.Logger; |
|
import org.slf4j.LoggerFactory; |
|
|
|
import com.alibaba.excel.exception.ExcelAnalysisException; |
|
import com.alibaba.excel.metadata.Sheet; |
|
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; |
|
import com.alibaba.excel.read.processor.AnalysisEventProcessor; |
|
import com.alibaba.excel.read.processor.DefalutAnalysisEventProcessor; |
|
import com.alibaba.excel.support.ExcelTypeEnum; |
|
|
|
/** |
|
* |
|
* @author jipengfei |
|
*/ |
|
public class AnalysisContextImpl implements AnalysisContext { |
|
private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisContextImpl.class); |
|
/** |
|
* The Workbook currently written |
|
*/ |
|
private ReadWorkbookHolder readWorkbookHolder; |
|
/** |
|
* Current sheet holder |
|
*/ |
|
private ReadSheetHolder readSheetHolder; |
|
/** |
|
* Current row holder |
|
*/ |
|
private ReadRowHolder readRowHolder; |
|
/** |
|
* Configuration of currently operated cell |
|
*/ |
|
private ReadHolder currentReadHolder; |
|
/** |
|
* Event processor |
|
*/ |
|
private AnalysisEventProcessor analysisEventProcessor; |
|
|
|
public AnalysisContextImpl(ReadWorkbook readWorkbook) { |
|
if (readWorkbook == null) { |
|
throw new IllegalArgumentException("Workbook argument cannot be null"); |
|
} |
|
readWorkbookHolder = new ReadWorkbookHolder(readWorkbook); |
|
currentReadHolder = readWorkbookHolder; |
|
analysisEventProcessor = new DefalutAnalysisEventProcessor(); |
|
if (LOGGER.isDebugEnabled()) { |
|
LOGGER.debug("Initialization 'AnalysisContextImpl' complete"); |
|
} |
|
} |
|
|
|
@Override |
|
public void currentSheet(ReadSheet readSheet) { |
|
readSheetHolder = new ReadSheetHolder(readSheet, readWorkbookHolder); |
|
currentReadHolder = readSheetHolder; |
|
if (readWorkbookHolder.getHasReadSheet().contains(readSheetHolder.getSheetNo())) { |
|
throw new ExcelAnalysisException("Cannot read sheet repeatedly."); |
|
} |
|
readWorkbookHolder.getHasReadSheet().add(readSheetHolder.getSheetNo()); |
|
if (LOGGER.isDebugEnabled()) { |
|
LOGGER.debug("Began to read:{}", readSheetHolder); |
|
} |
|
} |
|
|
|
@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() { |
|
return currentReadHolder; |
|
} |
|
|
|
@Override |
|
public Object getCustom() { |
|
return readWorkbookHolder.getCustomObject(); |
|
} |
|
|
|
@Override |
|
public AnalysisEventProcessor analysisEventProcessor() { |
|
return analysisEventProcessor; |
|
} |
|
|
|
@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"); |
|
} |
|
}
|
|
|