package com.alibaba.excel; import java.io.InputStream; import java.util.List; import com.alibaba.excel.analysis.ExcelAnalyser; import com.alibaba.excel.analysis.ExcelAnalyserImpl; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.Sheet; import com.alibaba.excel.parameter.AnalysisParam; import com.alibaba.excel.support.ExcelTypeEnum; /** * Excel readers are all read in event mode. * * @author jipengfei */ public class ExcelReader { /** * Analyser */ private ExcelAnalyser analyser; /** * Create new reader * * @param in the POI filesystem that contains the Workbook stream * @param excelTypeEnum 03 or 07 * @param customContent * {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext * @param eventListener Callback method after each row is parsed. */ @Deprecated public ExcelReader(InputStream in, ExcelTypeEnum excelTypeEnum, Object customContent, AnalysisEventListener eventListener) { this(in, excelTypeEnum, customContent, eventListener, true); } /** * Create new reader * * @param in the POI filesystem that contains the Workbook stream * @param customContent * {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext * @param eventListener Callback method after each row is parsed */ public ExcelReader(InputStream in, Object customContent, AnalysisEventListener eventListener) { this(in, customContent, eventListener, null, true); } /** * Create new reader * * @param in the POI filesystem that contains the Workbook stream * @param customContent * {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext * @param eventListener Callback method after each row is parsed */ public ExcelReader(InputStream in, Object customContent, AnalysisEventListener eventListener, List converters) { this(in, customContent, eventListener, converters, true); } /** * Create new reader * * @param param old param Deprecated * @param eventListener Callback method after each row is parsed. */ @Deprecated public ExcelReader(AnalysisParam param, AnalysisEventListener eventListener) { this(param.getIn(), param.getExcelTypeEnum(), param.getCustomContent(), eventListener, true); } /** * Create new reader * * @param in the POI filesystem that contains the Workbook stream * @param excelTypeEnum 03 or 07 * @param customContent * {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext * @param eventListener Callback method after each row is parsed. * @param trim The content of the form is empty and needs to be empty. The purpose is to be * fault-tolerant, because there are often table contents with spaces that can not be * converted into custom types. For example: '1234 ' contain a space cannot be converted * to int. */ @Deprecated public ExcelReader(InputStream in, ExcelTypeEnum excelTypeEnum, Object customContent, AnalysisEventListener eventListener, boolean trim) { this(in, excelTypeEnum, customContent, eventListener, null, trim); } /** * Create new reader * * @param in * @param customContent * {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext * @param eventListener * @param trim The content of the form is empty and needs to be empty. The purpose is to be * fault-tolerant, because there are often table contents with spaces that can not be * converted into custom types. For example: '1234 ' contain a space cannot be converted * to int. */ public ExcelReader(InputStream in, Object customContent, AnalysisEventListener eventListener, List converters, boolean trim) { this(in, ExcelTypeEnum.valueOf(in), customContent, eventListener, converters, trim); } public ExcelReader(InputStream in, Object excelTypeEnum, AnalysisEventListener eventListener, boolean trim) { this(in, ExcelTypeEnum.valueOf(in), null, eventListener, null, trim); } public ExcelReader(InputStream in, ExcelTypeEnum excelTypeEnum, Object customContent, AnalysisEventListener eventListener, List converters, boolean trim) { validateParam(in, eventListener); analyser = new ExcelAnalyserImpl(in, excelTypeEnum, customContent, eventListener, trim); initConverters(analyser, converters); } private void initConverters(ExcelAnalyser analyser, List converters) { if (converters != null && converters.size() > 0) { for (Converter c : converters) { analyser.getAnalysisContext().getConverterRegistryCenter().register(c); } } } /** * Parse all sheet content by default */ public void read() { read(null, null);; } /** * Parse the specified sheet,SheetNo start from 1 * * @param sheet Read sheet */ public void read(Sheet sheet) { read(sheet, null); } /** * Parse the specified sheet * * @param sheet Read sheet * @param clazz object parsed into each row of value */ public void read(Sheet sheet, Class clazz) { analyser.beforeAnalysis(); if (sheet != null) { sheet.setClazz(clazz); analyser.analysis(sheet); } else { analyser.analysis(); } } /** * Parse the workBook get all sheets * * @return workBook all sheets */ public List getSheets() { return analyser.getSheets(); } public AnalysisContext getAnalysisContext() { return analyser.getAnalysisContext(); } /** * validate param * * @param in * @param eventListener */ private void validateParam(InputStream in, AnalysisEventListener eventListener) { if (eventListener == null) { throw new IllegalArgumentException("AnalysisEventListener can not null"); } else if (in == null) { throw new IllegalArgumentException("InputStream can not null"); } } }