Full Code of alibaba/easyexcel for AI

master aae9c61ab603 cached
622 files
75.3 MB
389.9k tokens
2798 symbols
1 requests
Download .txt
Showing preview only (1,740K chars total). Download the full file or copy to clipboard to get everything.
Repository: alibaba/easyexcel
Branch: master
Commit: aae9c61ab603
Files: 622
Total size: 75.3 MB

Directory structure:
gitextract_lvmyxm4w/

├── .editorconfig
├── .gitee/
│   └── ISSUE_TEMPLATE.zh-CN.md
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.md
│   │   ├── question.md
│   │   └── suggest.md
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pull_request_template.md
│   └── workflows/
│       ├── ci.yml
│       ├── release.yml
│       └── sync2gitee.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── README_EN.md
├── docs/
│   ├── API.md
│   └── LARGEREAD.md
├── easyexcel/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── excel/
│                           └── Empty.java
├── easyexcel-core/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── excel/
│                           ├── EasyExcel.java
│                           ├── EasyExcelFactory.java
│                           ├── ExcelReader.java
│                           ├── ExcelWriter.java
│                           ├── analysis/
│                           │   ├── ExcelAnalyser.java
│                           │   ├── ExcelAnalyserImpl.java
│                           │   ├── ExcelReadExecutor.java
│                           │   ├── csv/
│                           │   │   └── CsvExcelReadExecutor.java
│                           │   ├── v03/
│                           │   │   ├── IgnorableXlsRecordHandler.java
│                           │   │   ├── XlsListSheetListener.java
│                           │   │   ├── XlsRecordHandler.java
│                           │   │   ├── XlsSaxAnalyser.java
│                           │   │   └── handlers/
│                           │   │       ├── AbstractXlsRecordHandler.java
│                           │   │       ├── BlankRecordHandler.java
│                           │   │       ├── BofRecordHandler.java
│                           │   │       ├── BoolErrRecordHandler.java
│                           │   │       ├── BoundSheetRecordHandler.java
│                           │   │       ├── DummyRecordHandler.java
│                           │   │       ├── EofRecordHandler.java
│                           │   │       ├── FormulaRecordHandler.java
│                           │   │       ├── HyperlinkRecordHandler.java
│                           │   │       ├── IndexRecordHandler.java
│                           │   │       ├── LabelRecordHandler.java
│                           │   │       ├── LabelSstRecordHandler.java
│                           │   │       ├── MergeCellsRecordHandler.java
│                           │   │       ├── NoteRecordHandler.java
│                           │   │       ├── NumberRecordHandler.java
│                           │   │       ├── ObjRecordHandler.java
│                           │   │       ├── RkRecordHandler.java
│                           │   │       ├── SstRecordHandler.java
│                           │   │       ├── StringRecordHandler.java
│                           │   │       └── TextObjectRecordHandler.java
│                           │   └── v07/
│                           │       ├── XlsxSaxAnalyser.java
│                           │       └── handlers/
│                           │           ├── AbstractCellValueTagHandler.java
│                           │           ├── AbstractXlsxTagHandler.java
│                           │           ├── CellFormulaTagHandler.java
│                           │           ├── CellInlineStringValueTagHandler.java
│                           │           ├── CellTagHandler.java
│                           │           ├── CellValueTagHandler.java
│                           │           ├── CountTagHandler.java
│                           │           ├── HyperlinkTagHandler.java
│                           │           ├── MergeCellTagHandler.java
│                           │           ├── RowTagHandler.java
│                           │           ├── XlsxTagHandler.java
│                           │           └── sax/
│                           │               ├── SharedStringsTableHandler.java
│                           │               └── XlsxRowHandler.java
│                           ├── annotation/
│                           │   ├── ExcelIgnore.java
│                           │   ├── ExcelIgnoreUnannotated.java
│                           │   ├── ExcelProperty.java
│                           │   ├── format/
│                           │   │   ├── DateTimeFormat.java
│                           │   │   └── NumberFormat.java
│                           │   └── write/
│                           │       └── style/
│                           │           ├── ColumnWidth.java
│                           │           ├── ContentFontStyle.java
│                           │           ├── ContentLoopMerge.java
│                           │           ├── ContentRowHeight.java
│                           │           ├── ContentStyle.java
│                           │           ├── HeadFontStyle.java
│                           │           ├── HeadRowHeight.java
│                           │           ├── HeadStyle.java
│                           │           └── OnceAbsoluteMerge.java
│                           ├── cache/
│                           │   ├── Ehcache.java
│                           │   ├── MapCache.java
│                           │   ├── ReadCache.java
│                           │   ├── XlsCache.java
│                           │   └── selector/
│                           │       ├── EternalReadCacheSelector.java
│                           │       ├── ReadCacheSelector.java
│                           │       └── SimpleReadCacheSelector.java
│                           ├── constant/
│                           │   ├── BuiltinFormats.java
│                           │   ├── EasyExcelConstants.java
│                           │   ├── ExcelXmlConstants.java
│                           │   └── OrderConstant.java
│                           ├── context/
│                           │   ├── AnalysisContext.java
│                           │   ├── AnalysisContextImpl.java
│                           │   ├── WriteContext.java
│                           │   ├── WriteContextImpl.java
│                           │   ├── csv/
│                           │   │   ├── CsvReadContext.java
│                           │   │   └── DefaultCsvReadContext.java
│                           │   ├── xls/
│                           │   │   ├── DefaultXlsReadContext.java
│                           │   │   └── XlsReadContext.java
│                           │   └── xlsx/
│                           │       ├── DefaultXlsxReadContext.java
│                           │       └── XlsxReadContext.java
│                           ├── converters/
│                           │   ├── AutoConverter.java
│                           │   ├── Converter.java
│                           │   ├── ConverterKeyBuild.java
│                           │   ├── DefaultConverterLoader.java
│                           │   ├── NullableObjectConverter.java
│                           │   ├── ReadConverterContext.java
│                           │   ├── WriteConverterContext.java
│                           │   ├── bigdecimal/
│                           │   │   ├── BigDecimalBooleanConverter.java
│                           │   │   ├── BigDecimalNumberConverter.java
│                           │   │   └── BigDecimalStringConverter.java
│                           │   ├── biginteger/
│                           │   │   ├── BigIntegerBooleanConverter.java
│                           │   │   ├── BigIntegerNumberConverter.java
│                           │   │   └── BigIntegerStringConverter.java
│                           │   ├── booleanconverter/
│                           │   │   ├── BooleanBooleanConverter.java
│                           │   │   ├── BooleanNumberConverter.java
│                           │   │   └── BooleanStringConverter.java
│                           │   ├── bytearray/
│                           │   │   ├── BoxingByteArrayImageConverter.java
│                           │   │   └── ByteArrayImageConverter.java
│                           │   ├── byteconverter/
│                           │   │   ├── ByteBooleanConverter.java
│                           │   │   ├── ByteNumberConverter.java
│                           │   │   └── ByteStringConverter.java
│                           │   ├── date/
│                           │   │   ├── DateDateConverter.java
│                           │   │   ├── DateNumberConverter.java
│                           │   │   └── DateStringConverter.java
│                           │   ├── doubleconverter/
│                           │   │   ├── DoubleBooleanConverter.java
│                           │   │   ├── DoubleNumberConverter.java
│                           │   │   └── DoubleStringConverter.java
│                           │   ├── file/
│                           │   │   └── FileImageConverter.java
│                           │   ├── floatconverter/
│                           │   │   ├── FloatBooleanConverter.java
│                           │   │   ├── FloatNumberConverter.java
│                           │   │   └── FloatStringConverter.java
│                           │   ├── inputstream/
│                           │   │   └── InputStreamImageConverter.java
│                           │   ├── integer/
│                           │   │   ├── IntegerBooleanConverter.java
│                           │   │   ├── IntegerNumberConverter.java
│                           │   │   └── IntegerStringConverter.java
│                           │   ├── localdate/
│                           │   │   ├── LocalDateDateConverter.java
│                           │   │   ├── LocalDateNumberConverter.java
│                           │   │   └── LocalDateStringConverter.java
│                           │   ├── localdatetime/
│                           │   │   ├── LocalDateTimeDateConverter.java
│                           │   │   ├── LocalDateTimeNumberConverter.java
│                           │   │   └── LocalDateTimeStringConverter.java
│                           │   ├── longconverter/
│                           │   │   ├── LongBooleanConverter.java
│                           │   │   ├── LongNumberConverter.java
│                           │   │   └── LongStringConverter.java
│                           │   ├── shortconverter/
│                           │   │   ├── ShortBooleanConverter.java
│                           │   │   ├── ShortNumberConverter.java
│                           │   │   └── ShortStringConverter.java
│                           │   ├── string/
│                           │   │   ├── StringBooleanConverter.java
│                           │   │   ├── StringErrorConverter.java
│                           │   │   ├── StringImageConverter.java
│                           │   │   ├── StringNumberConverter.java
│                           │   │   └── StringStringConverter.java
│                           │   └── url/
│                           │       └── UrlImageConverter.java
│                           ├── enums/
│                           │   ├── BooleanEnum.java
│                           │   ├── ByteOrderMarkEnum.java
│                           │   ├── CacheLocationEnum.java
│                           │   ├── CellDataTypeEnum.java
│                           │   ├── CellExtraTypeEnum.java
│                           │   ├── HeadKindEnum.java
│                           │   ├── HolderEnum.java
│                           │   ├── NumericCellTypeEnum.java
│                           │   ├── ReadDefaultReturnEnum.java
│                           │   ├── RowTypeEnum.java
│                           │   ├── WriteDirectionEnum.java
│                           │   ├── WriteLastRowTypeEnum.java
│                           │   ├── WriteTemplateAnalysisCellTypeEnum.java
│                           │   ├── WriteTypeEnum.java
│                           │   └── poi/
│                           │       ├── BorderStyleEnum.java
│                           │       ├── FillPatternTypeEnum.java
│                           │       ├── HorizontalAlignmentEnum.java
│                           │       └── VerticalAlignmentEnum.java
│                           ├── event/
│                           │   ├── AbstractIgnoreExceptionReadListener.java
│                           │   ├── AnalysisEventListener.java
│                           │   ├── Handler.java
│                           │   ├── Listener.java
│                           │   ├── NotRepeatExecutor.java
│                           │   ├── Order.java
│                           │   └── SyncReadListener.java
│                           ├── exception/
│                           │   ├── ExcelAnalysisException.java
│                           │   ├── ExcelAnalysisStopException.java
│                           │   ├── ExcelAnalysisStopSheetException.java
│                           │   ├── ExcelCommonException.java
│                           │   ├── ExcelDataConvertException.java
│                           │   ├── ExcelGenerateException.java
│                           │   ├── ExcelRuntimeException.java
│                           │   └── ExcelWriteDataConvertException.java
│                           ├── metadata/
│                           │   ├── AbstractCell.java
│                           │   ├── AbstractHolder.java
│                           │   ├── AbstractParameterBuilder.java
│                           │   ├── BasicParameter.java
│                           │   ├── Cell.java
│                           │   ├── CellExtra.java
│                           │   ├── CellRange.java
│                           │   ├── ConfigurationHolder.java
│                           │   ├── FieldCache.java
│                           │   ├── FieldWrapper.java
│                           │   ├── Font.java
│                           │   ├── GlobalConfiguration.java
│                           │   ├── Head.java
│                           │   ├── Holder.java
│                           │   ├── NullObject.java
│                           │   ├── csv/
│                           │   │   ├── CsvCell.java
│                           │   │   ├── CsvCellStyle.java
│                           │   │   ├── CsvDataFormat.java
│                           │   │   ├── CsvRichTextString.java
│                           │   │   ├── CsvRow.java
│                           │   │   ├── CsvSheet.java
│                           │   │   └── CsvWorkbook.java
│                           │   ├── data/
│                           │   │   ├── CellData.java
│                           │   │   ├── ClientAnchorData.java
│                           │   │   ├── CommentData.java
│                           │   │   ├── CoordinateData.java
│                           │   │   ├── DataFormatData.java
│                           │   │   ├── FormulaData.java
│                           │   │   ├── HyperlinkData.java
│                           │   │   ├── ImageData.java
│                           │   │   ├── ReadCellData.java
│                           │   │   ├── RichTextStringData.java
│                           │   │   └── WriteCellData.java
│                           │   ├── format/
│                           │   │   ├── DataFormatter.java
│                           │   │   └── ExcelGeneralNumberFormat.java
│                           │   └── property/
│                           │       ├── ColumnWidthProperty.java
│                           │       ├── DateTimeFormatProperty.java
│                           │       ├── ExcelContentProperty.java
│                           │       ├── ExcelHeadProperty.java
│                           │       ├── FontProperty.java
│                           │       ├── LoopMergeProperty.java
│                           │       ├── NumberFormatProperty.java
│                           │       ├── OnceAbsoluteMergeProperty.java
│                           │       ├── RowHeightProperty.java
│                           │       └── StyleProperty.java
│                           ├── read/
│                           │   ├── builder/
│                           │   │   ├── AbstractExcelReaderParameterBuilder.java
│                           │   │   ├── ExcelReaderBuilder.java
│                           │   │   └── ExcelReaderSheetBuilder.java
│                           │   ├── listener/
│                           │   │   ├── IgnoreExceptionReadListener.java
│                           │   │   ├── ModelBuildEventListener.java
│                           │   │   ├── PageReadListener.java
│                           │   │   └── ReadListener.java
│                           │   ├── metadata/
│                           │   │   ├── ReadBasicParameter.java
│                           │   │   ├── ReadSheet.java
│                           │   │   ├── ReadWorkbook.java
│                           │   │   ├── holder/
│                           │   │   │   ├── AbstractReadHolder.java
│                           │   │   │   ├── ReadHolder.java
│                           │   │   │   ├── ReadRowHolder.java
│                           │   │   │   ├── ReadSheetHolder.java
│                           │   │   │   ├── ReadWorkbookHolder.java
│                           │   │   │   ├── csv/
│                           │   │   │   │   ├── CsvReadSheetHolder.java
│                           │   │   │   │   └── CsvReadWorkbookHolder.java
│                           │   │   │   ├── xls/
│                           │   │   │   │   ├── XlsReadSheetHolder.java
│                           │   │   │   │   └── XlsReadWorkbookHolder.java
│                           │   │   │   └── xlsx/
│                           │   │   │       ├── XlsxReadSheetHolder.java
│                           │   │   │       └── XlsxReadWorkbookHolder.java
│                           │   │   └── property/
│                           │   │       └── ExcelReadHeadProperty.java
│                           │   └── processor/
│                           │       ├── AnalysisEventProcessor.java
│                           │       └── DefaultAnalysisEventProcessor.java
│                           ├── support/
│                           │   └── ExcelTypeEnum.java
│                           ├── util/
│                           │   ├── BeanMapUtils.java
│                           │   ├── BooleanUtils.java
│                           │   ├── ClassUtils.java
│                           │   ├── ConverterUtils.java
│                           │   ├── DateUtils.java
│                           │   ├── EasyExcelTempFileCreationStrategy.java
│                           │   ├── FieldUtils.java
│                           │   ├── FileTypeUtils.java
│                           │   ├── FileUtils.java
│                           │   ├── IntUtils.java
│                           │   ├── IoUtils.java
│                           │   ├── ListUtils.java
│                           │   ├── MapUtils.java
│                           │   ├── MemberUtils.java
│                           │   ├── NumberDataFormatterUtils.java
│                           │   ├── NumberUtils.java
│                           │   ├── PoiUtils.java
│                           │   ├── PositionUtils.java
│                           │   ├── SheetUtils.java
│                           │   ├── StringUtils.java
│                           │   ├── StyleUtil.java
│                           │   ├── Validate.java
│                           │   ├── WorkBookUtil.java
│                           │   └── WriteHandlerUtils.java
│                           └── write/
│                               ├── ExcelBuilder.java
│                               ├── ExcelBuilderImpl.java
│                               ├── builder/
│                               │   ├── AbstractExcelWriterParameterBuilder.java
│                               │   ├── ExcelWriterBuilder.java
│                               │   ├── ExcelWriterSheetBuilder.java
│                               │   └── ExcelWriterTableBuilder.java
│                               ├── executor/
│                               │   ├── AbstractExcelWriteExecutor.java
│                               │   ├── ExcelWriteAddExecutor.java
│                               │   ├── ExcelWriteExecutor.java
│                               │   └── ExcelWriteFillExecutor.java
│                               ├── handler/
│                               │   ├── AbstractCellWriteHandler.java
│                               │   ├── AbstractRowWriteHandler.java
│                               │   ├── AbstractSheetWriteHandler.java
│                               │   ├── AbstractWorkbookWriteHandler.java
│                               │   ├── CellWriteHandler.java
│                               │   ├── DefaultWriteHandlerLoader.java
│                               │   ├── RowWriteHandler.java
│                               │   ├── SheetWriteHandler.java
│                               │   ├── WorkbookWriteHandler.java
│                               │   ├── WriteHandler.java
│                               │   ├── chain/
│                               │   │   ├── CellHandlerExecutionChain.java
│                               │   │   ├── RowHandlerExecutionChain.java
│                               │   │   ├── SheetHandlerExecutionChain.java
│                               │   │   └── WorkbookHandlerExecutionChain.java
│                               │   ├── context/
│                               │   │   ├── CellWriteHandlerContext.java
│                               │   │   ├── RowWriteHandlerContext.java
│                               │   │   ├── SheetWriteHandlerContext.java
│                               │   │   └── WorkbookWriteHandlerContext.java
│                               │   └── impl/
│                               │       ├── DefaultRowWriteHandler.java
│                               │       ├── DimensionWorkbookWriteHandler.java
│                               │       └── FillStyleCellWriteHandler.java
│                               ├── merge/
│                               │   ├── AbstractMergeStrategy.java
│                               │   ├── LoopMergeStrategy.java
│                               │   └── OnceAbsoluteMergeStrategy.java
│                               ├── metadata/
│                               │   ├── CollectionRowData.java
│                               │   ├── MapRowData.java
│                               │   ├── RowData.java
│                               │   ├── WriteBasicParameter.java
│                               │   ├── WriteSheet.java
│                               │   ├── WriteTable.java
│                               │   ├── WriteWorkbook.java
│                               │   ├── fill/
│                               │   │   ├── AnalysisCell.java
│                               │   │   ├── FillConfig.java
│                               │   │   └── FillWrapper.java
│                               │   ├── holder/
│                               │   │   ├── AbstractWriteHolder.java
│                               │   │   ├── WriteHolder.java
│                               │   │   ├── WriteSheetHolder.java
│                               │   │   ├── WriteTableHolder.java
│                               │   │   └── WriteWorkbookHolder.java
│                               │   └── style/
│                               │       ├── WriteCellStyle.java
│                               │       └── WriteFont.java
│                               ├── property/
│                               │   └── ExcelWriteHeadProperty.java
│                               └── style/
│                                   ├── AbstractCellStyleStrategy.java
│                                   ├── AbstractVerticalCellStyleStrategy.java
│                                   ├── DefaultStyle.java
│                                   ├── HorizontalCellStyleStrategy.java
│                                   ├── column/
│                                   │   ├── AbstractColumnWidthStyleStrategy.java
│                                   │   ├── AbstractHeadColumnWidthStyleStrategy.java
│                                   │   ├── LongestMatchColumnWidthStyleStrategy.java
│                                   │   └── SimpleColumnWidthStyleStrategy.java
│                                   └── row/
│                                       ├── AbstractRowHeightStyleStrategy.java
│                                       └── SimpleRowHeightStyleStrategy.java
├── easyexcel-support/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── excel/
│                           └── support/
│                               └── Empty.java
├── easyexcel-test/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── easyexcel/
│           │               └── test/
│           │                   ├── core/
│           │                   │   ├── StyleTestUtils.java
│           │                   │   ├── annotation/
│           │                   │   │   ├── AnnotationData.java
│           │                   │   │   ├── AnnotationDataListener.java
│           │                   │   │   ├── AnnotationDataTest.java
│           │                   │   │   ├── AnnotationIndexAndNameData.java
│           │                   │   │   ├── AnnotationIndexAndNameDataListener.java
│           │                   │   │   ├── AnnotationIndexAndNameDataTest.java
│           │                   │   │   └── AnnotationStyleData.java
│           │                   │   ├── bom/
│           │                   │   │   ├── BomData.java
│           │                   │   │   └── BomDataTest.java
│           │                   │   ├── cache/
│           │                   │   │   ├── CacheData.java
│           │                   │   │   ├── CacheDataTest.java
│           │                   │   │   ├── CacheInvokeData.java
│           │                   │   │   └── CacheInvokeMemoryData.java
│           │                   │   ├── celldata/
│           │                   │   │   ├── CellDataDataListener.java
│           │                   │   │   ├── CellDataDataTest.java
│           │                   │   │   ├── CellDataReadData.java
│           │                   │   │   └── CellDataWriteData.java
│           │                   │   ├── charset/
│           │                   │   │   ├── CharsetData.java
│           │                   │   │   └── CharsetDataTest.java
│           │                   │   ├── compatibility/
│           │                   │   │   └── CompatibilityTest.java
│           │                   │   ├── converter/
│           │                   │   │   ├── ConverterDataListener.java
│           │                   │   │   ├── ConverterDataTest.java
│           │                   │   │   ├── ConverterReadData.java
│           │                   │   │   ├── ConverterTest.java
│           │                   │   │   ├── ConverterWriteData.java
│           │                   │   │   ├── ImageData.java
│           │                   │   │   ├── ReadAllConverterData.java
│           │                   │   │   └── ReadAllConverterDataListener.java
│           │                   │   ├── dataformat/
│           │                   │   │   ├── DateFormatData.java
│           │                   │   │   └── DateFormatTest.java
│           │                   │   ├── encrypt/
│           │                   │   │   ├── EncryptData.java
│           │                   │   │   ├── EncryptDataListener.java
│           │                   │   │   └── EncryptDataTest.java
│           │                   │   ├── exception/
│           │                   │   │   ├── ExcelAnalysisStopSheetExceptionDataListener.java
│           │                   │   │   ├── ExceptionData.java
│           │                   │   │   ├── ExceptionDataListener.java
│           │                   │   │   ├── ExceptionDataTest.java
│           │                   │   │   └── ExceptionThrowDataListener.java
│           │                   │   ├── excludeorinclude/
│           │                   │   │   ├── ExcludeOrIncludeData.java
│           │                   │   │   └── ExcludeOrIncludeDataTest.java
│           │                   │   ├── extra/
│           │                   │   │   ├── ExtraData.java
│           │                   │   │   ├── ExtraDataListener.java
│           │                   │   │   └── ExtraDataTest.java
│           │                   │   ├── fill/
│           │                   │   │   ├── FillData.java
│           │                   │   │   ├── FillDataTest.java
│           │                   │   │   ├── annotation/
│           │                   │   │   │   ├── FillAnnotationData.java
│           │                   │   │   │   └── FillAnnotationDataTest.java
│           │                   │   │   └── style/
│           │                   │   │       ├── FillStyleAnnotatedData.java
│           │                   │   │       ├── FillStyleAnnotatedTest.java
│           │                   │   │       ├── FillStyleData.java
│           │                   │   │       └── FillStyleDataTest.java
│           │                   │   ├── handler/
│           │                   │   │   ├── WriteHandler.java
│           │                   │   │   ├── WriteHandlerData.java
│           │                   │   │   └── WriteHandlerTest.java
│           │                   │   ├── head/
│           │                   │   │   ├── ComplexDataListener.java
│           │                   │   │   ├── ComplexHeadData.java
│           │                   │   │   ├── ComplexHeadDataTest.java
│           │                   │   │   ├── ListHeadDataListener.java
│           │                   │   │   ├── ListHeadDataTest.java
│           │                   │   │   ├── NoHeadData.java
│           │                   │   │   ├── NoHeadDataListener.java
│           │                   │   │   └── NoHeadDataTest.java
│           │                   │   ├── large/
│           │                   │   │   ├── LargeData.java
│           │                   │   │   ├── LargeDataListener.java
│           │                   │   │   └── LargeDataTest.java
│           │                   │   ├── multiplesheets/
│           │                   │   │   ├── MultipleSheetsData.java
│           │                   │   │   ├── MultipleSheetsDataTest.java
│           │                   │   │   └── MultipleSheetsListener.java
│           │                   │   ├── nomodel/
│           │                   │   │   └── NoModelDataTest.java
│           │                   │   ├── noncamel/
│           │                   │   │   ├── UnCamelData.java
│           │                   │   │   ├── UnCamelDataListener.java
│           │                   │   │   └── UnCamelDataTest.java
│           │                   │   ├── parameter/
│           │                   │   │   ├── ParameterData.java
│           │                   │   │   ├── ParameterDataListener.java
│           │                   │   │   └── ParameterDataTest.java
│           │                   │   ├── repetition/
│           │                   │   │   ├── RepetitionData.java
│           │                   │   │   ├── RepetitionDataListener.java
│           │                   │   │   └── RepetitionDataTest.java
│           │                   │   ├── simple/
│           │                   │   │   ├── SimpleData.java
│           │                   │   │   ├── SimpleDataListener.java
│           │                   │   │   ├── SimpleDataSheetNameListener.java
│           │                   │   │   └── SimpleDataTest.java
│           │                   │   ├── skip/
│           │                   │   │   ├── SkipData.java
│           │                   │   │   └── SkipDataTest.java
│           │                   │   ├── sort/
│           │                   │   │   ├── SortData.java
│           │                   │   │   ├── SortDataListener.java
│           │                   │   │   └── SortDataTest.java
│           │                   │   ├── style/
│           │                   │   │   ├── StyleData.java
│           │                   │   │   ├── StyleDataListener.java
│           │                   │   │   └── StyleDataTest.java
│           │                   │   └── template/
│           │                   │       ├── TemplateData.java
│           │                   │       ├── TemplateDataListener.java
│           │                   │       └── TemplateDataTest.java
│           │                   ├── demo/
│           │                   │   ├── fill/
│           │                   │   │   ├── FillData.java
│           │                   │   │   └── FillTest.java
│           │                   │   ├── rare/
│           │                   │   │   └── WriteTest.java
│           │                   │   ├── read/
│           │                   │   │   ├── CellDataDemoHeadDataListener.java
│           │                   │   │   ├── CellDataReadDemoData.java
│           │                   │   │   ├── ConverterData.java
│           │                   │   │   ├── ConverterDataListener.java
│           │                   │   │   ├── CustomStringStringConverter.java
│           │                   │   │   ├── DemoDAO.java
│           │                   │   │   ├── DemoData.java
│           │                   │   │   ├── DemoDataListener.java
│           │                   │   │   ├── DemoExceptionListener.java
│           │                   │   │   ├── DemoExtraData.java
│           │                   │   │   ├── DemoExtraListener.java
│           │                   │   │   ├── DemoHeadDataListener.java
│           │                   │   │   ├── ExceptionDemoData.java
│           │                   │   │   ├── IndexOrNameData.java
│           │                   │   │   ├── IndexOrNameDataListener.java
│           │                   │   │   ├── NoModelDataListener.java
│           │                   │   │   └── ReadTest.java
│           │                   │   ├── web/
│           │                   │   │   ├── DownloadData.java
│           │                   │   │   ├── EasyexcelApplication.java
│           │                   │   │   ├── UploadDAO.java
│           │                   │   │   ├── UploadData.java
│           │                   │   │   ├── UploadDataListener.java
│           │                   │   │   └── WebTest.java
│           │                   │   └── write/
│           │                   │       ├── CommentWriteHandler.java
│           │                   │       ├── ComplexHeadData.java
│           │                   │       ├── ConverterData.java
│           │                   │       ├── CustomCellWriteHandler.java
│           │                   │       ├── CustomSheetWriteHandler.java
│           │                   │       ├── CustomStringStringConverter.java
│           │                   │       ├── DemoData.java
│           │                   │       ├── DemoMergeData.java
│           │                   │       ├── DemoStyleData.java
│           │                   │       ├── ImageDataWithAnnotation.java
│           │                   │       ├── ImageDemoData.java
│           │                   │       ├── IndexData.java
│           │                   │       ├── LongestMatchColumnWidthData.java
│           │                   │       ├── WidthAndHeightData.java
│           │                   │       ├── WriteCellDemoData.java
│           │                   │       └── WriteTest.java
│           │                   ├── temp/
│           │                   │   ├── CamlData.java
│           │                   │   ├── DemoData2.java
│           │                   │   ├── DemoData3.java
│           │                   │   ├── FillTempTest.java
│           │                   │   ├── Lock2Test.java
│           │                   │   ├── LockData.java
│           │                   │   ├── LockDataListener.java
│           │                   │   ├── LockTest.java
│           │                   │   ├── StyleData.java
│           │                   │   ├── StyleTest.java
│           │                   │   ├── TempFillData.java
│           │                   │   ├── WriteLargeTest.java
│           │                   │   ├── WriteV33Test.java
│           │                   │   ├── WriteV34Test.java
│           │                   │   ├── Xls03Test.java
│           │                   │   ├── bug/
│           │                   │   │   ├── DataType.java
│           │                   │   │   ├── ExcelCreat.java
│           │                   │   │   └── HeadType.java
│           │                   │   ├── cache/
│           │                   │   │   └── CacheTest.java
│           │                   │   ├── csv/
│           │                   │   │   ├── CsvData.java
│           │                   │   │   ├── CsvDataListeer.java
│           │                   │   │   └── CsvReadTest.java
│           │                   │   ├── data/
│           │                   │   │   ├── DataType.java
│           │                   │   │   └── HeadType.java
│           │                   │   ├── dataformat/
│           │                   │   │   ├── DataFormatData.java
│           │                   │   │   ├── DataFormatTest.java
│           │                   │   │   └── DataFormatter1.java
│           │                   │   ├── fill/
│           │                   │   │   ├── FillData2.java
│           │                   │   │   └── FillTempTest.java
│           │                   │   ├── issue1662/
│           │                   │   │   ├── Data1662.java
│           │                   │   │   └── Issue1662Test.java
│           │                   │   ├── issue1663/
│           │                   │   │   ├── FillData.java
│           │                   │   │   └── FillTest.java
│           │                   │   ├── issue2443/
│           │                   │   │   ├── Issue2443.java
│           │                   │   │   └── Issue2443Test.java
│           │                   │   ├── large/
│           │                   │   │   ├── LargeData.java
│           │                   │   │   ├── LargeDataListener.java
│           │                   │   │   ├── NoModelLargeDataListener.java
│           │                   │   │   └── TempLargeDataTest.java
│           │                   │   ├── poi/
│           │                   │   │   ├── Poi2Test.java
│           │                   │   │   ├── Poi3Test.java
│           │                   │   │   ├── PoiDateFormatTest.java
│           │                   │   │   ├── PoiEncryptTest.java
│           │                   │   │   ├── PoiFormatTest.java
│           │                   │   │   ├── PoiTest.java
│           │                   │   │   ├── PoiWriteTest.java
│           │                   │   │   └── TestCell.java
│           │                   │   ├── read/
│           │                   │   │   ├── CommentTest.java
│           │                   │   │   ├── HDListener.java
│           │                   │   │   ├── HeadListener.java
│           │                   │   │   ├── HeadReadData.java
│           │                   │   │   ├── HeadReadTest.java
│           │                   │   │   └── TestListener.java
│           │                   │   ├── simple/
│           │                   │   │   ├── DemoData1.java
│           │                   │   │   ├── DemoData2.java
│           │                   │   │   ├── HgListener.java
│           │                   │   │   ├── HgTest.java
│           │                   │   │   ├── JsonData.java
│           │                   │   │   ├── RepeatListener.java
│           │                   │   │   ├── RepeatTest.java
│           │                   │   │   ├── Write.java
│           │                   │   │   ├── WriteCellHandler.java
│           │                   │   │   ├── WriteData.java
│           │                   │   │   └── WriteHandler.java
│           │                   │   └── write/
│           │                   │       ├── TempWriteData.java
│           │                   │       └── TempWriteTest.java
│           │                   └── util/
│           │                       ├── TestFileUtil.java
│           │                       └── TestUtil.java
│           └── resources/
│               ├── bom/
│               │   ├── no_bom.csv
│               │   └── office_bom.csv
│               ├── compatibility/
│               │   ├── t01.xls
│               │   ├── t02.xlsx
│               │   ├── t03.xlsx
│               │   ├── t04.xlsx
│               │   ├── t05.xlsx
│               │   ├── t06.xlsx
│               │   ├── t07.xlsx
│               │   └── t09.xlsx
│               ├── converter/
│               │   ├── converter03.xls
│               │   ├── converter07.xlsx
│               │   └── converterCsv.csv
│               ├── dataformat/
│               │   ├── dataformat.xls
│               │   ├── dataformat.xlsx
│               │   └── dataformatv2.xlsx
│               ├── demo/
│               │   ├── cellDataDemo.xlsx
│               │   ├── demo.csv
│               │   ├── demo.xlsx
│               │   ├── extra.xlsx
│               │   └── fill/
│               │       ├── complex.xlsx
│               │       ├── complexFillWithTable.xlsx
│               │       ├── composite.xlsx
│               │       ├── horizontal.xlsx
│               │       ├── list.xlsx
│               │       └── simple.xlsx
│               ├── extra/
│               │   ├── extra.xls
│               │   ├── extra.xlsx
│               │   └── extraRelationships.xlsx
│               ├── fill/
│               │   ├── annotation.xls
│               │   ├── annotation.xlsx
│               │   ├── byName.xls
│               │   ├── byName.xlsx
│               │   ├── complex.xls
│               │   ├── complex.xlsx
│               │   ├── composite.xls
│               │   ├── composite.xlsx
│               │   ├── horizontal.xls
│               │   ├── horizontal.xlsx
│               │   ├── simple.csv
│               │   ├── simple.xls
│               │   ├── simple.xlsx
│               │   ├── style.xls
│               │   └── style.xlsx
│               ├── large/
│               │   ├── fill.xlsx
│               │   └── large07.xlsx
│               ├── logback.xml
│               ├── multiplesheets/
│               │   ├── multiplesheets.xls
│               │   └── multiplesheets.xlsx
│               ├── simple/
│               │   └── simple07.xlsx
│               ├── temp/
│               │   ├── issue1663/
│               │   │   └── template.xlsx
│               │   └── issue2443/
│               │       ├── date1.xlsx
│               │       └── date2.xlsx
│               └── template/
│                   ├── template03.xls
│                   └── template07.xlsx
├── easyexcel_en.md
├── lombok.config
├── mvnw
├── mvnw.cmd
├── pom.xml
├── quickstart.md
├── src/
│   └── test/
│       └── java/
│           └── com/
│               └── alibaba/
│                   └── easyexcel/
│                       └── test/
│                           └── demo/
│                               ├── fill/
│                               │   └── FillTest.java
│                               ├── read/
│                               │   └── ReadTest.java
│                               ├── web/
│                               │   └── WebTest.java
│                               └── write/
│                                   └── WriteTest.java
├── style/
│   ├── STYLE.md
│   └── codestyle/
│       ├── eclipse/
│       │   └── codestyle.xml
│       └── idea/
│           └── codestyle.xml
└── update.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*.{groovy, java, kt, xml}]
#缩进风格:空格
indent_style = space
#缩进大小
indent_size = 4
#换行符lf
end_of_line = lf
#字符集utf-8
charset = utf-8
#是否删除行尾的空格
trim_trailing_whitespace = true
#是否在文件的最后插入一个空行
insert_final_newline = true

================================================
FILE: .gitee/ISSUE_TEMPLATE.zh-CN.md
================================================
# 建议先去看文档
[快速开始](https://easyexcel.opensource.alibaba.com/docs/current/) 、[常见问题](https://easyexcel.opensource.alibaba.com/qa/)
# 异常代码
```java
   这里写你的代码
```
# 异常提示
大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。
# 其他描述

================================================
FILE: .github/ISSUE_TEMPLATE/bug.md
================================================
---
name: bug
about: 发现一个新的Bug
title: ''
labels: bug
assignees: zhuangjiaju

---

# 建议先去看文档
[快速开始](https://easyexcel.opensource.alibaba.com/docs/current/) 、[常见问题](https://easyexcel.opensource.alibaba.com/qa/)
# 触发场景描述

# 触发Bug的代码
```java
   这里写代码
```
# 提示的异常或者没有达到的效果
大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。
至少大家要符合一个原则就是,能让其他人复现出这个问题,如果无法复现,肯定无法解决。


================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: question
about: 有使用疑问,请先阅读“快速开始”,上面无法解决再提交问题。处理完请关闭问题。
title: ''
labels: help wanted
assignees: ''

---

# 建议先去看文档
[快速开始](https://easyexcel.opensource.alibaba.com/docs/current/) 、[常见问题](https://easyexcel.opensource.alibaba.com/qa/)
# 异常代码
```java
   这里写你的代码
```
# 异常提示
大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。
至少大家要符合一个原则就是,能让其他人复现出这个问题,如果无法复现,肯定无法解决。
# 问题描述


================================================
FILE: .github/ISSUE_TEMPLATE/suggest.md
================================================
---
name: suggest
about: 给出一些建议的能
title: ''
labels: suggest
assignees: ''

---

# 建议先去看文档
[快速开始](https://easyexcel.opensource.alibaba.com/docs/current/) 、[常见问题](https://easyexcel.opensource.alibaba.com/qa/)
# 建议描述


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
================================================
## 关联的ISSUE
TODO 请说明关联的异常
## 问题描述&解决
TODO 描述下出了什么问题,必要的话提供excel。在PR合并前,审核同学一定会复现问题,然后再PR合并的。
## 代码注意点
* 确认已经安装了阿里巴巴代码规约插件:[alibaba-java-coding-guidelines ](https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines)
* src/main 下面不要出现中文注释
* src/test/core && src/test/demo 下面要新增测试案例请严格参照其他的,包括注释等等什么都不要错
* 如果只是自己测试 全部加入到 src/test/temp
* 如果改动量较大(5+文件)尽量先和作者沟通,这个风险很大

================================================
FILE: .github/workflows/ci.yml
================================================
#
#    Copyright 2009-2021 the original author or authors.
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

name: Java CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ 8, 11, 17, 21]
        distribution: [ 'adopt' ]
      fail-fast: false
      max-parallel: 4
    name: Test JDK ${{ matrix.java }}

    steps:
      - uses: actions/checkout@main
      - name: Set up JDK
        uses: actions/setup-java@main
        with:
          java-version: ${{ matrix.java }}
          distribution: ${{ matrix.distribution }}
      - name: Cache local Maven repository
        uses: actions/cache@main
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-m2
      - name: Chmod
        run:  chmod +x mvnw
      - name: Test with Maven
        if: ${{ matrix.java == '8' }}
        run: ./mvnw test -B -Dmaven.test.skip=false
      - name: Test with Maven
        if: ${{ matrix.java != '8' }}
        run: ./mvnw test -B -Dmaven.test.skip=false -DargLine="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED"
      - name: Maven Build
        run: ./mvnw install -B -V
      - name: Java Doc
        run: ./mvnw javadoc:javadoc


================================================
FILE: .github/workflows/release.yml
================================================
#
#    Copyright 2009-2021 the original author or authors.
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

name: Publish package to the Maven Central Repository



on:
  release:
    types: [created]

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: Check out Git repository
        uses: actions/checkout@main
      - name: Install Java and Maven
        uses: actions/setup-java@main
        with:
          java-version: 8
          distribution: 'adopt'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Cache local Maven repository
        uses: actions/cache@main
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-m2
      - id: install-secret-key
        name: Install GPG secret key
        run: |
          cat <(echo -e "${{ secrets.GPG_PRIVATE_KEY }}") | gpg --batch --import
      - name: Publish package
        run: |
          mvn --batch-mode -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }}  clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=false -Dgpg.skip=false
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

================================================
FILE: .github/workflows/sync2gitee.yml
================================================
# 通过 Github action, 在仓库的每一次 commit 后自动同步到 Gitee 上
name: Mirror the Github organization repos to Gitee
on: [push]

jobs:
  repo-sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@main
        with:
          persist-credentials: false
      - name: Mirror the Github organization repos to Gitee.
        uses: Yikun/hub-mirror-action@master
        with:
          # 必选,需要同步的 Github 这里记住选择的是仓库 或者账号 而不是具体的项目
          src: github/alibaba
          # 必选,需要同步到的 Gitee 这里记住选择的是仓库 或者账号 而不是具体的项目
          dst: gitee/easyexcel
          # 必选,Gitee公钥对应的私钥,https://gitee.com/profile/sshkeys
          dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
          # 必选,Gitee对应的用于创建仓库的token,https://gitee.com/profile/personal_access_tokens
          dst_token: ${{ secrets.GITEE_TOKEN }}
          # 如果是组织,指定组织即可,默认为用户 user
          account_type: org
          # 需要同步的仓库里面的项目
          static_list: "easyexcel"

================================================
FILE: .gitignore
================================================
.idea/
*/.settings/
*.idea
.DS_Store
**/.iml*
*.iml
**/.class
**/.classpath
**/.project
*/target/
target/
*.ipr
*.iws
antx.properties
output/
.flattened-pom.xml
dependency-reduced-pom.xml


================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar


================================================
FILE: CONTRIBUTING.md
================================================
## 前言
非常感谢您愿意协助EasyExcel的开发,EasyExcel成长离不开大家的贡献。但是为了合作的更有效率,希望我们在贡献代码的时候能按照如下约定。
## 提前沟通
尽量把自己的想法和实现思路提前沟通,可以通过issue,钉钉,QQ都可以,可能很多问题我们内部已经讨论过,由于各种原因后续不会支持,但是您这边又开发好了,这样容易浪费您的时间。
## 代码规范
请先安装阿里巴巴代码规约插件!!!https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines    
目前代码规范已经集成了自动校验,然后源代码尽量不要有中文注释。在新增功能的时候,尽量注意补充junit。core代表每次travis-ci都会跑的测试案例,然后demo用于对外看到,temp里面随便写。
## 提交分支
建议提交到最新的版本号.x上面,比如 3.x之类的版本,为了方便其他同学阅读源代码,所以目前的思路是master和maven center的最新版本代码保持一致,然后您提交过来的代码我们可能会稍微做一些修改。所以提交到开发分支会比较好。fork也可以直接fork该分支。


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================


EasyExcel
======================
[![Build Status](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml?query=branch%3Amaster)
[![Maven central](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel)
[![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)
[![](https://img.shields.io/badge/EasyExcel-%E6%9F%A5%E7%9C%8B%E8%B4%A1%E7%8C%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=easyexcel)

# 维护公告
尊敬的EasyExcel用户们:   

首先,我们想表达最深的谢意,感谢您长期以来对EasyExcel的信任与支持。在这段旅程中,EasyExcel有幸陪伴众多开发者和企业共同成长,见证了无数数据处理任务的高效完成。

近期,我们注意到市场上出现了更多优秀的数据处理工具和解决方案,为用户提供了更丰富的选择。为了确保每位用户都能享受到最佳的体验和服务,我们决定采取一项重要措施:EasyExcel将逐步进入维护模式,并给予用户充足的时间评估并迁移到其他产品。同时,我们也欢迎并乐于见到社区内外分享关于同类优秀产品的使用心得和迁移经验,共同促进技术生态的健康发展。  

请放心,即使进入维护模式,我们仍会确保EasyExcel的基本功能稳定运行,会进行Bug修复,但不再主动新增功能。我们相信,通过大家的共同努力,每一段代码、每一个项目都将继续在各自的领域发光发热,服务于更广泛的用户群体。
再次感谢您对EasyExcel的支持与理解!期待在技术的广阔天地里,我们能以新的形式再度携手,共创辉煌。   

祝您在未来的工作与学习中一切顺利! 

阿里巴巴EasyExcel团队敬上   

# 新手必读

* 官方网站:[https://easyexcel.opensource.alibaba.com/](https://easyexcel.opensource.alibaba.com/)
* github地址:[https://github.com/alibaba/easyexcel](https://github.com/alibaba/easyexcel)
* gitee地址:[https://gitee.com/easyexcel/easyexcel](https://gitee.com/easyexcel/easyexcel)


# JAVA解析Excel工具

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。  
easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便


# 16M内存23秒读取75M(46W行25列)的Excel(3.2.1+版本)

当然还有[极速模式](https://easyexcel.opensource.alibaba.com/qa/read#%E5%BC%80%E5%90%AF%E6%80%A5%E9%80%9F%E6%A8%A1%E5%BC%8F)
能更快,但是内存占用会在100M多一点
![img](img/readme/large.png)

# 最新版本

```xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
</dependency>
```

# 帮忙点个⭐Star

开源不易,如果觉得EasyExcel对您的工作还是有帮助的话,请帮忙在<a target="_blank" href='https://github.com/alibaba/easyexcel'><img src="https://img.shields.io/github/stars/alibaba/easyexcel.svg?style=flat-square&label=Stars&logo=github" alt="github star"/></a>
的右上角点个⭐Star,您的支持是使EasyExcel变得更好最大的动力。

# 如何获取帮助

## 优先建议自己通过文档来解决问题

* [快速开始](https://easyexcel.opensource.alibaba.com/docs/current/)
* [常见问题](https://easyexcel.opensource.alibaba.com/docs/qa/)
* [API](https://easyexcel.opensource.alibaba.com/docs/current/api/)

## 其次建议通过`issues`来解决解决问题

可以尝试在以下2个链接搜索问题,如果不存在可以尝试创建`issue`。

* 去 [github](https://github.com/alibaba/easyexcel/issues) 搜索`issues`
* 去 [gitee](https://gitee.com/easyexcel/easyexcel/issues) 搜索`issues`

通过 `issues` 解决问题,可以给后面遇到相同问题的同学查看,所以比较推荐这种方式。   
不管`github`、`gitee`都会定期有人回答您的问题,比较紧急可以在提完`issue`以后在钉钉群艾特群主并发送`issue`地址帮忙解决。   
`QQ` 公司不让用,有时候也会去看,但是核心肯定还是在钉钉。

## 也可以加入钉钉&QQ群来解决问题

加入钉钉或QQ群,看完公告可以获得帮助 。  
比较推荐钉钉群,`QQ` 公司不让用,当然QQ群也会有热心网友帮忙解决。   
[QQ1群(已满): 662022184](https://jq.qq.com/?_wv=1027&k=1T21jJxh)  
[QQ2群(已满): 1097936804](https://jq.qq.com/?_wv=1027&k=j5zEy6Xl)  
[QQ3群(已满): 453928496](https://qm.qq.com/cgi-bin/qm/qr?k=e2ULsA5A0GldhV2CXJ8sIbAyu9I6qqs7&jump_from=webapi)  
[QQ4群(已满): 496594404](https://qm.qq.com/cgi-bin/qm/qr?k=e_aVG1Q7gi0PJUBkbrUGAgbeO3kUEInK&jump_from=webapi)   
[QQ5群(已满): 451925680](https://jq.qq.com/?_wv=1027&k=6VHhvxyf)   
[QQ6群(已满): 784741035](https://jq.qq.com/?_wv=1027&k=BbLBIo9P)   
[QQ7群(已满): 667889383](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XdTLw3Z3pr63VT0IkyoY-2t25TG7WxbG&authKey=gQKvTXipsjfUO1aNfL9zdHTfOmkqC6E%2BQ2zDg2jym8h3qXuQ7RtkpeAHeg9I4UhL&noverify=0&group_code=667889383)   
[QQ8群: 113968681](https://qm.qq.com/q/qwfl5RRBAG)   
[钉钉1群(已满): 21960511](https://qr.dingtalk.com/action/joingroup?code=v1,k1,cchz6k12ci9B08NNqhNRFGXocNVHrZtW0kaOtTKg/Rk=&_dt_no_comment=1&origin=11)  
[钉钉2群(已满): 32796397](https://qr.dingtalk.com/action/joingroup?code=v1,k1,jyU9GtEuNU5S0QTyklqYcYJ8qDZtUuTPMM7uPZTS8Hs=&_dt_no_comment=1&origin=11)  
[钉钉3群(已满): 33797247](https://qr.dingtalk.com/action/joingroup?code=v1,k1,3UGlEScTGQaHpW2cIRo+gkxJ9EVZ5fz26M6nW3uFP30=&_dt_no_comment=1&origin=11)  
[钉钉4群(已满): 33491624](https://qr.dingtalk.com/action/joingroup?code=v1,k1,V14Pb65Too70rQkEaJ9ohb6lZBZbtp6jIL/q9EWh9vA=&_dt_no_comment=1&origin=11)  
[钉钉5群(已满): 32134498](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dingb9fa1325d9dccc3ecac589edd02f1650&5233a=71a83&cbdbhh=qwertyuiop)  
[钉钉6群(已满): 34707941](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dingcf68008a1d443ac012d5427bdb061b7a&6ae36c3d-0c80-4=22398493-6c2a-4&cbdbhh=qwertyuiop)  
[钉钉7群(已满): 35235427](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=ding532b9018c06c7fc8660273c4b78e6440&167fb=ed003&cbdbhh=qwertyuiop)  
[钉钉8群(已满): 44752220](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dingea96808beee421693fd4ba7542d6e5da&0380092a-fa46=a6a40905-7951&cbdbhh=qwertyuiop)   
[钉钉9群(已满): 11045002277](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dinge338d2215891c0459c13cd6b2cb108a6&6972d=b92f9&cbdbhh=qwertyuiop)   
[钉钉10群(已满): 27360019755](https://qr.dingtalk.com/action/joingroup?code=v1,k1,v25LHn2liWmrWUKlkhIzOTcK7s7onp/sZP8mO5oIYSs=&_dt_no_comment=1&origin=11)   
[钉钉11群(已满):24330026964](https://qr.dingtalk.com/action/joingroup?code=v1,k1,63PjvTncu81oQ3X6XmGEJqnwQHCQxi/jaVlbUStq79o=&_dt_no_comment=1&origin=11)   
[钉钉12群(已满):27210038956](https://qr.dingtalk.com/action/joingroup?code=v1,k1,3mKi7VTGlYO+IsDX5n7sYYm2Qrlm220kMBPsJFzKRis=&_dt_no_comment=1&origin=11)   
[钉钉13群:83695000992](https://qr.dingtalk.com/action/joingroup?code=v1,k1,2JFUbWfxD1fGiq7LRW+mYjcK7s7onp/s1ZqOvfzkFGE=&_dt_no_comment=1&origin=11)   


# 维护者

姬朋飞(玉霄)、庄家钜

# 快速开始

## 读Excel

demo代码地址:[https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java](https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java)   
详细文档地址:[https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read](https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read)

```java
    /**
    * 最简单的读
    * <p>1. 创建excel对应的实体对象 参照{@link DemoData}
    * <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener}
    * <p>3. 直接读即可
    */
    @Test
    public void simpleRead() {
        String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
    }
```

## 写Excel

demo代码地址:[https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java](https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java)   
详细文档地址:[https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write](https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write)

```java
    /**
     * 最简单的写
     * <p>1. 创建excel对应的实体对象 参照{@link com.alibaba.easyexcel.test.demo.write.DemoData}
     * <p>2. 直接写即可
     */
    @Test
    public void simpleWrite() {
        String fileName=TestFileUtil.getPath()+"write"+System.currentTimeMillis()+".xlsx";
        // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName,DemoData.class).sheet("模板").doWrite(data());
    }
```

## web上传、下载

demo代码地址:[https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java)

```java
    /**
    * 文件下载(失败了会返回一个有部分数据的Excel)
    * <p>
    * 1. 创建excel对应的实体对象 参照{@link DownloadData}
    * <p>
    * 2. 设置返回的 参数
    * <p>
    * 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
    */
    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName=URLEncoder.encode("测试","UTF-8").replaceAll("\\+","%20");
        response.setHeader("Content-disposition","attachment;filename*=utf-8''"+fileName+".xlsx");
        EasyExcel.write(response.getOutputStream(),DownloadData.class).sheet("模板").doWrite(data());
    }
    
    /**
     * 文件上传
     * <p>1. 创建excel对应的实体对象 参照{@link UploadData}
     * <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener}
     * <p>3. 直接读即可
     */
    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file)throws IOException{
        EasyExcel.read(file.getInputStream(),UploadData.class,new UploadDataListener(uploadDAO)).sheet().doRead();
        return"success";
    }
```


================================================
FILE: README_EN.md
================================================
EasyExcel
======================
[![Build Status](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml?query=branch%3Amaster)
[![Maven central](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel)
[![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)
[![](https://img.shields.io/badge/EasyExcel-Check%20Your%20Contribution-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=easyexcel)

[Communication Group 1 in QQ(Full): 662022184](https://jq.qq.com/?_wv=1027&k=1T21jJxh)  
[Communication Group 2 in QQ(Full): 1097936804](https://jq.qq.com/?_wv=1027&k=j5zEy6Xl)  
[Communication Group 3 in QQ(Full): 453928496](https://qm.qq.com/cgi-bin/qm/qr?k=e2ULsA5A0GldhV2CXJ8sIbAyu9I6qqs7&jump_from=webapi)  
[Communication Group 4 in QQ: 496594404](https://qm.qq.com/cgi-bin/qm/qr?k=e_aVG1Q7gi0PJUBkbrUGAgbeO3kUEInK&jump_from=webapi)   
[Communication Group 1 in DingTalk(Full): 21960511](https://qr.dingtalk.com/action/joingroup?code=v1,k1,cchz6k12ci9B08NNqhNRFGXocNVHrZtW0kaOtTKg/Rk=&_dt_no_comment=1&origin=11)  
[Communication Group 2 in DingTalk(Full): 32796397](https://qr.dingtalk.com/action/joingroup?code=v1,k1,jyU9GtEuNU5S0QTyklqYcYJ8qDZtUuTPMM7uPZTS8Hs=&_dt_no_comment=1&origin=11)  
[Communication Group 3 in DingTalk(Full): 33797247](https://qr.dingtalk.com/action/joingroup?code=v1,k1,3UGlEScTGQaHpW2cIRo+gkxJ9EVZ5fz26M6nW3uFP30=&_dt_no_comment=1&origin=11)  
[Communication Group 4 in DingTalk(Full): 33491624](https://qr.dingtalk.com/action/joingroup?code=v1,k1,V14Pb65Too70rQkEaJ9ohb6lZBZbtp6jIL/q9EWh9vA=&_dt_no_comment=1&origin=11)  
[Communication Group 5 in DingTalk: 32134498](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dingb9fa1325d9dccc3ecac589edd02f1650&5233a=71a83&cbdbhh=qwertyuiop)  
[Official Website: https://yuque.com/easyexcel](https://www.yuque.com/easyexcel/doc/easyexcel)  

[FAQ](https://www.yuque.com/easyexcel/faq)
#### It is recommended to join a DingTalk group

# EasyExcel, a java toolkit for parsing Excel easily
There are several java frameworks or toolkit which can parse and generate Excel, such as Apache POI or jxl. But they all have some difficulties to handle problems like excessive memory usage. Apache POI framework has a set of SAX mode API can fix some memory overflow problems at some extent, but it still has some flaws. For example, the unzipping and the storage of the unzipping of Excel file in version 07 are done in memory, so the memory consumption is still very high. The EasyExcel toolkit rewrites the logic of POI for parsing Excel version 07. One 3 megabytes Excel file parsed with POI still requires about 100M memory, which can be reduced to a few megabyte by using EasyExcel instead. And yes, there is no memory overflow for even larger excel with EasyExcel. EasyExcel version 03 depends on POI SAX model and does model transformation/encapsulation in the upper layer to make it simpler and more convenient for users.

## Using EasyExcel version 3.0.2+, a machine with 64M RAM can read a 75 megabyte Excel file containing 460,000 rows and 25 columns in 20 seconds
Of course, there is also a very fast mode can be faster, but the memory consumption will be a little more than 100M
![img](img/readme/large.png)

## Version support
* EasyExcel version 2+ works on Java7 or Java6
* EasyExcel version 3+ works on Java8 or java8+
### About version upgrade
* It is not recommended upgrading across major versions, especially across 2 major versions.
* There are some incompatibilities in upgrading from version 2+ to version 3+.
  * Using a custom interceptor to modify the style can cause problems, even if it does not compile with errors.
  * When reading the Excel file, the `invoke` function will throw an exception, there will not be an additional layer of `ExcelAnalysisException` wrapped here, and it will not compile with errors.
  * Style and other annotations involving `boolean` or some enumeration values have been changed, adding the default value. The compiler will report an error, just change the annotation.
* It is recommended to re-test the relevant functions after upgrading across major versions.

### Latest Version
```xml
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.2</version>
        </dependency>
```

## Advertising space
### Alibaba New Retail Business Department Recruitment
Alibaba New Retail Business Department sincerely recruit JAVA senior development, technical experts. If you are interested, you can contact us by WeChat, or send your Resume to my email jipengfei.jpf@alibaba-inc.com.
### EasyExcel personnel recruitment
Anyone who wants to participate in this project can apply, mainly responsible for answering questions in the communication group and dealing with the issues. Of course, you can also do some PR.
Since there is no material reward for participating in the open source project, and the current maintainers are also maintaining the project in their spare time. So people who want to join this project need to be persistent, not just on a whim.   
The requirements are as follows:
* There are certain java coding skills & good coding habits
* Understand the read&write principles of EasyExcel
* Has passion for open source projects
* Be able to do things consistently for a long time
* Your job is not so busy

## Related Documents
* [Quick Start](https://www.yuque.com/easyexcel/doc/easyexcel)
* [About Us](/abouteasyexcel.md)
* [Update Notes](/update.md)
* [Code Contribution](https://www.yuque.com/easyexcel/doc/contribute)

## Maintainers
姬朋飞(玉霄)、庄家钜、怀宇
## Quick Start
### Read Excel File
DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/demo/read/ReadTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java)

```java
    /**
     * The easiest way to read Excel file using EasyExcel toolkit
     *
     * <p>
     *     1. Create an entity object, such as {@link DemoData}, each property of the entity object corresponds to a specific field in any row of Excel.
     *     2. When reading each row of an Excel file, create a callback listener for the corresponding row. Refer to{@link DemoDataListener}
     *     3. Invoke the read function
     * </p>
     */
    @Test
    public void simpleRead() {
        String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
        // Specify which entity object class to use to read the Excel content. The file stream will close automatically after reading the first sheet of Excel.
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
    }
```

### Write Excel File
DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java)
```java
    /**
     * The easiest way to write Excel file using EasyExcel toolkit
     *
     * <p>
     *     1. Create an entity object, refer to{@link com.alibaba.easyexcel.test.demo.write.DemoData}. 
     *        Each property of the entity object corresponds to a specific field of Excel
     *     2. Invoke write function
     * </p>
     */
    @Test
    public void simpleWrite() {
        String fileName = TestFileUtil.getPath() + "write" + System.currentTimeMillis() + ".xlsx";
        // Specify which entity object class to use to write Excel, it will write to the first sheet of Excel with the name template. Then the file stream will be closed automatically.
        // With version 03, just pass in the excelType parameter
        EasyExcel.write(fileName, DemoData.class).sheet("template").doWrite(data());
    }
```

### File Uploading&Downloading
DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java)
```java
   /**
     * File downloading
     *
     * Note: returns an Excel with partial data if it fails
     *
     * <p>
     *  1. Create an entity object, refer to{@link DownloadData}. 
     *     Each property of the entity object corresponds to a specific field of Excel
     *  2. Specify the returned properties
     *  3. Invoke write function, then the OutputStream is automatically closed when it ends.
     * </p>
     */
    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        // Using swagger may cause some problems, please use your browser directly or use postman to invoke this
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // URLEncoder.encode function can prevent Chinese garbled code 
        String fileName = URLEncoder.encode("test", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("template").doWrite(data());
    }

    /**
     * File uploading
     *
     * <p>
     *     1. Create an entity object, refer to{@link UploadData}
     *        Each property of the entity object corresponds to a specific field of Excel
     *     2. When reading each row of an Excel file, create a callback listener for the corresponding row. Refer to{@link UploadDataListener}
     *     3. Invoke read function
     * </p>
     */
    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();
        return "success";
    }
```
### Contact Us
If you have any questions, Alibaba colleagues can find me in DingTalk, and others can leave messages here. All related questions are well welcomed.


================================================
FILE: docs/API.md
================================================
# 详细参数介绍
## 关于常见类解析
* EasyExcel 入口类,用于构建开始各种操作
* ExcelReaderBuilder ExcelWriterBuilder 构建出一个 ReadWorkbook WriteWorkbook,可以理解成一个excel对象,一个excel只要构建一个
* ExcelReaderSheetBuilder ExcelWriterSheetBuilder 构建出一个 ReadSheet WriteSheet对象,可以理解成excel里面的一页,每一页都要构建一个
* ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据
* WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据
* 所有配置都是继承的,Workbook的配置会被Sheet继承,所以在用EasyExcel设置参数的时候,在EasyExcel...sheet()方法之前作用域是整个sheet,之后针对单个sheet
## 读
### 注解
* `ExcelProperty` 指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index=0,以此类推。千万注意,要么全部不写,要么全部用index,要么全部用名字去匹配。千万别三个混着用,除非你非常了解源代码中三个混着用怎么去排序的。
* `ExcelIgnore` 默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
* `DateTimeFormat` 日期转换,用`String`去接收excel日期格式的数据会调用这个注解。里面的`value`参照`java.text.SimpleDateFormat`
* `NumberFormat` 数字转换,用`String`去接收excel数字格式的数据会调用这个注解。里面的`value`参照`java.text.DecimalFormat`
* `ExcelIgnoreUnannotated` 默认不加`ExcelProperty` 的注解的都会参与读写,加了不会参与
### 参数
#### 通用参数
`ReadWorkbook`,`ReadSheet` 都会有的参数,如果为空,默认使用上级。
* `converter` 转换器,默认加载了很多转换器。也可以自定义。
* `readListener` 监听器,在读取数据的过程中会不断的调用监听器。
* `headRowNumber` 需要读的表格有几行头数据。默认有一行头,也就是认为第二行开始起为数据。
* `head`  与`clazz`二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class。
* `clazz` 与`head`二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据。
* `autoTrim` 字符串、表头等数据自动trim
* `password` 读的时候是否需要使用密码
#### ReadWorkbook(理解成excel对象)参数
* `excelType` 当前excel的类型 默认会自动判断
* `inputStream` 与`file`二选一。读取文件的流,如果接收到的是流就只用,不用流建议使用`file`参数。因为使用了`inputStream` easyexcel会帮忙创建临时文件,最终还是`file`
* `file` 与`inputStream`二选一。读取文件的文件。
* `autoCloseStream` 自动关闭流。
* `readCache` 默认小于5M用 内存,超过5M会使用 `EhCache`,这里不建议使用这个参数。
#### ReadSheet(就是excel的一个Sheet)参数
* `sheetNo` 需要读取Sheet的编码,建议使用这个来指定读取哪个Sheet
* `sheetName` 根据名字去匹配Sheet,excel 2003不支持根据名字去匹配
## 写
### 注解
* `ExcelProperty` index 指定写到第几列,默认根据成员变量排序。`value`指定写入的名称,默认成员变量的名字,多个`value`可以参照快速开始中的复杂头
* `ExcelIgnore` 默认所有字段都会写入excel,这个注解会忽略这个字段
* `DateTimeFormat` 日期转换,将`Date`写到excel会调用这个注解。里面的`value`参照`java.text.SimpleDateFormat`
* `NumberFormat` 数字转换,用`Number`写excel会调用这个注解。里面的`value`参照`java.text.DecimalFormat`
* `ExcelIgnoreUnannotated` 默认不加`ExcelProperty` 的注解的都会参与读写,加了不会参与
### 参数
#### 通用参数
`WriteWorkbook`,`WriteSheet` ,`WriteTable`都会有的参数,如果为空,默认使用上级。
* `converter` 转换器,默认加载了很多转换器。也可以自定义。
* `writeHandler` 写的处理器。可以实现`WorkbookWriteHandler`,`SheetWriteHandler`,`RowWriteHandler`,`CellWriteHandler`,在写入excel的不同阶段会调用
* `relativeHeadRowIndex` 距离多少行后开始。也就是开头空几行
* `needHead` 是否导出头
* `head`  与`clazz`二选一。写入文件的头列表,建议使用class。
* `clazz` 与`head`二选一。写入文件的头对应的class,也可以使用注解。
* `autoTrim` 字符串、表头等数据自动trim
#### WriteWorkbook(理解成excel对象)参数
* `excelType` 当前excel的类型 默认`xlsx`
* `outputStream` 与`file`二选一。写入文件的流
* `file` 与`outputStream`二选一。写入的文件
* `templateInputStream` 模板的文件流
* `templateFile` 模板文件
* `autoCloseStream` 自动关闭流。
* `password` 写的时候是否需要使用密码
* `useDefaultStyle` 写的时候是否是使用默认头
#### WriteSheet(就是excel的一个Sheet)参数
* `sheetNo` 需要写入的编码。默认0
* `sheetName` 需要些的Sheet名称,默认同`sheetNo`
#### WriteTable(就把excel的一个Sheet,一块区域看一个table)参数
* `tableNo` 需要写入的编码。默认0

================================================
FILE: docs/LARGEREAD.md
================================================
# 10M以上文件读取说明
03版没有办法处理,相对内存占用大很多。excel 07版本有个共享字符串[共享字符串](https://docs.microsoft.com/zh-cn/office/open-xml/working-with-the-shared-string-table)的概念,这个会非常占用内存,如果全部读取到内存的话,大概是excel文件的大小的3-10倍,所以easyexcel用存储文件的,然后再反序列化去读取的策略来节约内存。当然需要通过文件反序列化以后,效率会降低,大概降低30-50%(不一定,也看命中率,可能会超过100%)
## 如果对读取效率感觉还能接受,就用默认的,永久占用(单个excel读取整个过程)一般不会超过50M(大概率就30M),剩下临时的GC会很快回收
## 默认大文件处理
默认大文件处理会自动判断,共享字符串5M以下会使用内存存储,大概占用15-50M的内存,超过5M则使用文件存储,然后文件存储也要设置多内存M用来存放临时的共享字符串,默认20M。除了共享字符串占用内存外,其他占用较少,所以可以预估10M,所以默认大概30M就能读取一个超级大的文件。
## 根据实际需求配置内存
想自定义设置,首先要确定你大概愿意花多少内存来读取一个超级大的excel,比如希望读取excel最多占用100M内存(是读取过程中永久占用,新生代马上回收的不算),那就设置使用文件来存储共享字符串的大小判断为20M(小于20M存内存,大于存临时文件),然后设置文件存储时临时共享字符串占用内存大小90M差不多
### 如果最大文件条数也就十几二十万,然后excel也就是十几二十M,而且不会有很高的并发,并且内存也较大
```java
 // 强制使用内存存储,这样大概一个20M的excel使用150M(很多临时对象,所以100M会一直GC)的内存
// 这样效率会比上面的复杂的策略高很多
   // 这里再说明下 就是加了个readCache(new MapCache()) 参数而已,其他的参照其他demo写 这里没有写全 
  EasyExcel.read().readCache(new MapCache());
```
### 对并发要求较高,而且都是经常有超级大文件
```java
 // 第一个参数的意思是 多少M共享字符串以后 采用文件存储 单位MB 默认5M
// 第二个参数 文件存储时,内存存放多少M缓存数据 默认20M
// 比如 你希望用100M内存(这里说的是解析过程中的永久占用,临时对象不算)来解析excel,前面算过了 大概是 20M+90M 所以设置参数为:20 和 90 
   // 这里再说明下 就是加了个readCacheSelector(new SimpleReadCacheSelector(5, 20))参数而已,其他的参照其他demo写 这里没有写全 
EasyExcel.read().readCacheSelector(new SimpleReadCacheSelector(5, 20));
```
### 关于maxCacheActivateSize 也就是前面第二个参数的详细说明
easyexcel在使用文件存储的时候,会把共享字符串拆分成1000条一批,然后放到文件存储。然后excel来读取共享字符串大概率是按照顺序的,所以默认20M的1000条的数据放在内存,命中后直接返回,没命中去读文件。所以不能设置太小,太小了,很难命中,一直去读取文件,太大了的话会占用过多的内存。
### 如何判断 maxCacheActivateSize是否需要调整
开启debug日志会输出`Already put :4000000` 最后一次输出,大概可以得出值为400W,然后看`Cache misses count:4001`得到值为4K,400W/4K=1000 这代表已经`maxCacheActivateSize` 已经非常合理了。如果小于500 问题就非常大了,500到1000 应该都还行。


================================================
FILE: easyexcel/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel-parent</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <url>https://github.com/alibaba/easyexcel</url>
    <packaging>jar</packaging>
    <artifactId>easyexcel</artifactId>
    <name>easyexcel</name>


    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel-core</artifactId>
        </dependency>
    </dependencies>

</project>


================================================
FILE: easyexcel/src/main/java/com/alibaba/excel/Empty.java
================================================
package com.alibaba.excel;

/**
 * empty
 *
 * @author Jiaju Zhuang
 */
public class Empty {
}


================================================
FILE: easyexcel-core/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel-parent</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <url>https://github.com/alibaba/easyexcel</url>
    <packaging>jar</packaging>
    <artifactId>easyexcel-core</artifactId>
    <name>easyexcel-core</name>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
        </dependency>
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
    </dependencies>
</project>


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/EasyExcel.java
================================================
package com.alibaba.excel;

/**
 * This is actually {@link EasyExcelFactory}, and short names look better.
 *
 * @author jipengfei
 */
public class EasyExcel extends EasyExcelFactory {}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java
================================================
package com.alibaba.excel;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;

import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.excel.read.builder.ExcelReaderSheetBuilder;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.alibaba.excel.write.builder.ExcelWriterTableBuilder;

/**
 * Reader and writer factory class
 *
 * @author jipengfei
 */
public class EasyExcelFactory {

    /**
     * Build excel the write
     *
     * @return
     */
    public static ExcelWriterBuilder write() {
        return new ExcelWriterBuilder();
    }

    /**
     * Build excel the write
     *
     * @param file File to write
     * @return Excel writer builder
     */
    public static ExcelWriterBuilder write(File file) {
        return write(file, null);
    }

    /**
     * Build excel the write
     *
     * @param file File to write
     * @param head Annotate the class for configuration information
     * @return Excel writer builder
     */
    public static ExcelWriterBuilder write(File file, Class head) {
        ExcelWriterBuilder excelWriterBuilder = new ExcelWriterBuilder();
        excelWriterBuilder.file(file);
        if (head != null) {
            excelWriterBuilder.head(head);
        }
        return excelWriterBuilder;
    }

    /**
     * Build excel the write
     *
     * @param pathName File path to write
     * @return Excel writer builder
     */
    public static ExcelWriterBuilder write(String pathName) {
        return write(pathName, null);
    }

    /**
     * Build excel the write
     *
     * @param pathName File path to write
     * @param head     Annotate the class for configuration information
     * @return Excel writer builder
     */
    public static ExcelWriterBuilder write(String pathName, Class head) {
        ExcelWriterBuilder excelWriterBuilder = new ExcelWriterBuilder();
        excelWriterBuilder.file(pathName);
        if (head != null) {
            excelWriterBuilder.head(head);
        }
        return excelWriterBuilder;
    }

    /**
     * Build excel the write
     *
     * @param outputStream Output stream to write
     * @return Excel writer builder
     */
    public static ExcelWriterBuilder write(OutputStream outputStream) {
        return write(outputStream, null);
    }

    /**
     * Build excel the write
     *
     * @param outputStream Output stream to write
     * @param head         Annotate the class for configuration information.
     * @return Excel writer builder
     */
    public static ExcelWriterBuilder write(OutputStream outputStream, Class head) {
        ExcelWriterBuilder excelWriterBuilder = new ExcelWriterBuilder();
        excelWriterBuilder.file(outputStream);
        if (head != null) {
            excelWriterBuilder.head(head);
        }
        return excelWriterBuilder;
    }

    /**
     * Build excel the <code>writerSheet</code>
     *
     * @return Excel sheet writer builder
     */
    public static ExcelWriterSheetBuilder writerSheet() {
        return writerSheet(null, null);
    }

    /**
     * Build excel the <code>writerSheet</code>
     *
     * @param sheetNo Index of sheet,0 base.
     * @return Excel sheet writer builder.
     */
    public static ExcelWriterSheetBuilder writerSheet(Integer sheetNo) {
        return writerSheet(sheetNo, null);
    }

    /**
     * Build excel the 'writerSheet'
     *
     * @param sheetName The name of sheet.
     * @return Excel sheet writer builder.
     */
    public static ExcelWriterSheetBuilder writerSheet(String sheetName) {
        return writerSheet(null, sheetName);
    }

    /**
     * Build excel the 'writerSheet'
     *
     * @param sheetNo   Index of sheet,0 base.
     * @param sheetName The name of sheet.
     * @return Excel sheet writer builder.
     */
    public static ExcelWriterSheetBuilder writerSheet(Integer sheetNo, String sheetName) {
        ExcelWriterSheetBuilder excelWriterSheetBuilder = new ExcelWriterSheetBuilder();
        if (sheetNo != null) {
            excelWriterSheetBuilder.sheetNo(sheetNo);
        }
        if (sheetName != null) {
            excelWriterSheetBuilder.sheetName(sheetName);
        }
        return excelWriterSheetBuilder;
    }

    /**
     * Build excel the <code>writerTable</code>
     *
     * @return Excel table writer builder.
     */
    public static ExcelWriterTableBuilder writerTable() {
        return writerTable(null);
    }

    /**
     * Build excel the 'writerTable'
     *
     * @param tableNo Index of table,0 base.
     * @return Excel table writer builder.
     */
    public static ExcelWriterTableBuilder writerTable(Integer tableNo) {
        ExcelWriterTableBuilder excelWriterTableBuilder = new ExcelWriterTableBuilder();
        if (tableNo != null) {
            excelWriterTableBuilder.tableNo(tableNo);
        }
        return excelWriterTableBuilder;
    }

    /**
     * Build excel the read
     *
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read() {
        return new ExcelReaderBuilder();
    }

    /**
     * Build excel the read
     *
     * @param file File to read.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(File file) {
        return read(file, null, null);
    }

    /**
     * Build excel the read
     *
     * @param file         File to read.
     * @param readListener Read listener.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(File file, ReadListener readListener) {
        return read(file, null, readListener);
    }

    /**
     * Build excel the read
     *
     * @param file         File to read.
     * @param head         Annotate the class for configuration information.
     * @param readListener Read listener.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(File file, Class head, ReadListener readListener) {
        ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
        excelReaderBuilder.file(file);
        if (head != null) {
            excelReaderBuilder.head(head);
        }
        if (readListener != null) {
            excelReaderBuilder.registerReadListener(readListener);
        }
        return excelReaderBuilder;
    }

    /**
     * Build excel the read
     *
     * @param pathName File path to read.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(String pathName) {
        return read(pathName, null, null);
    }

    /**
     * Build excel the read
     *
     * @param pathName     File path to read.
     * @param readListener Read listener.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(String pathName, ReadListener readListener) {
        return read(pathName, null, readListener);
    }

    /**
     * Build excel the read
     *
     * @param pathName     File path to read.
     * @param head         Annotate the class for configuration information.
     * @param readListener Read listener.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(String pathName, Class head, ReadListener readListener) {
        ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
        excelReaderBuilder.file(pathName);
        if (head != null) {
            excelReaderBuilder.head(head);
        }
        if (readListener != null) {
            excelReaderBuilder.registerReadListener(readListener);
        }
        return excelReaderBuilder;
    }

    /**
     * Build excel the read
     *
     * @param inputStream Input stream to read.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(InputStream inputStream) {
        return read(inputStream, null, null);
    }

    /**
     * Build excel the read
     *
     * @param inputStream  Input stream to read.
     * @param readListener Read listener.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(InputStream inputStream, ReadListener readListener) {
        return read(inputStream, null, readListener);
    }

    /**
     * Build excel the read
     *
     * @param inputStream  Input stream to read.
     * @param head         Annotate the class for configuration information.
     * @param readListener Read listener.
     * @return Excel reader builder.
     */
    public static ExcelReaderBuilder read(InputStream inputStream, Class head, ReadListener readListener) {
        ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
        excelReaderBuilder.file(inputStream);
        if (head != null) {
            excelReaderBuilder.head(head);
        }
        if (readListener != null) {
            excelReaderBuilder.registerReadListener(readListener);
        }
        return excelReaderBuilder;
    }

    /**
     * Build excel the 'readSheet'
     *
     * @return Excel sheet reader builder.
     */
    public static ExcelReaderSheetBuilder readSheet() {
        return readSheet(null, null);
    }

    /**
     * Build excel the 'readSheet'
     *
     * @param sheetNo Index of sheet,0 base.
     * @return Excel sheet reader builder.
     */
    public static ExcelReaderSheetBuilder readSheet(Integer sheetNo) {
        return readSheet(sheetNo, null);
    }

    /**
     * Build excel the 'readSheet'
     *
     * @param sheetName The name of sheet.
     * @return Excel sheet reader builder.
     */
    public static ExcelReaderSheetBuilder readSheet(String sheetName) {
        return readSheet(null, sheetName);
    }

    /**
     * Build excel the 'readSheet'
     *
     * @param sheetNo   Index of sheet,0 base.
     * @param sheetName The name of sheet.
     * @return Excel sheet reader builder.
     */
    public static ExcelReaderSheetBuilder readSheet(Integer sheetNo, String sheetName) {
        ExcelReaderSheetBuilder excelReaderSheetBuilder = new ExcelReaderSheetBuilder();
        if (sheetNo != null) {
            excelReaderSheetBuilder.sheetNo(sheetNo);
        }
        if (sheetName != null) {
            excelReaderSheetBuilder.sheetName(sheetName);
        }
        return excelReaderSheetBuilder;
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/ExcelReader.java
================================================
package com.alibaba.excel;

import java.io.Closeable;
import java.util.Arrays;
import java.util.List;

import com.alibaba.excel.analysis.ExcelAnalyser;
import com.alibaba.excel.analysis.ExcelAnalyserImpl;
import com.alibaba.excel.analysis.ExcelReadExecutor;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.ReadWorkbook;

import lombok.extern.slf4j.Slf4j;

/**
 * Excel readers are all read in event mode.
 *
 * @author jipengfei
 */
@Slf4j
public class ExcelReader implements Closeable {

    /**
     * Analyser
     */
    private final ExcelAnalyser excelAnalyser;

    public ExcelReader(ReadWorkbook readWorkbook) {
        excelAnalyser = new ExcelAnalyserImpl(readWorkbook);
    }

    /**
     * Parse all sheet content by default
     *
     * @deprecated lease use {@link #readAll()}
     */
    @Deprecated
    public void read() {
        readAll();
    }

    /***
     * Parse all sheet content by default
     */
    public void readAll() {
        excelAnalyser.analysis(null, Boolean.TRUE);
    }

    /**
     * Parse the specified sheet,SheetNo start from 0
     *
     * @param readSheet Read sheet
     */
    public ExcelReader read(ReadSheet... readSheet) {
        return read(Arrays.asList(readSheet));
    }

    /**
     * Read multiple sheets.
     *
     * @param readSheetList
     * @return
     */
    public ExcelReader read(List<ReadSheet> readSheetList) {
        excelAnalyser.analysis(readSheetList, Boolean.FALSE);
        return this;
    }

    /**
     * Context for the entire execution process
     *
     * @return
     */
    public AnalysisContext analysisContext() {
        return excelAnalyser.analysisContext();
    }

    /**
     * Current executor
     *
     * @return
     */
    public ExcelReadExecutor excelExecutor() {
        return excelAnalyser.excelExecutor();
    }

    /**
     * @return
     * @deprecated please use {@link #analysisContext()}
     */
    @Deprecated
    public AnalysisContext getAnalysisContext() {
        return analysisContext();
    }

    /**
     * Complete the entire read file.Release the cache and close stream.
     */
    public void finish() {
        if (excelAnalyser != null) {
            excelAnalyser.finish();
        }
    }

    @Override
    public void close() {
        finish();
    }

    /**
     * Prevents calls to {@link #finish} from freeing the cache
     *
     */
    @Override
    protected void finalize() {
        try {
            finish();
        } catch (Throwable e) {
            log.warn("Destroy object failed", e);
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/ExcelWriter.java
================================================
package com.alibaba.excel;

import java.io.Closeable;
import java.util.Collection;
import java.util.function.Supplier;

import com.alibaba.excel.context.WriteContext;
import com.alibaba.excel.write.ExcelBuilder;
import com.alibaba.excel.write.ExcelBuilderImpl;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.metadata.WriteWorkbook;
import com.alibaba.excel.write.metadata.fill.FillConfig;

import lombok.extern.slf4j.Slf4j;

/**
 * Excel Writer This tool is used to write value out to Excel via POI. This object can perform the following two
 * functions.
 *
 * <pre>
 *    1. Create a new empty Excel workbook, write the value to the stream after the value is filled.
 *    2. Edit existing Excel, write the original Excel file, or write it to other places.}
 * </pre>
 *
 * @author jipengfei
 */
@Slf4j
public class ExcelWriter implements Closeable {

    private final ExcelBuilder excelBuilder;

    /**
     * Create new writer
     *
     * @param writeWorkbook
     */
    public ExcelWriter(WriteWorkbook writeWorkbook) {
        excelBuilder = new ExcelBuilderImpl(writeWorkbook);
    }

    /**
     * Write data to a sheet
     *
     * @param data       Data to be written
     * @param writeSheet Write to this sheet
     * @return this current writer
     */
    public ExcelWriter write(Collection<?> data, WriteSheet writeSheet) {
        return write(data, writeSheet, null);
    }

    /**
     * Write data to a sheet
     *
     * @param supplier   Data to be written
     * @param writeSheet Write to this sheet
     * @return this current writer
     */
    public ExcelWriter write(Supplier<Collection<?>> supplier, WriteSheet writeSheet) {
        return write(supplier.get(), writeSheet, null);
    }

    /**
     * Write value to a sheet
     *
     * @param data       Data to be written
     * @param writeSheet Write to this sheet
     * @param writeTable Write to this table
     * @return this
     */
    public ExcelWriter write(Collection<?> data, WriteSheet writeSheet, WriteTable writeTable) {
        excelBuilder.addContent(data, writeSheet, writeTable);
        return this;
    }

    /**
     * Write value to a sheet
     *
     * @param supplier   Data to be written
     * @param writeSheet Write to this sheet
     * @param writeTable Write to this table
     * @return this
     */
    public ExcelWriter write(Supplier<Collection<?>> supplier, WriteSheet writeSheet, WriteTable writeTable) {
        excelBuilder.addContent(supplier.get(), writeSheet, writeTable);
        return this;
    }

    /**
     * Fill value to a sheet
     *
     * @param data
     * @param writeSheet
     * @return
     */
    public ExcelWriter fill(Object data, WriteSheet writeSheet) {
        return fill(data, null, writeSheet);
    }

    /**
     * Fill value to a sheet
     *
     * @param data
     * @param fillConfig
     * @param writeSheet
     * @return
     */
    public ExcelWriter fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) {
        excelBuilder.fill(data, fillConfig, writeSheet);
        return this;
    }

    /**
     * Fill value to a sheet
     *
     * @param supplier
     * @param writeSheet
     * @return
     */
    public ExcelWriter fill(Supplier<Object> supplier, WriteSheet writeSheet) {
        return fill(supplier.get(), null, writeSheet);
    }

    /**
     * Fill value to a sheet
     *
     * @param supplier
     * @param fillConfig
     * @param writeSheet
     * @return
     */
    public ExcelWriter fill(Supplier<Object> supplier, FillConfig fillConfig, WriteSheet writeSheet) {
        excelBuilder.fill(supplier.get(), fillConfig, writeSheet);
        return this;
    }

    /**
     * Close IO
     */
    public void finish() {
        if (excelBuilder != null) {
            excelBuilder.finish(false);
        }
    }

    /**
     * The context of the entire writing process
     *
     * @return
     */
    public WriteContext writeContext() {
        return excelBuilder.writeContext();
    }

    @Override
    public void close() {
        finish();
    }

    /**
     * Prevents calls to {@link #finish} from freeing the cache
     */
    @Override
    protected void finalize() {
        try {
            finish();
        } catch (Throwable e) {
            log.warn("Destroy object failed", e);
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
================================================
package com.alibaba.excel.analysis;

import java.util.List;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.metadata.ReadSheet;

/**
 * Excel file analyser
 *
 * @author jipengfei
 */
public interface ExcelAnalyser {
    /**
     * parse the sheet
     *
     * @param readSheetList
     *            Which sheets you need to read.
     * @param readAll
     *            The <code>readSheetList</code> parameter is ignored, and all sheets are read.
     */
    void analysis(List<ReadSheet> readSheetList, Boolean readAll);

    /**
     * Complete the entire read file.Release the cache and close stream
     */
    void finish();

    /**
     * Acquisition excel executor
     *
     * @return Excel file Executor
     */
    ExcelReadExecutor excelExecutor();

    /**
     * get the analysis context.
     *
     * @return analysis context
     */
    AnalysisContext analysisContext();

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
================================================
package com.alibaba.excel.analysis;

import com.alibaba.excel.analysis.csv.CsvExcelReadExecutor;
import com.alibaba.excel.analysis.v03.XlsSaxAnalyser;
import com.alibaba.excel.analysis.v07.XlsxSaxAnalyser;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.context.csv.CsvReadContext;
import com.alibaba.excel.context.csv.DefaultCsvReadContext;
import com.alibaba.excel.context.xls.DefaultXlsReadContext;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.context.xlsx.DefaultXlsxReadContext;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.exception.ExcelAnalysisStopException;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.ReadWorkbook;
import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.util.ClassUtils;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.NumberDataFormatterUtils;
import com.alibaba.excel.util.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.poifs.crypt.Decryptor;
import org.apache.poi.poifs.filesystem.DocumentFactoryHelper;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.InputStream;
import java.util.List;

/**
 * @author jipengfei
 */
public class ExcelAnalyserImpl implements ExcelAnalyser {
    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelAnalyserImpl.class);

    private AnalysisContext analysisContext;

    private ExcelReadExecutor excelReadExecutor;
    /**
     * Prevent multiple shutdowns
     */
    private boolean finished = false;

    public ExcelAnalyserImpl(ReadWorkbook readWorkbook) {
        try {
            choiceExcelExecutor(readWorkbook);
        } catch (RuntimeException e) {
            finish();
            throw e;
        } catch (Throwable e) {
            finish();
            throw new ExcelAnalysisException(e);
        }
    }

    private void choiceExcelExecutor(ReadWorkbook readWorkbook) throws Exception {
        ExcelTypeEnum excelType = ExcelTypeEnum.valueOf(readWorkbook);
        switch (excelType) {
            case XLS:
                POIFSFileSystem poifsFileSystem;
                if (readWorkbook.getFile() != null) {
                    poifsFileSystem = new POIFSFileSystem(readWorkbook.getFile());
                } else {
                    poifsFileSystem = new POIFSFileSystem(readWorkbook.getInputStream());
                }
                // So in encrypted excel, it looks like XLS but it's actually XLSX
                if (poifsFileSystem.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
                    InputStream decryptedStream = null;
                    try {
                        decryptedStream = DocumentFactoryHelper
                            .getDecryptedStream(poifsFileSystem.getRoot().getFileSystem(), readWorkbook.getPassword());
                        XlsxReadContext xlsxReadContext = new DefaultXlsxReadContext(readWorkbook, ExcelTypeEnum.XLSX);
                        analysisContext = xlsxReadContext;
                        excelReadExecutor = new XlsxSaxAnalyser(xlsxReadContext, decryptedStream);
                        return;
                    } finally {
                        IOUtils.closeQuietly(decryptedStream);
                        // as we processed the full stream already, we can close the filesystem here
                        // otherwise file handles are leaked
                        poifsFileSystem.close();
                    }
                }
                if (readWorkbook.getPassword() != null) {
                    Biff8EncryptionKey.setCurrentUserPassword(readWorkbook.getPassword());
                }
                XlsReadContext xlsReadContext = new DefaultXlsReadContext(readWorkbook, ExcelTypeEnum.XLS);
                xlsReadContext.xlsReadWorkbookHolder().setPoifsFileSystem(poifsFileSystem);
                analysisContext = xlsReadContext;
                excelReadExecutor = new XlsSaxAnalyser(xlsReadContext);
                break;
            case XLSX:
                XlsxReadContext xlsxReadContext = new DefaultXlsxReadContext(readWorkbook, ExcelTypeEnum.XLSX);
                analysisContext = xlsxReadContext;
                excelReadExecutor = new XlsxSaxAnalyser(xlsxReadContext, null);
                break;
            case CSV:
                CsvReadContext csvReadContext = new DefaultCsvReadContext(readWorkbook, ExcelTypeEnum.CSV);
                analysisContext = csvReadContext;
                excelReadExecutor = new CsvExcelReadExecutor(csvReadContext);
                break;
            default:
                break;
        }
    }

    @Override
    public void analysis(List<ReadSheet> readSheetList, Boolean readAll) {
        try {
            if (!readAll && CollectionUtils.isEmpty(readSheetList)) {
                throw new IllegalArgumentException("Specify at least one read sheet.");
            }
            analysisContext.readWorkbookHolder().setParameterSheetDataList(readSheetList);
            analysisContext.readWorkbookHolder().setReadAll(readAll);
            try {
                excelReadExecutor.execute();
            } catch (ExcelAnalysisStopException e) {
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug("Custom stop!");
                }
            }
        } catch (RuntimeException e) {
            finish();
            throw e;
        } catch (Throwable e) {
            finish();
            throw new ExcelAnalysisException(e);
        }
    }

    @Override
    public void finish() {
        if (finished) {
            return;
        }
        finished = true;
        if (analysisContext == null || analysisContext.readWorkbookHolder() == null) {
            return;
        }
        ReadWorkbookHolder readWorkbookHolder = analysisContext.readWorkbookHolder();

        Throwable throwable = null;

        try {
            if (readWorkbookHolder.getReadCache() != null) {
                readWorkbookHolder.getReadCache().destroy();
            }
        } catch (Throwable t) {
            throwable = t;
        }
        try {
            if ((readWorkbookHolder instanceof XlsxReadWorkbookHolder)
                && ((XlsxReadWorkbookHolder) readWorkbookHolder).getOpcPackage() != null) {
                ((XlsxReadWorkbookHolder) readWorkbookHolder).getOpcPackage().revert();
            }
        } catch (Throwable t) {
            throwable = t;
        }
        try {
            if ((readWorkbookHolder instanceof XlsReadWorkbookHolder)
                && ((XlsReadWorkbookHolder) readWorkbookHolder).getPoifsFileSystem() != null) {
                ((XlsReadWorkbookHolder) readWorkbookHolder).getPoifsFileSystem().close();
            }
        } catch (Throwable t) {
            throwable = t;
        }

        // close csv.
        // https://github.com/alibaba/easyexcel/issues/2309
        try {
            if ((readWorkbookHolder instanceof CsvReadWorkbookHolder)
                && ((CsvReadWorkbookHolder) readWorkbookHolder).getCsvParser() != null
                && analysisContext.readWorkbookHolder().getAutoCloseStream()) {
                ((CsvReadWorkbookHolder) readWorkbookHolder).getCsvParser().close();
            }
        } catch (Throwable t) {
            throwable = t;
        }

        try {
            if (analysisContext.readWorkbookHolder().getAutoCloseStream()
                && readWorkbookHolder.getInputStream() != null) {
                readWorkbookHolder.getInputStream().close();
            }
        } catch (Throwable t) {
            throwable = t;
        }
        try {
            if (readWorkbookHolder.getTempFile() != null) {
                FileUtils.delete(readWorkbookHolder.getTempFile());
            }
        } catch (Throwable t) {
            throwable = t;
        }

        clearEncrypt03();

        removeThreadLocalCache();

        if (throwable != null) {
            throw new ExcelAnalysisException("Can not close IO.", throwable);
        }
    }

    private void removeThreadLocalCache() {
        NumberDataFormatterUtils.removeThreadLocalCache();
        DateUtils.removeThreadLocalCache();
        ClassUtils.removeThreadLocalCache();
    }

    private void clearEncrypt03() {
        if (StringUtils.isEmpty(analysisContext.readWorkbookHolder().getPassword())
            || !ExcelTypeEnum.XLS.equals(analysisContext.readWorkbookHolder().getExcelType())) {
            return;
        }
        Biff8EncryptionKey.setCurrentUserPassword(null);
    }

    @Override
    public ExcelReadExecutor excelExecutor() {
        return excelReadExecutor;
    }

    @Override
    public AnalysisContext analysisContext() {
        return analysisContext;
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java
================================================
package com.alibaba.excel.analysis;

import java.util.List;

import com.alibaba.excel.read.metadata.ReadSheet;

/**
 * Excel file Executor
 *
 * @author Jiaju Zhuang
 */
public interface ExcelReadExecutor {

    /**
     * Returns the actual sheet in excel
     *
     * @return Actual sheet in excel
     */
    List<ReadSheet> sheetList();

    /**
     * Read the sheet.
     */
    void execute();
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java
================================================
package com.alibaba.excel.analysis.csv;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.excel.analysis.ExcelReadExecutor;
import com.alibaba.excel.context.csv.CsvReadContext;
import com.alibaba.excel.enums.ByteOrderMarkEnum;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.exception.ExcelAnalysisStopException;
import com.alibaba.excel.exception.ExcelAnalysisStopSheetException;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder;
import com.alibaba.excel.util.SheetUtils;
import com.alibaba.excel.util.StringUtils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.io.input.BOMInputStream;

/**
 * read executor
 *
 * @author zhuangjiaju
 */
@Slf4j
public class CsvExcelReadExecutor implements ExcelReadExecutor {

    private final List<ReadSheet> sheetList;
    private final CsvReadContext csvReadContext;

    public CsvExcelReadExecutor(CsvReadContext csvReadContext) {
        this.csvReadContext = csvReadContext;
        sheetList = new ArrayList<>();
        ReadSheet readSheet = new ReadSheet();
        sheetList.add(readSheet);
        readSheet.setSheetNo(0);
    }

    @Override
    public List<ReadSheet> sheetList() {
        return sheetList;
    }

    @Override
    public void execute() {
        CSVParser csvParser;
        try {
            csvParser = csvParser();
            csvReadContext.csvReadWorkbookHolder().setCsvParser(csvParser);
        } catch (IOException e) {
            throw new ExcelAnalysisException(e);
        }
        for (ReadSheet readSheet : sheetList) {
            readSheet = SheetUtils.match(readSheet, csvReadContext);
            if (readSheet == null) {
                continue;
            }
            try {
                csvReadContext.currentSheet(readSheet);

                int rowIndex = 0;

                for (CSVRecord record : csvParser) {
                    dealRecord(record, rowIndex++);
                }
            } catch (ExcelAnalysisStopSheetException e) {
                if (log.isDebugEnabled()) {
                    log.debug("Custom stop!", e);
                }
            }

            // The last sheet is read
            csvReadContext.analysisEventProcessor().endSheet(csvReadContext);
        }
    }

    private CSVParser csvParser() throws IOException {
        CsvReadWorkbookHolder csvReadWorkbookHolder = csvReadContext.csvReadWorkbookHolder();
        CSVFormat csvFormat = csvReadWorkbookHolder.getCsvFormat();
        ByteOrderMarkEnum byteOrderMark = ByteOrderMarkEnum.valueOfByCharsetName(
            csvReadContext.csvReadWorkbookHolder().getCharset().name());
        if (csvReadWorkbookHolder.getMandatoryUseInputStream()) {
            return buildCsvParser(csvFormat, csvReadWorkbookHolder.getInputStream(), byteOrderMark);
        }
        if (csvReadWorkbookHolder.getFile() != null) {
            return buildCsvParser(csvFormat, Files.newInputStream(csvReadWorkbookHolder.getFile().toPath()),
                byteOrderMark);
        }
        return buildCsvParser(csvFormat, csvReadWorkbookHolder.getInputStream(), byteOrderMark);
    }

    private CSVParser buildCsvParser(CSVFormat csvFormat, InputStream inputStream, ByteOrderMarkEnum byteOrderMark)
        throws IOException {
        if (byteOrderMark == null) {
            return csvFormat.parse(
                new InputStreamReader(inputStream, csvReadContext.csvReadWorkbookHolder().getCharset()));
        }
        return csvFormat.parse(new InputStreamReader(new BOMInputStream(inputStream, byteOrderMark.getByteOrderMark()),
            csvReadContext.csvReadWorkbookHolder().getCharset()));
    }

    private void dealRecord(CSVRecord record, int rowIndex) {
        Map<Integer, Cell> cellMap = new LinkedHashMap<>();
        Iterator<String> cellIterator = record.iterator();
        int columnIndex = 0;
        Boolean autoTrim = csvReadContext.currentReadHolder().globalConfiguration().getAutoTrim();
        while (cellIterator.hasNext()) {
            String cellString = cellIterator.next();
            ReadCellData<String> readCellData = new ReadCellData<>();
            readCellData.setRowIndex(rowIndex);
            readCellData.setColumnIndex(columnIndex);

            // csv is an empty string of whether <code>,,</code> is read or <code>,"",</code>
            if (StringUtils.isNotBlank(cellString)) {
                readCellData.setType(CellDataTypeEnum.STRING);
                readCellData.setStringValue(autoTrim ? cellString.trim() : cellString);
            } else {
                readCellData.setType(CellDataTypeEnum.EMPTY);
            }
            cellMap.put(columnIndex++, readCellData);
        }

        RowTypeEnum rowType = MapUtils.isEmpty(cellMap) ? RowTypeEnum.EMPTY : RowTypeEnum.DATA;
        ReadRowHolder readRowHolder = new ReadRowHolder(rowIndex, rowType,
            csvReadContext.readWorkbookHolder().getGlobalConfiguration(), cellMap);
        csvReadContext.readRowHolder(readRowHolder);

        csvReadContext.csvReadSheetHolder().setCellMap(cellMap);
        csvReadContext.csvReadSheetHolder().setRowIndex(rowIndex);
        csvReadContext.analysisEventProcessor().endRow(csvReadContext);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03;

/**
 * Need to ignore the current handler without reading the current sheet.
 *
 * @author Jiaju Zhuang
 */
public interface IgnorableXlsRecordHandler extends XlsRecordHandler {}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java
================================================
package com.alibaba.excel.analysis.v03;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder;
import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.handlers.BofRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.BoundSheetRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.exception.ExcelAnalysisException;

/**
 * In some cases, you need to know the number of sheets in advance and only read the file once in advance.
 *
 * @author Jiaju Zhuang
 */
public class XlsListSheetListener implements HSSFListener {
    private final XlsReadContext xlsReadContext;
    private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>();

    static {
        XLS_RECORD_HANDLER_MAP.put(BOFRecord.sid, new BofRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(BoundSheetRecord.sid, new BoundSheetRecordHandler());
    }

    public XlsListSheetListener(XlsReadContext xlsReadContext) {
        this.xlsReadContext = xlsReadContext;
        xlsReadContext.xlsReadWorkbookHolder().setNeedReadSheet(Boolean.FALSE);
    }

    @Override
    public void processRecord(Record record) {
        XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid());
        if (handler == null) {
            return;
        }
        handler.processRecord(xlsReadContext, record);
    }

    public void execute() {
        MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
        HSSFListener formatListener = new FormatTrackingHSSFListener(listener);
        HSSFEventFactory factory = new HSSFEventFactory();
        HSSFRequest request = new HSSFRequest();
        EventWorkbookBuilder.SheetRecordCollectingListener workbookBuildingListener =
            new EventWorkbookBuilder.SheetRecordCollectingListener(formatListener);
        request.addListenerForAllRecords(workbookBuildingListener);
        try {
            factory.processWorkbookEvents(request, xlsReadContext.xlsReadWorkbookHolder().getPoifsFileSystem());
        } catch (IOException e) {
            throw new ExcelAnalysisException(e);
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03;

import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.context.xls.XlsReadContext;

/**
 * Intercepts handle xls reads.
 *
 * @author Dan Zheng
 */
public interface XlsRecordHandler {
    /**
     * Whether to support
     *
     * @param xlsReadContext
     * @param record
     * @return
     */
    boolean support(XlsReadContext xlsReadContext, Record record);

    /**
     * Processing record
     *
     * @param xlsReadContext
     * @param record
     */
    void processRecord(XlsReadContext xlsReadContext, Record record);
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
================================================
package com.alibaba.excel.analysis.v03;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder;
import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BlankRecord;
import org.apache.poi.hssf.record.BoolErrRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.EOFRecord;
import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.HyperlinkRecord;
import org.apache.poi.hssf.record.IndexRecord;
import org.apache.poi.hssf.record.LabelRecord;
import org.apache.poi.hssf.record.LabelSSTRecord;
import org.apache.poi.hssf.record.MergeCellsRecord;
import org.apache.poi.hssf.record.NoteRecord;
import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.ObjRecord;
import org.apache.poi.hssf.record.RKRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SSTRecord;
import org.apache.poi.hssf.record.StringRecord;
import org.apache.poi.hssf.record.TextObjectRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.excel.analysis.ExcelReadExecutor;
import com.alibaba.excel.analysis.v03.handlers.BlankRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.BofRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.BoolErrRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.BoundSheetRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.DummyRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.EofRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.FormulaRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.HyperlinkRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.IndexRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.LabelRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.LabelSstRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.MergeCellsRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.NoteRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.NumberRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.ObjRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.RkRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.SstRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.StringRecordHandler;
import com.alibaba.excel.analysis.v03.handlers.TextObjectRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.exception.ExcelAnalysisStopException;
import com.alibaba.excel.exception.ExcelAnalysisStopSheetException;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder;

/**
 * A text extractor for Excel files.
 * <p>
 * Returns the textual content of the file, suitable for indexing by something like Lucene, but not really intended for
 * display to the user.
 * </p>
 *
 * <p>
 * To turn an excel file into a CSV or similar, then see the XLS2CSVmra example
 * </p>
 *
 *
 * @author jipengfei
 * @see <a href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java">XLS2CSVmra</a>
 */
@Slf4j
public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {

    private static final Logger LOGGER = LoggerFactory.getLogger(XlsSaxAnalyser.class);
    private static final short DUMMY_RECORD_SID = -1;
    private final XlsReadContext xlsReadContext;
    private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32);

    static {
        XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(BOFRecord.sid, new BofRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(BoolErrRecord.sid, new BoolErrRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(BoundSheetRecord.sid, new BoundSheetRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(DUMMY_RECORD_SID, new DummyRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(EOFRecord.sid, new EofRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(FormulaRecord.sid, new FormulaRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(HyperlinkRecord.sid, new HyperlinkRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(IndexRecord.sid, new IndexRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(LabelRecord.sid, new LabelRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(LabelSSTRecord.sid, new LabelSstRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(MergeCellsRecord.sid, new MergeCellsRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(NoteRecord.sid, new NoteRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(NumberRecord.sid, new NumberRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(ObjRecord.sid, new ObjRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(RKRecord.sid, new RkRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(SSTRecord.sid, new SstRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(StringRecord.sid, new StringRecordHandler());
        XLS_RECORD_HANDLER_MAP.put(TextObjectRecord.sid, new TextObjectRecordHandler());
    }

    public XlsSaxAnalyser(XlsReadContext xlsReadContext) {
        this.xlsReadContext = xlsReadContext;
    }

    @Override
    public List<ReadSheet> sheetList() {
        try {
            if (xlsReadContext.readWorkbookHolder().getActualSheetDataList() == null) {
                new XlsListSheetListener(xlsReadContext).execute();
            }
        } catch (ExcelAnalysisStopException e) {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Custom stop!");
            }
        }
        return xlsReadContext.readWorkbookHolder().getActualSheetDataList();
    }

    @Override
    public void execute() {
        XlsReadWorkbookHolder xlsReadWorkbookHolder = xlsReadContext.xlsReadWorkbookHolder();
        MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
        xlsReadWorkbookHolder.setFormatTrackingHSSFListener(new FormatTrackingHSSFListener(listener));
        EventWorkbookBuilder.SheetRecordCollectingListener workbookBuildingListener =
            new EventWorkbookBuilder.SheetRecordCollectingListener(
                xlsReadWorkbookHolder.getFormatTrackingHSSFListener());
        xlsReadWorkbookHolder.setHssfWorkbook(workbookBuildingListener.getStubHSSFWorkbook());
        HSSFEventFactory factory = new HSSFEventFactory();
        HSSFRequest request = new HSSFRequest();
        request.addListenerForAllRecords(xlsReadWorkbookHolder.getFormatTrackingHSSFListener());
        try {
            factory.processWorkbookEvents(request, xlsReadWorkbookHolder.getPoifsFileSystem());
        } catch (IOException e) {
            throw new ExcelAnalysisException(e);
        }

        // There are some special xls that do not have the terminator "[EOF]", so an additional
        xlsReadContext.analysisEventProcessor().endSheet(xlsReadContext);
    }

    @Override
    public void processRecord(Record record) {
        XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid());
        if (handler == null) {
            return;
        }
        boolean ignoreRecord =
            (handler instanceof IgnorableXlsRecordHandler) && xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord();
        if (ignoreRecord) {
            // No need to read the current sheet
            return;
        }
        if (!handler.support(xlsReadContext, record)) {
            return;
        }

        try {
            handler.processRecord(xlsReadContext, record);
        } catch (ExcelAnalysisStopSheetException e) {
            if (log.isDebugEnabled()) {
                log.debug("Custom stop!", e);
            }
            xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.TRUE);
            xlsReadContext.xlsReadWorkbookHolder().setCurrentSheetStopped(Boolean.TRUE);
        }
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.XlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;

/**
 * Abstract xls record handler
 *
 * @author Jiaju Zhuang
 **/
public abstract class AbstractXlsRecordHandler implements XlsRecordHandler {

    @Override
    public boolean support(XlsReadContext xlsReadContext, Record record) {
        return true;
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.metadata.data.ReadCellData;

import org.apache.poi.hssf.record.BlankRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class BlankRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        BlankRecord br = (BlankRecord)record;
        xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)br.getColumn(),
            ReadCellData.newEmptyInstance(br.getRow(), (int)br.getColumn()));
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.exception.ExcelAnalysisStopException;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder;
import com.alibaba.excel.util.SheetUtils;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class BofRecordHandler extends AbstractXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        BOFRecord br = (BOFRecord) record;
        XlsReadWorkbookHolder xlsReadWorkbookHolder = xlsReadContext.xlsReadWorkbookHolder();
        if (br.getType() == BOFRecord.TYPE_WORKBOOK) {
            xlsReadWorkbookHolder.setReadSheetIndex(null);
            xlsReadWorkbookHolder.setIgnoreRecord(Boolean.FALSE);
            return;
        }
        if (br.getType() != BOFRecord.TYPE_WORKSHEET) {
            return;
        }
        // Init read sheet Data
        initReadSheetDataList(xlsReadWorkbookHolder);
        Integer readSheetIndex = xlsReadWorkbookHolder.getReadSheetIndex();
        if (readSheetIndex == null) {
            readSheetIndex = 0;
            xlsReadWorkbookHolder.setReadSheetIndex(readSheetIndex);
        }
        ReadSheet actualReadSheet = xlsReadWorkbookHolder.getActualSheetDataList().get(readSheetIndex);
        assert actualReadSheet != null : "Can't find the sheet.";
        // Copy the parameter to the current sheet
        ReadSheet readSheet = SheetUtils.match(actualReadSheet, xlsReadContext);
        if (readSheet != null) {
            xlsReadContext.currentSheet(readSheet);
            xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.FALSE);
        } else {
            xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.TRUE);
        }
        xlsReadContext.xlsReadWorkbookHolder().setCurrentSheetStopped(Boolean.FALSE);
        // Go read the next one
        xlsReadWorkbookHolder.setReadSheetIndex(xlsReadWorkbookHolder.getReadSheetIndex() + 1);
    }

    private void initReadSheetDataList(XlsReadWorkbookHolder xlsReadWorkbookHolder) {
        if (xlsReadWorkbookHolder.getActualSheetDataList() != null) {
            return;
        }
        BoundSheetRecord[] boundSheetRecords =
            BoundSheetRecord.orderByBofPosition(xlsReadWorkbookHolder.getBoundSheetRecordList());
        List<ReadSheet> readSheetDataList = new ArrayList<ReadSheet>();
        for (int i = 0; i < boundSheetRecords.length; i++) {
            BoundSheetRecord boundSheetRecord = boundSheetRecords[i];
            ReadSheet readSheet = new ReadSheet(i, boundSheetRecord.getSheetname());
            readSheetDataList.add(readSheet);
        }
        xlsReadWorkbookHolder.setActualSheetDataList(readSheetDataList);
        // Just need to get the list of sheets
        if (!xlsReadWorkbookHolder.getNeedReadSheet()) {
            throw new ExcelAnalysisStopException("Just need to get the list of sheets.");
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.data.ReadCellData;

import org.apache.poi.hssf.record.BoolErrRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class BoolErrRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        BoolErrRecord ber = (BoolErrRecord)record;
        xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)ber.getColumn(),
            ReadCellData.newInstance(ber.getBooleanValue(), ber.getRow(), (int)ber.getColumn()));
        xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class BoundSheetRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        BoundSheetRecord bsr = (BoundSheetRecord)record;
        xlsReadContext.xlsReadWorkbookHolder().getBoundSheetRecordList().add(bsr);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import java.util.LinkedHashMap;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder;

import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class DummyRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        XlsReadSheetHolder xlsReadSheetHolder = xlsReadContext.xlsReadSheetHolder();
        if (record instanceof LastCellOfRowDummyRecord) {
            // End of this row
            LastCellOfRowDummyRecord lcrdr = (LastCellOfRowDummyRecord)record;
            xlsReadSheetHolder.setRowIndex(lcrdr.getRow());
            xlsReadContext.readRowHolder(new ReadRowHolder(lcrdr.getRow(), xlsReadSheetHolder.getTempRowType(),
                xlsReadContext.readSheetHolder().getGlobalConfiguration(), xlsReadSheetHolder.getCellMap()));
            xlsReadContext.analysisEventProcessor().endRow(xlsReadContext);
            xlsReadSheetHolder.setCellMap(new LinkedHashMap<Integer, Cell>());
            xlsReadSheetHolder.setTempRowType(RowTypeEnum.EMPTY);
        } else if (record instanceof MissingCellDummyRecord) {
            MissingCellDummyRecord mcdr = (MissingCellDummyRecord)record;
            // https://github.com/alibaba/easyexcel/issues/2236
            // Some abnormal XLS, in the case of data already exist, or there will be a "MissingCellDummyRecord"
            // records, so if the existing data, empty data is ignored
            xlsReadSheetHolder.getCellMap().putIfAbsent(mcdr.getColumn(),
                ReadCellData.newEmptyInstance(mcdr.getRow(), mcdr.getColumn()));
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import java.util.LinkedHashMap;

import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder;
import com.alibaba.excel.util.BooleanUtils;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class EofRecordHandler extends AbstractXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        if (xlsReadContext.readSheetHolder() == null) {
            return;
        }

        //Represents the current sheet does not need to be read or the user manually stopped reading the sheet.
        if (BooleanUtils.isTrue(xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord())) {
            // When the user manually stops reading the sheet, the method to end the sheet needs to be called.
            if (BooleanUtils.isTrue(xlsReadContext.xlsReadWorkbookHolder().getCurrentSheetStopped())) {
                xlsReadContext.analysisEventProcessor().endSheet(xlsReadContext);
            }
            return;
        }

        // Sometimes tables lack the end record of the last column
        if (!xlsReadContext.xlsReadSheetHolder().getCellMap().isEmpty()) {
            XlsReadSheetHolder xlsReadSheetHolder = xlsReadContext.xlsReadSheetHolder();
            // Forge a termination data
            xlsReadContext.readRowHolder(new ReadRowHolder(xlsReadContext.xlsReadSheetHolder().getRowIndex() + 1,
                xlsReadSheetHolder.getTempRowType(),
                xlsReadContext.readSheetHolder().getGlobalConfiguration(), xlsReadSheetHolder.getCellMap()));
            xlsReadContext.analysisEventProcessor().endRow(xlsReadContext);
            xlsReadSheetHolder.setCellMap(new LinkedHashMap<Integer, Cell>());
            xlsReadSheetHolder.setTempRowType(RowTypeEnum.EMPTY);
        }

        xlsReadContext.analysisEventProcessor().endSheet(xlsReadContext);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import java.math.BigDecimal;
import java.util.Map;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.constant.BuiltinFormats;
import com.alibaba.excel.constant.EasyExcelConstants;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.metadata.data.DataFormatData;
import com.alibaba.excel.metadata.data.FormulaData;
import com.alibaba.excel.metadata.data.ReadCellData;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.ss.usermodel.CellType;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
@Slf4j
public class FormulaRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    private static final String ERROR = "#VALUE!";

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        FormulaRecord frec = (FormulaRecord)record;
        Map<Integer, Cell> cellMap = xlsReadContext.xlsReadSheetHolder().getCellMap();
        ReadCellData<?> tempCellData = new ReadCellData<>();
        tempCellData.setRowIndex(frec.getRow());
        tempCellData.setColumnIndex((int)frec.getColumn());
        CellType cellType = CellType.forInt(frec.getCachedResultType());
        String formulaValue = null;
        try {
            formulaValue = HSSFFormulaParser.toFormulaString(xlsReadContext.xlsReadWorkbookHolder().getHssfWorkbook(),
                frec.getParsedExpression());
        } catch (Exception e) {
            log.debug("Get formula value error.", e);
        }
        FormulaData formulaData = new FormulaData();
        formulaData.setFormulaValue(formulaValue);
        tempCellData.setFormulaData(formulaData);
        xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
        switch (cellType) {
            case STRING:
                // Formula result is a string
                // This is stored in the next record
                tempCellData.setType(CellDataTypeEnum.STRING);
                xlsReadContext.xlsReadSheetHolder().setTempCellData(tempCellData);
                break;
            case NUMERIC:
                tempCellData.setType(CellDataTypeEnum.NUMBER);
                tempCellData.setOriginalNumberValue(BigDecimal.valueOf(frec.getValue()));
                tempCellData.setNumberValue(
                    tempCellData.getOriginalNumberValue().round(EasyExcelConstants.EXCEL_MATH_CONTEXT));
                int dataFormat =
                    xlsReadContext.xlsReadWorkbookHolder().getFormatTrackingHSSFListener().getFormatIndex(frec);
                DataFormatData dataFormatData = new DataFormatData();
                dataFormatData.setIndex((short)dataFormat);
                dataFormatData.setFormat(BuiltinFormats.getBuiltinFormat(dataFormatData.getIndex(),
                    xlsReadContext.xlsReadWorkbookHolder().getFormatTrackingHSSFListener().getFormatString(frec),
                    xlsReadContext.readSheetHolder().getGlobalConfiguration().getLocale()));
                tempCellData.setDataFormatData(dataFormatData);
                cellMap.put((int)frec.getColumn(), tempCellData);
                break;
            case ERROR:
                tempCellData.setType(CellDataTypeEnum.ERROR);
                tempCellData.setStringValue(ERROR);
                cellMap.put((int)frec.getColumn(), tempCellData);
                break;
            case BOOLEAN:
                tempCellData.setType(CellDataTypeEnum.BOOLEAN);
                tempCellData.setBooleanValue(frec.getCachedBooleanValue());
                cellMap.put((int)frec.getColumn(), tempCellData);
                break;
            default:
                tempCellData.setType(CellDataTypeEnum.EMPTY);
                cellMap.put((int)frec.getColumn(), tempCellData);
                break;
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.HyperlinkRecord;
import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.metadata.CellExtra;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class HyperlinkRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    @Override
    public boolean support(XlsReadContext xlsReadContext, Record record) {
        return xlsReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.HYPERLINK);
    }

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        HyperlinkRecord hr = (HyperlinkRecord)record;
        CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.HYPERLINK, hr.getAddress(), hr.getFirstRow(),
            hr.getLastRow(), hr.getFirstColumn(), hr.getLastColumn());
        xlsReadContext.xlsReadSheetHolder().setCellExtra(cellExtra);
        xlsReadContext.analysisEventProcessor().extra(xlsReadContext);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.IndexRecord;
import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;

/**
 * Record handler
 *
 * @author Jiaju Zhuang
 */
public class IndexRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        if (xlsReadContext.readSheetHolder() == null) {
            return;
        }
        xlsReadContext.readSheetHolder().setApproximateTotalRowNumber(((IndexRecord)record).getLastRowAdd1());
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.data.ReadCellData;

import org.apache.poi.hssf.record.LabelRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class LabelRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        LabelRecord lrec = (LabelRecord)record;
        String data = lrec.getValue();
        if (data != null && xlsReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) {
            data = data.trim();
        }
        xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)lrec.getColumn(),
            ReadCellData.newInstance(data, lrec.getRow(), (int)lrec.getColumn()));
        xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import java.util.Map;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.cache.ReadCache;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.metadata.data.ReadCellData;

import org.apache.poi.hssf.record.LabelSSTRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class LabelSstRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        LabelSSTRecord lsrec = (LabelSSTRecord)record;
        ReadCache readCache = xlsReadContext.readWorkbookHolder().getReadCache();
        Map<Integer, Cell> cellMap = xlsReadContext.xlsReadSheetHolder().getCellMap();
        if (readCache == null) {
            cellMap.put((int)lsrec.getColumn(), ReadCellData.newEmptyInstance(lsrec.getRow(), (int)lsrec.getColumn()));
            return;
        }
        String data = readCache.get(lsrec.getSSTIndex());
        if (data == null) {
            cellMap.put((int)lsrec.getColumn(), ReadCellData.newEmptyInstance(lsrec.getRow(), (int)lsrec.getColumn()));
            return;
        }
        if (xlsReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) {
            data = data.trim();
        }
        cellMap.put((int)lsrec.getColumn(), ReadCellData.newInstance(data, lsrec.getRow(), (int)lsrec.getColumn()));
        xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.MergeCellsRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.ss.util.CellRangeAddress;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.metadata.CellExtra;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class MergeCellsRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public boolean support(XlsReadContext xlsReadContext, Record record) {
        return xlsReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.MERGE);
    }

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        MergeCellsRecord mcr = (MergeCellsRecord)record;
        for (int i = 0; i < mcr.getNumAreas(); i++) {
            CellRangeAddress cellRangeAddress = mcr.getAreaAt(i);
            CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.MERGE, null, cellRangeAddress.getFirstRow(),
                cellRangeAddress.getLastRow(), cellRangeAddress.getFirstColumn(), cellRangeAddress.getLastColumn());
            xlsReadContext.xlsReadSheetHolder().setCellExtra(cellExtra);
            xlsReadContext.analysisEventProcessor().extra(xlsReadContext);
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.NoteRecord;
import org.apache.poi.hssf.record.Record;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.metadata.CellExtra;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class NoteRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public boolean support(XlsReadContext xlsReadContext, Record record) {
        return xlsReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT);
    }

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        NoteRecord nr = (NoteRecord)record;
        String text = xlsReadContext.xlsReadSheetHolder().getObjectCacheMap().get(nr.getShapeId());
        CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.COMMENT, text, nr.getRow(), nr.getColumn());
        xlsReadContext.xlsReadSheetHolder().setCellExtra(cellExtra);
        xlsReadContext.analysisEventProcessor().extra(xlsReadContext);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import java.math.BigDecimal;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.constant.BuiltinFormats;
import com.alibaba.excel.constant.EasyExcelConstants;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.data.DataFormatData;
import com.alibaba.excel.metadata.data.ReadCellData;

import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class NumberRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        NumberRecord nr = (NumberRecord)record;
        ReadCellData<?> cellData = ReadCellData.newInstanceOriginal(BigDecimal.valueOf(nr.getValue()), nr.getRow(),
            (int)nr.getColumn());
        short dataFormat = (short)xlsReadContext.xlsReadWorkbookHolder().getFormatTrackingHSSFListener().getFormatIndex(
            nr);
        DataFormatData dataFormatData = new DataFormatData();
        dataFormatData.setIndex(dataFormat);
        dataFormatData.setFormat(BuiltinFormats.getBuiltinFormat(dataFormat,
            xlsReadContext.xlsReadWorkbookHolder().getFormatTrackingHSSFListener().getFormatString(nr),
            xlsReadContext.readSheetHolder().getGlobalConfiguration().getLocale()));
        cellData.setDataFormatData(dataFormatData);
        xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)nr.getColumn(), cellData);
        xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
import org.apache.poi.hssf.record.ObjRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SubRecord;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;

/**
 * Record handler
 *
 * @author Jiaju Zhuang
 */
public class ObjRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        ObjRecord or = (ObjRecord)record;
        for (SubRecord subRecord : or.getSubRecords()) {
            if (subRecord instanceof CommonObjectDataSubRecord) {
                CommonObjectDataSubRecord codsr = (CommonObjectDataSubRecord)subRecord;
                if (CommonObjectDataSubRecord.OBJECT_TYPE_COMMENT == codsr.getObjectType()) {
                    xlsReadContext.xlsReadSheetHolder().setTempObjectIndex(codsr.getObjectId());
                }
                break;
            }
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.metadata.data.ReadCellData;

import org.apache.poi.hssf.record.RKRecord;
import org.apache.poi.hssf.record.Record;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class RkRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        RKRecord re = (RKRecord)record;
        xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)re.getColumn(),
            ReadCellData.newEmptyInstance(re.getRow(), (int)re.getColumn()));
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SSTRecord;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.cache.XlsCache;
import com.alibaba.excel.context.xls.XlsReadContext;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class SstRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        xlsReadContext.readWorkbookHolder().setReadCache(new XlsCache((SSTRecord)record));
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.StringRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.metadata.data.CellData;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder;

/**
 * Record handler
 *
 * @author Dan Zheng
 */
public class StringRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(StringRecordHandler.class);

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        // String for formula
        StringRecord srec = (StringRecord)record;
        XlsReadSheetHolder xlsReadSheetHolder = xlsReadContext.xlsReadSheetHolder();
        CellData<?>tempCellData = xlsReadSheetHolder.getTempCellData();
        if (tempCellData == null) {
            LOGGER.warn("String type formula but no value found.");
            return;
        }
        tempCellData.setStringValue(srec.getString());
        xlsReadSheetHolder.getCellMap().put(tempCellData.getColumnIndex(), tempCellData);
        xlsReadSheetHolder.setTempCellData(null);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java
================================================
package com.alibaba.excel.analysis.v03.handlers;

import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.TextObjectRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;
import com.alibaba.excel.context.xls.XlsReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder;

/**
 * Record handler
 *
 * @author Jiaju Zhuang
 */
public class TextObjectRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(TextObjectRecordHandler.class);

    @Override
    public boolean support(XlsReadContext xlsReadContext, Record record) {
        return xlsReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT);
    }

    @Override
    public void processRecord(XlsReadContext xlsReadContext, Record record) {
        TextObjectRecord tor = (TextObjectRecord)record;
        XlsReadSheetHolder xlsReadSheetHolder = xlsReadContext.xlsReadSheetHolder();
        Integer tempObjectIndex = xlsReadSheetHolder.getTempObjectIndex();
        if (tempObjectIndex == null) {
            LOGGER.debug("tempObjectIndex is null.");
            return;
        }
        xlsReadSheetHolder.getObjectCacheMap().put(tempObjectIndex, tor.getStr().getString());
        xlsReadSheetHolder.setTempObjectIndex(null);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
================================================
package com.alibaba.excel.analysis.v07;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import com.alibaba.excel.analysis.ExcelReadExecutor;
import com.alibaba.excel.analysis.v07.handlers.sax.SharedStringsTableHandler;
import com.alibaba.excel.analysis.v07.handlers.sax.XlsxRowHandler;
import com.alibaba.excel.cache.ReadCache;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.exception.ExcelAnalysisStopException;
import com.alibaba.excel.exception.ExcelAnalysisStopSheetException;
import com.alibaba.excel.metadata.CellExtra;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.excel.util.SheetUtils;
import com.alibaba.excel.util.StringUtils;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackagePartName;
import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
import org.apache.poi.ss.util.CellAddress;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.Comments;
import org.apache.poi.xssf.model.CommentsTable;
import org.apache.poi.xssf.usermodel.XSSFComment;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

/**
 * @author jipengfei
 */
@Slf4j
public class XlsxSaxAnalyser implements ExcelReadExecutor {

    /**
     * Storage sheet SharedStrings
     */
    public static final PackagePartName SHARED_STRINGS_PART_NAME;

    static {
        try {
            SHARED_STRINGS_PART_NAME = PackagingURIHelper.createPartName("/xl/sharedStrings.xml");
        } catch (InvalidFormatException e) {
            log.error("Initialize the XlsxSaxAnalyser failure", e);
            throw new ExcelAnalysisException("Initialize the XlsxSaxAnalyser failure", e);
        }
    }

    private final XlsxReadContext xlsxReadContext;
    private final List<ReadSheet> sheetList;
    private final Map<Integer, InputStream> sheetMap;
    /**
     * excel comments key: sheetNo value: CommentsTable
     */
    private final Map<Integer, CommentsTable> commentsTableMap;

    public XlsxSaxAnalyser(XlsxReadContext xlsxReadContext, InputStream decryptedStream) throws Exception {
        this.xlsxReadContext = xlsxReadContext;
        // Initialize cache
        XlsxReadWorkbookHolder xlsxReadWorkbookHolder = xlsxReadContext.xlsxReadWorkbookHolder();

        OPCPackage pkg = readOpcPackage(xlsxReadWorkbookHolder, decryptedStream);
        xlsxReadWorkbookHolder.setOpcPackage(pkg);

        // Read the Shared information Strings
        PackagePart sharedStringsTablePackagePart = pkg.getPart(SHARED_STRINGS_PART_NAME);
        if (sharedStringsTablePackagePart != null) {
            // Specify default cache
            defaultReadCache(xlsxReadWorkbookHolder, sharedStringsTablePackagePart);

            // Analysis sharedStringsTable.xml
            analysisSharedStringsTable(sharedStringsTablePackagePart.getInputStream(), xlsxReadWorkbookHolder);
        }

        XSSFReader xssfReader = new XSSFReader(pkg);
        analysisUse1904WindowDate(xssfReader, xlsxReadWorkbookHolder);

        // set style table
        setStylesTable(xlsxReadWorkbookHolder, xssfReader);

        sheetList = new ArrayList<>();
        sheetMap = new HashMap<>();
        commentsTableMap = new HashMap<>();
        Map<Integer, PackageRelationshipCollection> packageRelationshipCollectionMap = MapUtils.newHashMap();
        xlsxReadWorkbookHolder.setPackageRelationshipCollectionMap(packageRelationshipCollectionMap);

        XSSFReader.SheetIterator ite = (XSSFReader.SheetIterator)xssfReader.getSheetsData();
        int index = 0;
        if (!ite.hasNext()) {
            throw new ExcelAnalysisException("Can not find any sheet!");
        }
        while (ite.hasNext()) {
            InputStream inputStream = ite.next();
            sheetList.add(new ReadSheet(index, ite.getSheetName()));
            sheetMap.put(index, inputStream);
            if (xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) {
                Comments comments = ite.getSheetComments();
                if (comments instanceof CommentsTable) {
                    commentsTableMap.put(index, (CommentsTable) comments);
                }
            }
            if (xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.HYPERLINK)) {
                PackageRelationshipCollection packageRelationshipCollection = Optional.ofNullable(ite.getSheetPart())
                    .map(packagePart -> {
                        try {
                            return packagePart.getRelationships();
                        } catch (InvalidFormatException e) {
                            log.warn("Reading the Relationship failed", e);
                            return null;
                        }
                    }).orElse(null);
                if (packageRelationshipCollection != null) {
                    packageRelationshipCollectionMap.put(index, packageRelationshipCollection);
                }
            }
            index++;
        }
    }

    private void setStylesTable(XlsxReadWorkbookHolder xlsxReadWorkbookHolder, XSSFReader xssfReader) {
        try {
            xlsxReadWorkbookHolder.setStylesTable(xssfReader.getStylesTable());
        } catch (Exception e) {
            log.warn(
                "Currently excel cannot get style information, but it doesn't affect the data analysis.You can try to"
                    + " save the file with office again or ignore the current error.",
                e);
        }
    }

    private void defaultReadCache(XlsxReadWorkbookHolder xlsxReadWorkbookHolder,
        PackagePart sharedStringsTablePackagePart) {
        ReadCache readCache = xlsxReadWorkbookHolder.getReadCacheSelector().readCache(sharedStringsTablePackagePart);
        xlsxReadWorkbookHolder.setReadCache(readCache);
        readCache.init(xlsxReadContext);
    }

    private void analysisUse1904WindowDate(XSSFReader xssfReader, XlsxReadWorkbookHolder xlsxReadWorkbookHolder)
        throws Exception {
        if (xlsxReadWorkbookHolder.globalConfiguration().getUse1904windowing() != null) {
            return;
        }
        InputStream workbookXml = xssfReader.getWorkbookData();
        WorkbookDocument ctWorkbook = WorkbookDocument.Factory.parse(workbookXml);
        CTWorkbook wb = ctWorkbook.getWorkbook();
        CTWorkbookPr prefix = wb.getWorkbookPr();
        if (prefix != null && prefix.getDate1904()) {
            xlsxReadWorkbookHolder.getGlobalConfiguration().setUse1904windowing(Boolean.TRUE);
        } else {
            xlsxReadWorkbookHolder.getGlobalConfiguration().setUse1904windowing(Boolean.FALSE);
        }
    }

    private void analysisSharedStringsTable(InputStream sharedStringsTableInputStream,
        XlsxReadWorkbookHolder xlsxReadWorkbookHolder) {
        ContentHandler handler = new SharedStringsTableHandler(xlsxReadWorkbookHolder.getReadCache());
        parseXmlSource(sharedStringsTableInputStream, handler);
        xlsxReadWorkbookHolder.getReadCache().putFinished();
    }

    private OPCPackage readOpcPackage(XlsxReadWorkbookHolder xlsxReadWorkbookHolder, InputStream decryptedStream)
        throws Exception {
        if (decryptedStream == null && xlsxReadWorkbookHolder.getFile() != null) {
            return OPCPackage.open(xlsxReadWorkbookHolder.getFile());
        }
        if (xlsxReadWorkbookHolder.getMandatoryUseInputStream()) {
            if (decryptedStream != null) {
                return OPCPackage.open(decryptedStream);
            } else {
                return OPCPackage.open(xlsxReadWorkbookHolder.getInputStream());
            }
        }
        File readTempFile = FileUtils.createCacheTmpFile();
        xlsxReadWorkbookHolder.setTempFile(readTempFile);
        File tempFile = new File(readTempFile.getPath(), UUID.randomUUID() + ".xlsx");
        if (decryptedStream != null) {
            FileUtils.writeToFile(tempFile, decryptedStream, false);
        } else {
            FileUtils.writeToFile(tempFile, xlsxReadWorkbookHolder.getInputStream(),
                xlsxReadWorkbookHolder.getAutoCloseStream());
        }
        return OPCPackage.open(tempFile, PackageAccess.READ);
    }

    @Override
    public List<ReadSheet> sheetList() {
        return sheetList;
    }

    private void parseXmlSource(InputStream inputStream, ContentHandler handler) {
        InputSource inputSource = new InputSource(inputStream);
        try {
            SAXParserFactory saxFactory;
            String xlsxSAXParserFactoryName = xlsxReadContext.xlsxReadWorkbookHolder().getSaxParserFactoryName();
            if (StringUtils.isEmpty(xlsxSAXParserFactoryName)) {
                saxFactory = SAXParserFactory.newInstance();
            } else {
                saxFactory = SAXParserFactory.newInstance(xlsxSAXParserFactoryName, null);
            }
            try {
                saxFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            } catch (Throwable ignore) {}
            try {
                saxFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
            } catch (Throwable ignore) {}
            try {
                saxFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
            } catch (Throwable ignore) {}
            SAXParser saxParser = saxFactory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            xmlReader.setContentHandler(handler);
            xmlReader.parse(inputSource);
            inputStream.close();
        } catch (IOException | ParserConfigurationException | SAXException e) {
            throw new ExcelAnalysisException(e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    throw new ExcelAnalysisException("Can not close 'inputStream'!");
                }
            }
        }
    }

    @Override
    public void execute() {
        for (ReadSheet readSheet : sheetList) {
            readSheet = SheetUtils.match(readSheet, xlsxReadContext);
            if (readSheet != null) {
                try {
                    xlsxReadContext.currentSheet(readSheet);
                    parseXmlSource(sheetMap.get(readSheet.getSheetNo()), new XlsxRowHandler(xlsxReadContext));
                    // Read comments
                    readComments(readSheet);
                } catch (ExcelAnalysisStopSheetException e) {
                    if (log.isDebugEnabled()) {
                        log.debug("Custom stop!", e);
                    }
                }
                // The last sheet is read
                xlsxReadContext.analysisEventProcessor().endSheet(xlsxReadContext);
            }
        }
    }

    private void readComments(ReadSheet readSheet) {
        if (!xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) {
            return;
        }
        CommentsTable commentsTable = commentsTableMap.get(readSheet.getSheetNo());
        if (commentsTable == null) {
            return;
        }
        Iterator<CellAddress> cellAddresses = commentsTable.getCellAddresses();
        while (cellAddresses.hasNext()) {
            CellAddress cellAddress = cellAddresses.next();
            XSSFComment cellComment = commentsTable.findCellComment(cellAddress);
            CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.COMMENT, cellComment.getString().toString(),
                cellAddress.getRow(), cellAddress.getColumn());
            xlsxReadContext.readSheetHolder().setCellExtra(cellExtra);
            xlsxReadContext.analysisEventProcessor().extra(xlsxReadContext);
        }
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import com.alibaba.excel.context.xlsx.XlsxReadContext;

/**
 * Cell Value Handler
 *
 * @author jipengfei
 */
public abstract class AbstractCellValueTagHandler extends AbstractXlsxTagHandler {

    @Override
    public void characters(XlsxReadContext xlsxReadContext, char[] ch, int start, int length) {
        xlsxReadContext.xlsxReadSheetHolder().getTempData().append(ch, start, length);
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import org.xml.sax.Attributes;

import com.alibaba.excel.context.xlsx.XlsxReadContext;

/**
 * Abstract tag handler
 *
 * @author Jiaju Zhuang
 */
public abstract class AbstractXlsxTagHandler implements XlsxTagHandler {
    @Override
    public boolean support(XlsxReadContext xlsxReadContext) {
        return true;
    }

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {

    }

    @Override
    public void endElement(XlsxReadContext xlsxReadContext, String name) {

    }

    @Override
    public void characters(XlsxReadContext xlsxReadContext, char[] ch, int start, int length) {

    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.metadata.data.FormulaData;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder;

import org.xml.sax.Attributes;

/**
 * Cell Handler
 *
 * @author jipengfei
 */
public class CellFormulaTagHandler extends AbstractXlsxTagHandler {

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {
        XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
        xlsxReadSheetHolder.setTempFormula(new StringBuilder());
    }

    @Override
    public void endElement(XlsxReadContext xlsxReadContext, String name) {
        XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
        FormulaData formulaData = new FormulaData();
        formulaData.setFormulaValue(xlsxReadSheetHolder.getTempFormula().toString());
        xlsxReadSheetHolder.getTempCellData().setFormulaData(formulaData);
    }

    @Override
    public void characters(XlsxReadContext xlsxReadContext, char[] ch, int start, int length) {
        xlsxReadContext.xlsxReadSheetHolder().getTempFormula().append(ch, start, length);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

/**
 * Cell inline string value handler
 *
 * @author jipengfei
 */
public class CellInlineStringValueTagHandler extends AbstractCellValueTagHandler {

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import java.math.BigDecimal;

import com.alibaba.excel.constant.EasyExcelConstants;
import com.alibaba.excel.constant.ExcelXmlConstants;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder;
import com.alibaba.excel.util.BooleanUtils;
import com.alibaba.excel.util.PositionUtils;
import com.alibaba.excel.util.StringUtils;

import org.xml.sax.Attributes;

/**
 * Cell Handler
 *
 * @author jipengfei
 */
public class CellTagHandler extends AbstractXlsxTagHandler {

    private static final int DEFAULT_FORMAT_INDEX = 0;

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {
        XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
        xlsxReadSheetHolder.setColumnIndex(PositionUtils.getCol(attributes.getValue(ExcelXmlConstants.ATTRIBUTE_R),
            xlsxReadSheetHolder.getColumnIndex()));

        // t="s" ,it means String
        // t="str" ,it means String,but does not need to be read in the 'sharedStrings.xml'
        // t="inlineStr" ,it means String,but does not need to be read in the 'sharedStrings.xml'
        // t="b" ,it means Boolean
        // t="e" ,it means Error
        // t="n" ,it means Number
        // t is null ,it means Empty or Number
        CellDataTypeEnum type = CellDataTypeEnum.buildFromCellType(attributes.getValue(ExcelXmlConstants.ATTRIBUTE_T));
        xlsxReadSheetHolder.setTempCellData(new ReadCellData<>(type));
        xlsxReadSheetHolder.setTempData(new StringBuilder());

        // Put in data transformation information
        String dateFormatIndex = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_S);
        int dateFormatIndexInteger;
        if (StringUtils.isEmpty(dateFormatIndex)) {
            dateFormatIndexInteger = DEFAULT_FORMAT_INDEX;
        } else {
            dateFormatIndexInteger = Integer.parseInt(dateFormatIndex);
        }

        xlsxReadSheetHolder.getTempCellData().setDataFormatData(
            xlsxReadContext.xlsxReadWorkbookHolder().dataFormatData(dateFormatIndexInteger));
    }

    @Override
    public void endElement(XlsxReadContext xlsxReadContext, String name) {
        XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
        ReadCellData<?> tempCellData = xlsxReadSheetHolder.getTempCellData();
        StringBuilder tempData = xlsxReadSheetHolder.getTempData();
        String tempDataString = tempData.toString();
        CellDataTypeEnum oldType = tempCellData.getType();
        switch (oldType) {
            case STRING:
                // In some cases, although cell type is a string, it may be an empty tag
                if (StringUtils.isEmpty(tempDataString)) {
                    break;
                }
                String stringValue = xlsxReadContext.readWorkbookHolder().getReadCache().get(
                    Integer.valueOf(tempDataString));
                tempCellData.setStringValue(stringValue);
                break;
            case DIRECT_STRING:
            case ERROR:
                tempCellData.setStringValue(tempDataString);
                tempCellData.setType(CellDataTypeEnum.STRING);
                break;
            case BOOLEAN:
                if (StringUtils.isEmpty(tempDataString)) {
                    tempCellData.setType(CellDataTypeEnum.EMPTY);
                    break;
                }
                tempCellData.setBooleanValue(BooleanUtils.valueOf(tempData.toString()));
                break;
            case NUMBER:
            case EMPTY:
                if (StringUtils.isEmpty(tempDataString)) {
                    tempCellData.setType(CellDataTypeEnum.EMPTY);
                    break;
                }
                tempCellData.setType(CellDataTypeEnum.NUMBER);
                tempCellData.setOriginalNumberValue(new BigDecimal(tempDataString));
                tempCellData.setNumberValue(
                    tempCellData.getOriginalNumberValue().round(EasyExcelConstants.EXCEL_MATH_CONTEXT));
                break;
            default:
                throw new IllegalStateException("Cannot set values now");
        }

        if (tempCellData.getStringValue() != null
            && xlsxReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) {
            tempCellData.setStringValue(tempCellData.getStringValue().trim());
        }

        tempCellData.checkEmpty();
        tempCellData.setRowIndex(xlsxReadSheetHolder.getRowIndex());
        tempCellData.setColumnIndex(xlsxReadSheetHolder.getColumnIndex());
        xlsxReadSheetHolder.getCellMap().put(xlsxReadSheetHolder.getColumnIndex(), tempCellData);
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

/**
 * Cell Value Handler
 *
 * @author jipengfei
 */
public class CellValueTagHandler extends AbstractCellValueTagHandler {

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import com.alibaba.excel.constant.ExcelXmlConstants;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.util.PositionUtils;

import org.xml.sax.Attributes;

/**
 * Cell Handler
 *
 * @author jipengfei
 */
public class CountTagHandler extends AbstractXlsxTagHandler {

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {
        String d = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_REF);
        String totalStr = d.substring(d.indexOf(":") + 1);
        xlsxReadContext.readSheetHolder().setApproximateTotalRowNumber(PositionUtils.getRow(totalStr) + 1);
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import java.util.Optional;

import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.xml.sax.Attributes;

import com.alibaba.excel.constant.ExcelXmlConstants;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.metadata.CellExtra;
import com.alibaba.excel.util.StringUtils;

/**
 * Cell Handler
 *
 * @author Jiaju Zhuang
 */
public class HyperlinkTagHandler extends AbstractXlsxTagHandler {

    @Override
    public boolean support(XlsxReadContext xlsxReadContext) {
        return xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.HYPERLINK);
    }

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {
        String ref = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_REF);
        if (StringUtils.isEmpty(ref)) {
            return;
        }
        // Hyperlink has 2 case:
        // case 1,In the 'location' tag
        String location = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_LOCATION);
        if (location != null) {
            CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.HYPERLINK, location, ref);
            xlsxReadContext.readSheetHolder().setCellExtra(cellExtra);
            xlsxReadContext.analysisEventProcessor().extra(xlsxReadContext);
            return;
        }
        // case 2, In the 'r:id' tag, Then go to 'PackageRelationshipCollection' to get inside
        String rId = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_RID);
        PackageRelationshipCollection packageRelationshipCollection = xlsxReadContext.xlsxReadSheetHolder()
            .getPackageRelationshipCollection();
        if (rId == null || packageRelationshipCollection == null) {
            return;
        }
        Optional.ofNullable(packageRelationshipCollection.getRelationshipByID(rId))
            .map(PackageRelationship::getTargetURI)
            .ifPresent(uri -> {
                CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.HYPERLINK, uri.toString(), ref);
                xlsxReadContext.readSheetHolder().setCellExtra(cellExtra);
                xlsxReadContext.analysisEventProcessor().extra(xlsxReadContext);
            });
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import org.xml.sax.Attributes;

import com.alibaba.excel.constant.ExcelXmlConstants;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.metadata.CellExtra;
import com.alibaba.excel.util.StringUtils;

/**
 * Cell Handler
 *
 * @author Jiaju Zhuang
 */
public class MergeCellTagHandler extends AbstractXlsxTagHandler {

    @Override
    public boolean support(XlsxReadContext xlsxReadContext) {
        return xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.MERGE);
    }

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {
        String ref = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_REF);
        if (StringUtils.isEmpty(ref)) {
            return;
        }
        CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.MERGE, null, ref);
        xlsxReadContext.readSheetHolder().setCellExtra(cellExtra);
        xlsxReadContext.analysisEventProcessor().extra(xlsxReadContext);
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import java.util.LinkedHashMap;

import com.alibaba.excel.constant.ExcelXmlConstants;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.enums.RowTypeEnum;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder;
import com.alibaba.excel.util.PositionUtils;

import org.apache.commons.collections4.MapUtils;
import org.xml.sax.Attributes;

/**
 * Cell Handler
 *
 * @author jipengfei
 */
public class RowTagHandler extends AbstractXlsxTagHandler {

    @Override
    public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) {
        XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
        int rowIndex = PositionUtils.getRowByRowTagt(attributes.getValue(ExcelXmlConstants.ATTRIBUTE_R),
            xlsxReadSheetHolder.getRowIndex());
        Integer lastRowIndex = xlsxReadContext.readSheetHolder().getRowIndex();
        while (lastRowIndex + 1 < rowIndex) {
            xlsxReadContext.readRowHolder(new ReadRowHolder(lastRowIndex + 1, RowTypeEnum.EMPTY,
                xlsxReadSheetHolder.getGlobalConfiguration(), new LinkedHashMap<Integer, Cell>()));
            xlsxReadContext.analysisEventProcessor().endRow(xlsxReadContext);
            xlsxReadSheetHolder.setColumnIndex(null);
            xlsxReadSheetHolder.setCellMap(new LinkedHashMap<Integer, Cell>());
            lastRowIndex++;
        }
        xlsxReadSheetHolder.setRowIndex(rowIndex);
    }

    @Override
    public void endElement(XlsxReadContext xlsxReadContext, String name) {
        XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
        RowTypeEnum rowType = MapUtils.isEmpty(xlsxReadSheetHolder.getCellMap()) ? RowTypeEnum.EMPTY : RowTypeEnum.DATA;
        // It's possible that all of the cells in the row are empty
        if (rowType == RowTypeEnum.DATA) {
            boolean hasData = false;
            for (Cell cell : xlsxReadSheetHolder.getCellMap().values()) {
                if (!(cell instanceof ReadCellData)) {
                    hasData = true;
                    break;
                }
                ReadCellData<?> readCellData = (ReadCellData<?>)cell;
                if (readCellData.getType() != CellDataTypeEnum.EMPTY) {
                    hasData = true;
                    break;
                }
            }
            if (!hasData) {
                rowType = RowTypeEnum.EMPTY;
            }
        }
        xlsxReadContext.readRowHolder(new ReadRowHolder(xlsxReadSheetHolder.getRowIndex(), rowType,
            xlsxReadSheetHolder.getGlobalConfiguration(), xlsxReadSheetHolder.getCellMap()));
        xlsxReadContext.analysisEventProcessor().endRow(xlsxReadContext);
        xlsxReadSheetHolder.setColumnIndex(null);
        xlsxReadSheetHolder.setCellMap(new LinkedHashMap<>());
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers;

import org.xml.sax.Attributes;

import com.alibaba.excel.context.xlsx.XlsxReadContext;

/**
 * Tag handler
 *
 * @author Dan Zheng
 */
public interface XlsxTagHandler {

    /**
     * Whether to support
     *
     * @param xlsxReadContext
     * @return
     */
    boolean support(XlsxReadContext xlsxReadContext);

    /**
     * Start handle
     *
     * @param xlsxReadContext
     *            xlsxReadContext
     * @param name
     *            Tag name
     * @param attributes
     *            Tag attributes
     */
    void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes);

    /**
     * End handle
     *
     * @param xlsxReadContext
     *            xlsxReadContext
     * @param name
     *            Tag name
     */
    void endElement(XlsxReadContext xlsxReadContext, String name);

    /**
     * Read data
     *
     * @param xlsxReadContext
     * @param ch
     * @param start
     * @param length
     */
    void characters(XlsxReadContext xlsxReadContext, char[] ch, int start, int length);

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java
================================================
/* ====================================================================
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
==================================================================== */

package com.alibaba.excel.analysis.v07.handlers.sax;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.alibaba.excel.cache.ReadCache;
import com.alibaba.excel.constant.ExcelXmlConstants;

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

/**
 * Sax read sharedStringsTable.xml
 *
 * @author Jiaju Zhuang
 */
public class SharedStringsTableHandler extends DefaultHandler {

    private static final Pattern UTF_PATTTERN = Pattern.compile("_x([0-9A-Fa-f]{4})_");

    /**
     * The final piece of data
     */
    private StringBuilder currentData;
    /**
     * Current element data
     */
    private StringBuilder currentElementData;

    private final ReadCache readCache;
    /**
     * Some fields in the T tag need to be ignored
     */
    private boolean ignoreTagt = false;
    /**
     * The only time you need to read the characters in the T tag is when it is used
     */
    private boolean isTagt = false;

    public SharedStringsTableHandler(ReadCache readCache) {
        this.readCache = readCache;
    }

    @Override
    public void startElement(String uri, String localName, String name, Attributes attributes) {
        if (name == null) {
            return;
        }
        switch (name) {
            case ExcelXmlConstants.SHAREDSTRINGS_T_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_X_T_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_NS2_T_TAG:
                currentElementData = null;
                isTagt = true;
                break;
            case ExcelXmlConstants.SHAREDSTRINGS_SI_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_X_SI_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_NS2_SI_TAG:
                currentData = null;
                break;
            case ExcelXmlConstants.SHAREDSTRINGS_RPH_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_X_RPH_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_NS2_RPH_TAG:
                ignoreTagt = true;
                break;
            default:
                // ignore
        }
    }

    @Override
    public void endElement(String uri, String localName, String name) {
        if (name == null) {
            return;
        }
        switch (name) {
            case ExcelXmlConstants.SHAREDSTRINGS_T_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_X_T_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_NS2_T_TAG:
                if (currentElementData != null) {
                    if (currentData == null) {
                        currentData = new StringBuilder();
                    }
                    currentData.append(currentElementData);
                }
                isTagt = false;
                break;
            case ExcelXmlConstants.SHAREDSTRINGS_SI_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_X_SI_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_NS2_SI_TAG:
                if (currentData == null) {
                    readCache.put(null);
                } else {
                    readCache.put(utfDecode(currentData.toString()));
                }
                break;
            case ExcelXmlConstants.SHAREDSTRINGS_RPH_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_X_RPH_TAG:
            case ExcelXmlConstants.SHAREDSTRINGS_NS2_RPH_TAG:
                ignoreTagt = false;
                break;
            default:
                // ignore
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) {
        if (!isTagt || ignoreTagt) {
            return;
        }
        if (currentElementData == null) {
            currentElementData = new StringBuilder();
        }
        currentElementData.append(ch, start, length);
    }

    /**
     * from poi XSSFRichTextString
     *
     * @param value the string to decode
     * @return the decoded string or null if the input string is null
     * <p>
     * For all characters which cannot be represented in XML as defined by the XML 1.0 specification,
     * the characters are escaped using the Unicode numerical character representation escape character
     * format _xHHHH_, where H represents a hexadecimal character in the character's value.
     * <p>
     * Example: The Unicode character 0D is invalid in an XML 1.0 document,
     * so it shall be escaped as <code>_x000D_</code>.
     * </p>
     * See section 3.18.9 in the OOXML spec.
     * @see org.apache.poi.xssf.usermodel.XSSFRichTextString#utfDecode(String)
     */
    static String utfDecode(String value) {
        if (value == null || !value.contains("_x")) {
            return value;
        }

        StringBuilder buf = new StringBuilder();
        Matcher m = UTF_PATTTERN.matcher(value);
        int idx = 0;
        while (m.find()) {
            int pos = m.start();
            if (pos > idx) {
                buf.append(value, idx, pos);
            }

            String code = m.group(1);
            int icode = Integer.decode("0x" + code);
            buf.append((char)icode);

            idx = m.end();
        }

        // small optimization: don't go via StringBuilder if not necessary,
        // the encodings are very rare, so we should almost always go via this shortcut.
        if (idx == 0) {
            return value;
        }

        buf.append(value.substring(idx));
        return buf.toString();
    }
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java
================================================
package com.alibaba.excel.analysis.v07.handlers.sax;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.excel.analysis.v07.handlers.CellFormulaTagHandler;
import com.alibaba.excel.analysis.v07.handlers.CellInlineStringValueTagHandler;
import com.alibaba.excel.analysis.v07.handlers.CellTagHandler;
import com.alibaba.excel.analysis.v07.handlers.CellValueTagHandler;
import com.alibaba.excel.analysis.v07.handlers.CountTagHandler;
import com.alibaba.excel.analysis.v07.handlers.HyperlinkTagHandler;
import com.alibaba.excel.analysis.v07.handlers.MergeCellTagHandler;
import com.alibaba.excel.analysis.v07.handlers.RowTagHandler;
import com.alibaba.excel.analysis.v07.handlers.XlsxTagHandler;
import com.alibaba.excel.constant.ExcelXmlConstants;
import com.alibaba.excel.context.xlsx.XlsxReadContext;

import lombok.extern.slf4j.Slf4j;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * @author jipengfei
 */
@Slf4j
public class XlsxRowHandler extends DefaultHandler {
    private final XlsxReadContext xlsxReadContext;
    private static final Map<String, XlsxTagHandler> XLSX_CELL_HANDLER_MAP = new HashMap<>(64);

    static {
        CellFormulaTagHandler cellFormulaTagHandler = new CellFormulaTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_FORMULA_TAG, cellFormulaTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_FORMULA_TAG, cellFormulaTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_FORMULA_TAG, cellFormulaTagHandler);
        CellInlineStringValueTagHandler cellInlineStringValueTagHandler = new CellInlineStringValueTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler);
        CellTagHandler cellTagHandler = new CellTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_TAG, cellTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_TAG, cellTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_TAG, cellTagHandler);
        CellValueTagHandler cellValueTagHandler = new CellValueTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_VALUE_TAG, cellValueTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_VALUE_TAG, cellValueTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_VALUE_TAG, cellValueTagHandler);
        CountTagHandler countTagHandler = new CountTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.DIMENSION_TAG, countTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_DIMENSION_TAG, countTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_DIMENSION_TAG, countTagHandler);
        HyperlinkTagHandler hyperlinkTagHandler = new HyperlinkTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.HYPERLINK_TAG, hyperlinkTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_HYPERLINK_TAG, hyperlinkTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_HYPERLINK_TAG, hyperlinkTagHandler);
        MergeCellTagHandler mergeCellTagHandler = new MergeCellTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.MERGE_CELL_TAG, mergeCellTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_MERGE_CELL_TAG, mergeCellTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_MERGE_CELL_TAG, mergeCellTagHandler);
        RowTagHandler rowTagHandler = new RowTagHandler();
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler);
        XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_ROW_TAG, rowTagHandler);
    }

    public XlsxRowHandler(XlsxReadContext xlsxReadContext) {
        this.xlsxReadContext = xlsxReadContext;
    }

    @Override
    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
        XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(name);
        if (handler == null || !handler.support(xlsxReadContext)) {
            return;
        }
        xlsxReadContext.xlsxReadSheetHolder().getTagDeque().push(name);
        handler.startElement(xlsxReadContext, name, attributes);
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        String currentTag = xlsxReadContext.xlsxReadSheetHolder().getTagDeque().peek();
        if (currentTag == null) {
            return;
        }
        XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(currentTag);
        if (handler == null || !handler.support(xlsxReadContext)) {
            return;
        }
        handler.characters(xlsxReadContext, ch, start, length);
    }

    @Override
    public void endElement(String uri, String localName, String name) throws SAXException {
        XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(name);
        if (handler == null || !handler.support(xlsxReadContext)) {
            return;
        }
        handler.endElement(xlsxReadContext, name);
        xlsxReadContext.xlsxReadSheetHolder().getTagDeque().pop();
    }

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnore.java
================================================
package com.alibaba.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Ignore convert excel
 *
 * @author Jiaju Zhuang
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ExcelIgnore {}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnoreUnannotated.java
================================================
package com.alibaba.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Ignore all unannotated fields.
 *
 * @author Jiaju Zhuang
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ExcelIgnoreUnannotated {
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelProperty.java
================================================
package com.alibaba.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.alibaba.excel.converters.AutoConverter;
import com.alibaba.excel.converters.Converter;

/**
 * @author jipengfei
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ExcelProperty {

    /**
     * The name of the sheet header.
     *
     * <p>
     * write: It automatically merges when you have more than one head
     * <p>
     * read: When you have multiple heads, take the last one
     *
     * @return The name of the sheet header
     */
    String[] value() default {""};

    /**
     * Index of column
     *
     * Read or write it on the index of column, If it's equal to -1, it's sorted by Java class.
     *
     * priority: index &gt; order &gt; default sort
     *
     * @return Index of column
     */
    int index() default -1;

    /**
     * Defines the sort order for an column.
     *
     * priority: index &gt; order &gt; default sort
     *
     * @return Order of column
     */
    int order() default Integer.MAX_VALUE;

    /**
     * Force the current field to use this converter.
     *
     * @return Converter
     */
    Class<? extends Converter<?>> converter() default AutoConverter.class;

    /**
     *
     * default @see com.alibaba.excel.util.TypeUtil if default is not meet you can set format
     *
     * @return Format string
     * @deprecated please use {@link com.alibaba.excel.annotation.format.DateTimeFormat}
     */
    @Deprecated
    String format() default "";
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/DateTimeFormat.java
================================================
package com.alibaba.excel.annotation.format;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.alibaba.excel.enums.BooleanEnum;

/**
 * Convert date format.
 *
 * <p>
 * write: It can be used on classes {@link java.util.Date}
 * <p>
 * read: It can be used on classes {@link String}
 *
 * @author Jiaju Zhuang
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface DateTimeFormat {

    /**
     *
     * Specific format reference {@link java.text.SimpleDateFormat}
     *
     * @return Format pattern
     */
    String value() default "";

    /**
     * True if date uses 1904 windowing, or false if using 1900 date windowing.
     *
     * @return True if date uses 1904 windowing, or false if using 1900 date windowing.
     */
    BooleanEnum use1904windowing() default BooleanEnum.DEFAULT;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/NumberFormat.java
================================================
package com.alibaba.excel.annotation.format;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.RoundingMode;

/**
 * Convert number format.
 *
 * <p>
 * write: It can be used on classes that inherit {@link Number}
 * <p>
 * read: It can be used on classes {@link String}
 *
 * @author Jiaju Zhuang
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface NumberFormat {

    /**
     *
     * Specific format reference {@link java.text.DecimalFormat}
     *
     * @return Format pattern
     */
    String value() default "";

    /**
     * Rounded by default
     *
     * @return RoundingMode
     */
    RoundingMode roundingMode() default RoundingMode.HALF_UP;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ColumnWidth.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Set the width of the table
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ColumnWidth {

    /**
     * Column width
     * <p>
     * -1 means the default column width is used
     *
     * @return Column width
     */
    int value() default -1;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentFontStyle.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.alibaba.excel.enums.BooleanEnum;

import org.apache.poi.common.usermodel.fonts.FontCharset;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * Custom content styles.
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ContentFontStyle {

    /**
     * The name for the font (i.e. Arial)
     */
    String fontName() default "";

    /**
     * Height in the familiar unit of measure - points
     */
    short fontHeightInPoints() default -1;

    /**
     * Whether to use italics or not
     */
    BooleanEnum italic() default BooleanEnum.DEFAULT;

    /**
     * Whether to use a strikeout horizontal line through the text or not
     */
    BooleanEnum strikeout() default BooleanEnum.DEFAULT;

    /**
     * The color for the font
     *
     * @see Font#COLOR_NORMAL
     * @see Font#COLOR_RED
     * @see HSSFPalette#getColor(short)
     * @see IndexedColors
     */
    short color() default -1;

    /**
     * Set normal, super or subscript.
     *
     * @see Font#SS_NONE
     * @see Font#SS_SUPER
     * @see Font#SS_SUB
     */
    short typeOffset() default -1;

    /**
     * set type of text underlining to use
     *
     * @see Font#U_NONE
     * @see Font#U_SINGLE
     * @see Font#U_DOUBLE
     * @see Font#U_SINGLE_ACCOUNTING
     * @see Font#U_DOUBLE_ACCOUNTING
     */

    byte underline() default -1;

    /**
     * Set character-set to use.
     *
     * @see FontCharset
     * @see Font#ANSI_CHARSET
     * @see Font#DEFAULT_CHARSET
     * @see Font#SYMBOL_CHARSET
     */
    int charset() default -1;

    /**
     * Bold
     */
    BooleanEnum bold() default BooleanEnum.DEFAULT;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentLoopMerge.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * The regions of the loop merge
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ContentLoopMerge {
    /**
     * Each row
     *
     * @return
     */
    int eachRow() default 1;

    /**
     * Extend column
     *
     * @return
     */
    int columnExtend() default 1;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentRowHeight.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Set the height of each table
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ContentRowHeight {

    /**
     * Set the content height
     * <p>
     * -1 mean the auto set height
     *
     * @return Content height
     */
    short value() default -1;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentStyle.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;

import org.apache.poi.ss.usermodel.BuiltinFormats;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IgnoredErrorType;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * Custom content styles
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ContentStyle {
    /**
     * Set the data format (must be a valid format). Built in formats are defined at {@link BuiltinFormats}.
     */
    short dataFormat() default -1;

    /**
     * Set the cell's using this style to be hidden
     */
    BooleanEnum hidden() default BooleanEnum.DEFAULT;

    /**
     * Set the cell's using this style to be locked
     */
    BooleanEnum locked() default BooleanEnum.DEFAULT;

    /**
     * Turn on or off "Quote Prefix" or "123 Prefix" for the style, which is used to tell Excel that the thing which
     * looks like a number or a formula shouldn't be treated as on. Turning this on is somewhat (but not completely, see
     * {@link IgnoredErrorType}) like prefixing the cell value with a ' in Excel
     */
    BooleanEnum quotePrefix() default BooleanEnum.DEFAULT;

    /**
     * Set the type of horizontal alignment for the cell
     */
    HorizontalAlignmentEnum horizontalAlignment() default HorizontalAlignmentEnum.DEFAULT;

    /**
     * Set whether the text should be wrapped. Setting this flag to <code>true</code> make all content visible within a
     * cell by displaying it on multiple lines
     *
     */
    BooleanEnum wrapped() default BooleanEnum.DEFAULT;

    /**
     * Set the type of vertical alignment for the cell
     */
    VerticalAlignmentEnum verticalAlignment() default VerticalAlignmentEnum.DEFAULT;

    /**
     * Set the degree of rotation for the text in the cell.
     *
     * Note: HSSF uses values from -90 to 90 degrees, whereas XSSF uses values from 0 to 180 degrees. The
     * implementations of this method will map between these two value-ranges accordingly, however the corresponding
     * getter is returning values in the range mandated by the current type of Excel file-format that this CellStyle is
     * applied to.
     */
    short rotation() default -1;

    /**
     * Set the number of spaces to indent the text in the cell
     */
    short indent() default -1;

    /**
     * Set the type of border to use for the left border of the cell
     */
    BorderStyleEnum borderLeft() default BorderStyleEnum.DEFAULT;

    /**
     * Set the type of border to use for the right border of the cell
     */
    BorderStyleEnum borderRight() default BorderStyleEnum.DEFAULT;

    /**
     * Set the type of border to use for the top border of the cell
     */
    BorderStyleEnum borderTop() default BorderStyleEnum.DEFAULT;

    /**
     * Set the type of border to use for the bottom border of the cell
     */
    BorderStyleEnum borderBottom() default BorderStyleEnum.DEFAULT;

    /**
     * Set the color to use for the left border
     *
     * @see IndexedColors
     */
    short leftBorderColor() default -1;

    /**
     * Set the color to use for the right border
     *
     * @see IndexedColors
     *
     */
    short rightBorderColor() default -1;

    /**
     * Set the color to use for the top border
     *
     * @see IndexedColors
     *
     */
    short topBorderColor() default -1;

    /**
     * Set the color to use for the bottom border
     *
     * @see IndexedColors
     *
     */
    short bottomBorderColor() default -1;

    /**
     * Setting to one fills the cell with the foreground color... No idea about other values
     *
     * @see FillPatternType#SOLID_FOREGROUND
     */
    FillPatternTypeEnum fillPatternType() default FillPatternTypeEnum.DEFAULT;

    /**
     * Set the background fill color.
     *
     * @see IndexedColors
     *
     */
    short fillBackgroundColor() default -1;

    /**
     * Set the foreground fill color <i>Note: Ensure Foreground color is set prior to background color.</i>
     *
     * @see IndexedColors
     *
     */
    short fillForegroundColor() default -1;

    /**
     * Controls if the Cell should be auto-sized to shrink to fit if the text is too long
     */
    BooleanEnum shrinkToFit() default BooleanEnum.DEFAULT;

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadFontStyle.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.alibaba.excel.enums.BooleanEnum;

import org.apache.poi.common.usermodel.fonts.FontCharset;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * Custom header styles.
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface HeadFontStyle {

    /**
     * The name for the font (i.e. Arial)
     */
    String fontName() default "";

    /**
     * Height in the familiar unit of measure - points
     */
    short fontHeightInPoints() default -1;

    /**
     * Whether to use italics or not
     */
    BooleanEnum italic() default BooleanEnum.DEFAULT;

    /**
     * Whether to use a strikeout horizontal line through the text or not
     */
    BooleanEnum strikeout() default BooleanEnum.DEFAULT;

    /**
     * The color for the font
     *
     * @see Font#COLOR_NORMAL
     * @see Font#COLOR_RED
     * @see HSSFPalette#getColor(short)
     * @see IndexedColors
     */
    short color() default -1;

    /**
     * Set normal, super or subscript.
     *
     * @see Font#SS_NONE
     * @see Font#SS_SUPER
     * @see Font#SS_SUB
     */
    short typeOffset() default -1;

    /**
     * set type of text underlining to use
     *
     * @see Font#U_NONE
     * @see Font#U_SINGLE
     * @see Font#U_DOUBLE
     * @see Font#U_SINGLE_ACCOUNTING
     * @see Font#U_DOUBLE_ACCOUNTING
     */

    byte underline() default -1;

    /**
     * Set character-set to use.
     *
     * @see FontCharset
     * @see Font#ANSI_CHARSET
     * @see Font#DEFAULT_CHARSET
     * @see Font#SYMBOL_CHARSET
     */
    int charset() default -1;

    /**
     * Bold
     */
    BooleanEnum bold() default BooleanEnum.DEFAULT;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadRowHeight.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Set the height of each table
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface HeadRowHeight {
    /**
     * Set the header height
     * <p>
     * -1 mean the auto set height
     *
     * @return Header height
     */
    short value() default -1;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;

import org.apache.poi.ss.usermodel.BuiltinFormats;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IgnoredErrorType;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * Custom header styles
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface HeadStyle {
    /**
     * Set the data format (must be a valid format). Built in formats are defined at {@link BuiltinFormats}.
     */
    short dataFormat() default -1;

    /**
     * Set the cell's using this style to be hidden
     */
    BooleanEnum hidden() default BooleanEnum.DEFAULT;

    /**
     * Set the cell's using this style to be locked
     */
    BooleanEnum locked() default BooleanEnum.DEFAULT;

    /**
     * Turn on or off "Quote Prefix" or "123 Prefix" for the style, which is used to tell Excel that the thing which
     * looks like a number or a formula shouldn't be treated as on. Turning this on is somewhat (but not completely, see
     * {@link IgnoredErrorType}) like prefixing the cell value with a ' in Excel
     */
    BooleanEnum quotePrefix() default BooleanEnum.DEFAULT;

    /**
     * Set the type of horizontal alignment for the cell
     */
    HorizontalAlignmentEnum horizontalAlignment() default HorizontalAlignmentEnum.DEFAULT;

    /**
     * Set whether the text should be wrapped. Setting this flag to <code>true</code> make all content visible within a
     * cell by displaying it on multiple lines
     */
    BooleanEnum wrapped() default BooleanEnum.DEFAULT;

    /**
     * Set the type of vertical alignment for the cell
     */
    VerticalAlignmentEnum verticalAlignment() default VerticalAlignmentEnum.DEFAULT;

    /**
     * Set the degree of rotation for the text in the cell.
     *
     * Note: HSSF uses values from -90 to 90 degrees, whereas XSSF uses values from 0 to 180 degrees. The
     * implementations of this method will map between these two value-ranges accordingly, however the corresponding
     * getter is returning values in the range mandated by the current type of Excel file-format that this CellStyle is
     * applied to.
     */
    short rotation() default -1;

    /**
     * Set the number of spaces to indent the text in the cell
     */
    short indent() default -1;

    /**
     * Set the type of border to use for the left border of the cell
     */
    BorderStyleEnum borderLeft() default BorderStyleEnum.DEFAULT;

    /**
     * Set the type of border to use for the right border of the cell
     */
    BorderStyleEnum borderRight() default BorderStyleEnum.DEFAULT;

    /**
     * Set the type of border to use for the top border of the cell
     */
    BorderStyleEnum borderTop() default BorderStyleEnum.DEFAULT;

    /**
     * Set the type of border to use for the bottom border of the cell
     */
    BorderStyleEnum borderBottom() default BorderStyleEnum.DEFAULT;

    /**
     * Set the color to use for the left border
     *
     * @see IndexedColors
     */
    short leftBorderColor() default -1;

    /**
     * Set the color to use for the right border
     *
     * @see IndexedColors
     */
    short rightBorderColor() default -1;

    /**
     * Set the color to use for the top border
     *
     * @see IndexedColors
     */
    short topBorderColor() default -1;

    /**
     * Set the color to use for the bottom border
     *
     * @see IndexedColors
     */
    short bottomBorderColor() default -1;

    /**
     * Setting to one fills the cell with the foreground color... No idea about other values
     *
     * @see FillPatternType#SOLID_FOREGROUND
     */
    FillPatternTypeEnum fillPatternType() default FillPatternTypeEnum.DEFAULT;

    /**
     * Set the background fill color.
     *
     * @see IndexedColors
     */
    short fillBackgroundColor() default -1;

    /**
     * Set the foreground fill color <i>Note: Ensure Foreground color is set prior to background color.</i>
     *
     * @see IndexedColors
     */
    short fillForegroundColor() default -1;

    /**
     * Controls if the Cell should be auto-sized to shrink to fit if the text is too long
     */
    BooleanEnum shrinkToFit() default BooleanEnum.DEFAULT;

}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/OnceAbsoluteMerge.java
================================================
package com.alibaba.excel.annotation.write.style;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Merge the cells once
 *
 * @author Jiaju Zhuang
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface OnceAbsoluteMerge {
    /**
     * First row
     *
     * @return
     */
    int firstRowIndex() default -1;

    /**
     * Last row
     *
     * @return
     */
    int lastRowIndex() default -1;

    /**
     * First column
     *
     * @return
     */
    int firstColumnIndex() default -1;

    /**
     * Last row
     *
     * @return
     */
    int lastColumnIndex() default -1;
}


================================================
FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/Ehcache.java
================================================
package com.alibaba.excel.cache;

import java.io.File;
import java.util.ArrayList;
import java.util.Optional;
import java.util.UUID;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.ListUtils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.ehcache.CacheManager;
import org.ehcache.config.CacheConfiguration;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.units.EntryUnit;
import org.ehcache.config.units.MemoryUnit;

/**
 * Default cache
 *
 * @author Jiaju Zhuang
 */
@Slf4j
public class Ehcache implements ReadCache {
    public static final int BATCH_COUNT = 100;
    /**
     * Key index
     */
    private int activeIndex = 0;
    public static final int DEBUG_CACHE_MISS_SIZE = 1000;
    public static final int DEBUG_WRITE_SIZE = 100 * 10000;
    private ArrayList<String> dataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
    private static final CacheManager FILE_CACHE_MANAGER;
    private static final CacheConfiguration<Integer, ArrayList> FILE_CACHE_CONFIGURATION;
    private static final CacheManager ACTIVE_CACHE_MANAGER;
    private static final File CACHE_PATH_FILE;

    private final CacheConfiguration<Integer, ArrayList> activeCacheConfiguration;
    /**
     * Bulk storage data
     */
    private org.ehcache.Cache<Integer, ArrayList> fileCache;
    /**
     * Currently active cache
     */
    private org.ehcache.Cache<Integer, ArrayList> activeCache;
    private String cacheAlias;
    /**
     * Count the number of cache misses
     */
    private int cacheMiss = 0;

    @Deprecated
    public Ehcache(Integer maxCacheActivateSize) {
        this(maxCacheActivateSize, 
Download .txt
gitextract_lvmyxm4w/

├── .editorconfig
├── .gitee/
│   └── ISSUE_TEMPLATE.zh-CN.md
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.md
│   │   ├── question.md
│   │   └── suggest.md
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pull_request_template.md
│   └── workflows/
│       ├── ci.yml
│       ├── release.yml
│       └── sync2gitee.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── README_EN.md
├── docs/
│   ├── API.md
│   └── LARGEREAD.md
├── easyexcel/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── excel/
│                           └── Empty.java
├── easyexcel-core/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── excel/
│                           ├── EasyExcel.java
│                           ├── EasyExcelFactory.java
│                           ├── ExcelReader.java
│                           ├── ExcelWriter.java
│                           ├── analysis/
│                           │   ├── ExcelAnalyser.java
│                           │   ├── ExcelAnalyserImpl.java
│                           │   ├── ExcelReadExecutor.java
│                           │   ├── csv/
│                           │   │   └── CsvExcelReadExecutor.java
│                           │   ├── v03/
│                           │   │   ├── IgnorableXlsRecordHandler.java
│                           │   │   ├── XlsListSheetListener.java
│                           │   │   ├── XlsRecordHandler.java
│                           │   │   ├── XlsSaxAnalyser.java
│                           │   │   └── handlers/
│                           │   │       ├── AbstractXlsRecordHandler.java
│                           │   │       ├── BlankRecordHandler.java
│                           │   │       ├── BofRecordHandler.java
│                           │   │       ├── BoolErrRecordHandler.java
│                           │   │       ├── BoundSheetRecordHandler.java
│                           │   │       ├── DummyRecordHandler.java
│                           │   │       ├── EofRecordHandler.java
│                           │   │       ├── FormulaRecordHandler.java
│                           │   │       ├── HyperlinkRecordHandler.java
│                           │   │       ├── IndexRecordHandler.java
│                           │   │       ├── LabelRecordHandler.java
│                           │   │       ├── LabelSstRecordHandler.java
│                           │   │       ├── MergeCellsRecordHandler.java
│                           │   │       ├── NoteRecordHandler.java
│                           │   │       ├── NumberRecordHandler.java
│                           │   │       ├── ObjRecordHandler.java
│                           │   │       ├── RkRecordHandler.java
│                           │   │       ├── SstRecordHandler.java
│                           │   │       ├── StringRecordHandler.java
│                           │   │       └── TextObjectRecordHandler.java
│                           │   └── v07/
│                           │       ├── XlsxSaxAnalyser.java
│                           │       └── handlers/
│                           │           ├── AbstractCellValueTagHandler.java
│                           │           ├── AbstractXlsxTagHandler.java
│                           │           ├── CellFormulaTagHandler.java
│                           │           ├── CellInlineStringValueTagHandler.java
│                           │           ├── CellTagHandler.java
│                           │           ├── CellValueTagHandler.java
│                           │           ├── CountTagHandler.java
│                           │           ├── HyperlinkTagHandler.java
│                           │           ├── MergeCellTagHandler.java
│                           │           ├── RowTagHandler.java
│                           │           ├── XlsxTagHandler.java
│                           │           └── sax/
│                           │               ├── SharedStringsTableHandler.java
│                           │               └── XlsxRowHandler.java
│                           ├── annotation/
│                           │   ├── ExcelIgnore.java
│                           │   ├── ExcelIgnoreUnannotated.java
│                           │   ├── ExcelProperty.java
│                           │   ├── format/
│                           │   │   ├── DateTimeFormat.java
│                           │   │   └── NumberFormat.java
│                           │   └── write/
│                           │       └── style/
│                           │           ├── ColumnWidth.java
│                           │           ├── ContentFontStyle.java
│                           │           ├── ContentLoopMerge.java
│                           │           ├── ContentRowHeight.java
│                           │           ├── ContentStyle.java
│                           │           ├── HeadFontStyle.java
│                           │           ├── HeadRowHeight.java
│                           │           ├── HeadStyle.java
│                           │           └── OnceAbsoluteMerge.java
│                           ├── cache/
│                           │   ├── Ehcache.java
│                           │   ├── MapCache.java
│                           │   ├── ReadCache.java
│                           │   ├── XlsCache.java
│                           │   └── selector/
│                           │       ├── EternalReadCacheSelector.java
│                           │       ├── ReadCacheSelector.java
│                           │       └── SimpleReadCacheSelector.java
│                           ├── constant/
│                           │   ├── BuiltinFormats.java
│                           │   ├── EasyExcelConstants.java
│                           │   ├── ExcelXmlConstants.java
│                           │   └── OrderConstant.java
│                           ├── context/
│                           │   ├── AnalysisContext.java
│                           │   ├── AnalysisContextImpl.java
│                           │   ├── WriteContext.java
│                           │   ├── WriteContextImpl.java
│                           │   ├── csv/
│                           │   │   ├── CsvReadContext.java
│                           │   │   └── DefaultCsvReadContext.java
│                           │   ├── xls/
│                           │   │   ├── DefaultXlsReadContext.java
│                           │   │   └── XlsReadContext.java
│                           │   └── xlsx/
│                           │       ├── DefaultXlsxReadContext.java
│                           │       └── XlsxReadContext.java
│                           ├── converters/
│                           │   ├── AutoConverter.java
│                           │   ├── Converter.java
│                           │   ├── ConverterKeyBuild.java
│                           │   ├── DefaultConverterLoader.java
│                           │   ├── NullableObjectConverter.java
│                           │   ├── ReadConverterContext.java
│                           │   ├── WriteConverterContext.java
│                           │   ├── bigdecimal/
│                           │   │   ├── BigDecimalBooleanConverter.java
│                           │   │   ├── BigDecimalNumberConverter.java
│                           │   │   └── BigDecimalStringConverter.java
│                           │   ├── biginteger/
│                           │   │   ├── BigIntegerBooleanConverter.java
│                           │   │   ├── BigIntegerNumberConverter.java
│                           │   │   └── BigIntegerStringConverter.java
│                           │   ├── booleanconverter/
│                           │   │   ├── BooleanBooleanConverter.java
│                           │   │   ├── BooleanNumberConverter.java
│                           │   │   └── BooleanStringConverter.java
│                           │   ├── bytearray/
│                           │   │   ├── BoxingByteArrayImageConverter.java
│                           │   │   └── ByteArrayImageConverter.java
│                           │   ├── byteconverter/
│                           │   │   ├── ByteBooleanConverter.java
│                           │   │   ├── ByteNumberConverter.java
│                           │   │   └── ByteStringConverter.java
│                           │   ├── date/
│                           │   │   ├── DateDateConverter.java
│                           │   │   ├── DateNumberConverter.java
│                           │   │   └── DateStringConverter.java
│                           │   ├── doubleconverter/
│                           │   │   ├── DoubleBooleanConverter.java
│                           │   │   ├── DoubleNumberConverter.java
│                           │   │   └── DoubleStringConverter.java
│                           │   ├── file/
│                           │   │   └── FileImageConverter.java
│                           │   ├── floatconverter/
│                           │   │   ├── FloatBooleanConverter.java
│                           │   │   ├── FloatNumberConverter.java
│                           │   │   └── FloatStringConverter.java
│                           │   ├── inputstream/
│                           │   │   └── InputStreamImageConverter.java
│                           │   ├── integer/
│                           │   │   ├── IntegerBooleanConverter.java
│                           │   │   ├── IntegerNumberConverter.java
│                           │   │   └── IntegerStringConverter.java
│                           │   ├── localdate/
│                           │   │   ├── LocalDateDateConverter.java
│                           │   │   ├── LocalDateNumberConverter.java
│                           │   │   └── LocalDateStringConverter.java
│                           │   ├── localdatetime/
│                           │   │   ├── LocalDateTimeDateConverter.java
│                           │   │   ├── LocalDateTimeNumberConverter.java
│                           │   │   └── LocalDateTimeStringConverter.java
│                           │   ├── longconverter/
│                           │   │   ├── LongBooleanConverter.java
│                           │   │   ├── LongNumberConverter.java
│                           │   │   └── LongStringConverter.java
│                           │   ├── shortconverter/
│                           │   │   ├── ShortBooleanConverter.java
│                           │   │   ├── ShortNumberConverter.java
│                           │   │   └── ShortStringConverter.java
│                           │   ├── string/
│                           │   │   ├── StringBooleanConverter.java
│                           │   │   ├── StringErrorConverter.java
│                           │   │   ├── StringImageConverter.java
│                           │   │   ├── StringNumberConverter.java
│                           │   │   └── StringStringConverter.java
│                           │   └── url/
│                           │       └── UrlImageConverter.java
│                           ├── enums/
│                           │   ├── BooleanEnum.java
│                           │   ├── ByteOrderMarkEnum.java
│                           │   ├── CacheLocationEnum.java
│                           │   ├── CellDataTypeEnum.java
│                           │   ├── CellExtraTypeEnum.java
│                           │   ├── HeadKindEnum.java
│                           │   ├── HolderEnum.java
│                           │   ├── NumericCellTypeEnum.java
│                           │   ├── ReadDefaultReturnEnum.java
│                           │   ├── RowTypeEnum.java
│                           │   ├── WriteDirectionEnum.java
│                           │   ├── WriteLastRowTypeEnum.java
│                           │   ├── WriteTemplateAnalysisCellTypeEnum.java
│                           │   ├── WriteTypeEnum.java
│                           │   └── poi/
│                           │       ├── BorderStyleEnum.java
│                           │       ├── FillPatternTypeEnum.java
│                           │       ├── HorizontalAlignmentEnum.java
│                           │       └── VerticalAlignmentEnum.java
│                           ├── event/
│                           │   ├── AbstractIgnoreExceptionReadListener.java
│                           │   ├── AnalysisEventListener.java
│                           │   ├── Handler.java
│                           │   ├── Listener.java
│                           │   ├── NotRepeatExecutor.java
│                           │   ├── Order.java
│                           │   └── SyncReadListener.java
│                           ├── exception/
│                           │   ├── ExcelAnalysisException.java
│                           │   ├── ExcelAnalysisStopException.java
│                           │   ├── ExcelAnalysisStopSheetException.java
│                           │   ├── ExcelCommonException.java
│                           │   ├── ExcelDataConvertException.java
│                           │   ├── ExcelGenerateException.java
│                           │   ├── ExcelRuntimeException.java
│                           │   └── ExcelWriteDataConvertException.java
│                           ├── metadata/
│                           │   ├── AbstractCell.java
│                           │   ├── AbstractHolder.java
│                           │   ├── AbstractParameterBuilder.java
│                           │   ├── BasicParameter.java
│                           │   ├── Cell.java
│                           │   ├── CellExtra.java
│                           │   ├── CellRange.java
│                           │   ├── ConfigurationHolder.java
│                           │   ├── FieldCache.java
│                           │   ├── FieldWrapper.java
│                           │   ├── Font.java
│                           │   ├── GlobalConfiguration.java
│                           │   ├── Head.java
│                           │   ├── Holder.java
│                           │   ├── NullObject.java
│                           │   ├── csv/
│                           │   │   ├── CsvCell.java
│                           │   │   ├── CsvCellStyle.java
│                           │   │   ├── CsvDataFormat.java
│                           │   │   ├── CsvRichTextString.java
│                           │   │   ├── CsvRow.java
│                           │   │   ├── CsvSheet.java
│                           │   │   └── CsvWorkbook.java
│                           │   ├── data/
│                           │   │   ├── CellData.java
│                           │   │   ├── ClientAnchorData.java
│                           │   │   ├── CommentData.java
│                           │   │   ├── CoordinateData.java
│                           │   │   ├── DataFormatData.java
│                           │   │   ├── FormulaData.java
│                           │   │   ├── HyperlinkData.java
│                           │   │   ├── ImageData.java
│                           │   │   ├── ReadCellData.java
│                           │   │   ├── RichTextStringData.java
│                           │   │   └── WriteCellData.java
│                           │   ├── format/
│                           │   │   ├── DataFormatter.java
│                           │   │   └── ExcelGeneralNumberFormat.java
│                           │   └── property/
│                           │       ├── ColumnWidthProperty.java
│                           │       ├── DateTimeFormatProperty.java
│                           │       ├── ExcelContentProperty.java
│                           │       ├── ExcelHeadProperty.java
│                           │       ├── FontProperty.java
│                           │       ├── LoopMergeProperty.java
│                           │       ├── NumberFormatProperty.java
│                           │       ├── OnceAbsoluteMergeProperty.java
│                           │       ├── RowHeightProperty.java
│                           │       └── StyleProperty.java
│                           ├── read/
│                           │   ├── builder/
│                           │   │   ├── AbstractExcelReaderParameterBuilder.java
│                           │   │   ├── ExcelReaderBuilder.java
│                           │   │   └── ExcelReaderSheetBuilder.java
│                           │   ├── listener/
│                           │   │   ├── IgnoreExceptionReadListener.java
│                           │   │   ├── ModelBuildEventListener.java
│                           │   │   ├── PageReadListener.java
│                           │   │   └── ReadListener.java
│                           │   ├── metadata/
│                           │   │   ├── ReadBasicParameter.java
│                           │   │   ├── ReadSheet.java
│                           │   │   ├── ReadWorkbook.java
│                           │   │   ├── holder/
│                           │   │   │   ├── AbstractReadHolder.java
│                           │   │   │   ├── ReadHolder.java
│                           │   │   │   ├── ReadRowHolder.java
│                           │   │   │   ├── ReadSheetHolder.java
│                           │   │   │   ├── ReadWorkbookHolder.java
│                           │   │   │   ├── csv/
│                           │   │   │   │   ├── CsvReadSheetHolder.java
│                           │   │   │   │   └── CsvReadWorkbookHolder.java
│                           │   │   │   ├── xls/
│                           │   │   │   │   ├── XlsReadSheetHolder.java
│                           │   │   │   │   └── XlsReadWorkbookHolder.java
│                           │   │   │   └── xlsx/
│                           │   │   │       ├── XlsxReadSheetHolder.java
│                           │   │   │       └── XlsxReadWorkbookHolder.java
│                           │   │   └── property/
│                           │   │       └── ExcelReadHeadProperty.java
│                           │   └── processor/
│                           │       ├── AnalysisEventProcessor.java
│                           │       └── DefaultAnalysisEventProcessor.java
│                           ├── support/
│                           │   └── ExcelTypeEnum.java
│                           ├── util/
│                           │   ├── BeanMapUtils.java
│                           │   ├── BooleanUtils.java
│                           │   ├── ClassUtils.java
│                           │   ├── ConverterUtils.java
│                           │   ├── DateUtils.java
│                           │   ├── EasyExcelTempFileCreationStrategy.java
│                           │   ├── FieldUtils.java
│                           │   ├── FileTypeUtils.java
│                           │   ├── FileUtils.java
│                           │   ├── IntUtils.java
│                           │   ├── IoUtils.java
│                           │   ├── ListUtils.java
│                           │   ├── MapUtils.java
│                           │   ├── MemberUtils.java
│                           │   ├── NumberDataFormatterUtils.java
│                           │   ├── NumberUtils.java
│                           │   ├── PoiUtils.java
│                           │   ├── PositionUtils.java
│                           │   ├── SheetUtils.java
│                           │   ├── StringUtils.java
│                           │   ├── StyleUtil.java
│                           │   ├── Validate.java
│                           │   ├── WorkBookUtil.java
│                           │   └── WriteHandlerUtils.java
│                           └── write/
│                               ├── ExcelBuilder.java
│                               ├── ExcelBuilderImpl.java
│                               ├── builder/
│                               │   ├── AbstractExcelWriterParameterBuilder.java
│                               │   ├── ExcelWriterBuilder.java
│                               │   ├── ExcelWriterSheetBuilder.java
│                               │   └── ExcelWriterTableBuilder.java
│                               ├── executor/
│                               │   ├── AbstractExcelWriteExecutor.java
│                               │   ├── ExcelWriteAddExecutor.java
│                               │   ├── ExcelWriteExecutor.java
│                               │   └── ExcelWriteFillExecutor.java
│                               ├── handler/
│                               │   ├── AbstractCellWriteHandler.java
│                               │   ├── AbstractRowWriteHandler.java
│                               │   ├── AbstractSheetWriteHandler.java
│                               │   ├── AbstractWorkbookWriteHandler.java
│                               │   ├── CellWriteHandler.java
│                               │   ├── DefaultWriteHandlerLoader.java
│                               │   ├── RowWriteHandler.java
│                               │   ├── SheetWriteHandler.java
│                               │   ├── WorkbookWriteHandler.java
│                               │   ├── WriteHandler.java
│                               │   ├── chain/
│                               │   │   ├── CellHandlerExecutionChain.java
│                               │   │   ├── RowHandlerExecutionChain.java
│                               │   │   ├── SheetHandlerExecutionChain.java
│                               │   │   └── WorkbookHandlerExecutionChain.java
│                               │   ├── context/
│                               │   │   ├── CellWriteHandlerContext.java
│                               │   │   ├── RowWriteHandlerContext.java
│                               │   │   ├── SheetWriteHandlerContext.java
│                               │   │   └── WorkbookWriteHandlerContext.java
│                               │   └── impl/
│                               │       ├── DefaultRowWriteHandler.java
│                               │       ├── DimensionWorkbookWriteHandler.java
│                               │       └── FillStyleCellWriteHandler.java
│                               ├── merge/
│                               │   ├── AbstractMergeStrategy.java
│                               │   ├── LoopMergeStrategy.java
│                               │   └── OnceAbsoluteMergeStrategy.java
│                               ├── metadata/
│                               │   ├── CollectionRowData.java
│                               │   ├── MapRowData.java
│                               │   ├── RowData.java
│                               │   ├── WriteBasicParameter.java
│                               │   ├── WriteSheet.java
│                               │   ├── WriteTable.java
│                               │   ├── WriteWorkbook.java
│                               │   ├── fill/
│                               │   │   ├── AnalysisCell.java
│                               │   │   ├── FillConfig.java
│                               │   │   └── FillWrapper.java
│                               │   ├── holder/
│                               │   │   ├── AbstractWriteHolder.java
│                               │   │   ├── WriteHolder.java
│                               │   │   ├── WriteSheetHolder.java
│                               │   │   ├── WriteTableHolder.java
│                               │   │   └── WriteWorkbookHolder.java
│                               │   └── style/
│                               │       ├── WriteCellStyle.java
│                               │       └── WriteFont.java
│                               ├── property/
│                               │   └── ExcelWriteHeadProperty.java
│                               └── style/
│                                   ├── AbstractCellStyleStrategy.java
│                                   ├── AbstractVerticalCellStyleStrategy.java
│                                   ├── DefaultStyle.java
│                                   ├── HorizontalCellStyleStrategy.java
│                                   ├── column/
│                                   │   ├── AbstractColumnWidthStyleStrategy.java
│                                   │   ├── AbstractHeadColumnWidthStyleStrategy.java
│                                   │   ├── LongestMatchColumnWidthStyleStrategy.java
│                                   │   └── SimpleColumnWidthStyleStrategy.java
│                                   └── row/
│                                       ├── AbstractRowHeightStyleStrategy.java
│                                       └── SimpleRowHeightStyleStrategy.java
├── easyexcel-support/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── excel/
│                           └── support/
│                               └── Empty.java
├── easyexcel-test/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── easyexcel/
│           │               └── test/
│           │                   ├── core/
│           │                   │   ├── StyleTestUtils.java
│           │                   │   ├── annotation/
│           │                   │   │   ├── AnnotationData.java
│           │                   │   │   ├── AnnotationDataListener.java
│           │                   │   │   ├── AnnotationDataTest.java
│           │                   │   │   ├── AnnotationIndexAndNameData.java
│           │                   │   │   ├── AnnotationIndexAndNameDataListener.java
│           │                   │   │   ├── AnnotationIndexAndNameDataTest.java
│           │                   │   │   └── AnnotationStyleData.java
│           │                   │   ├── bom/
│           │                   │   │   ├── BomData.java
│           │                   │   │   └── BomDataTest.java
│           │                   │   ├── cache/
│           │                   │   │   ├── CacheData.java
│           │                   │   │   ├── CacheDataTest.java
│           │                   │   │   ├── CacheInvokeData.java
│           │                   │   │   └── CacheInvokeMemoryData.java
│           │                   │   ├── celldata/
│           │                   │   │   ├── CellDataDataListener.java
│           │                   │   │   ├── CellDataDataTest.java
│           │                   │   │   ├── CellDataReadData.java
│           │                   │   │   └── CellDataWriteData.java
│           │                   │   ├── charset/
│           │                   │   │   ├── CharsetData.java
│           │                   │   │   └── CharsetDataTest.java
│           │                   │   ├── compatibility/
│           │                   │   │   └── CompatibilityTest.java
│           │                   │   ├── converter/
│           │                   │   │   ├── ConverterDataListener.java
│           │                   │   │   ├── ConverterDataTest.java
│           │                   │   │   ├── ConverterReadData.java
│           │                   │   │   ├── ConverterTest.java
│           │                   │   │   ├── ConverterWriteData.java
│           │                   │   │   ├── ImageData.java
│           │                   │   │   ├── ReadAllConverterData.java
│           │                   │   │   └── ReadAllConverterDataListener.java
│           │                   │   ├── dataformat/
│           │                   │   │   ├── DateFormatData.java
│           │                   │   │   └── DateFormatTest.java
│           │                   │   ├── encrypt/
│           │                   │   │   ├── EncryptData.java
│           │                   │   │   ├── EncryptDataListener.java
│           │                   │   │   └── EncryptDataTest.java
│           │                   │   ├── exception/
│           │                   │   │   ├── ExcelAnalysisStopSheetExceptionDataListener.java
│           │                   │   │   ├── ExceptionData.java
│           │                   │   │   ├── ExceptionDataListener.java
│           │                   │   │   ├── ExceptionDataTest.java
│           │                   │   │   └── ExceptionThrowDataListener.java
│           │                   │   ├── excludeorinclude/
│           │                   │   │   ├── ExcludeOrIncludeData.java
│           │                   │   │   └── ExcludeOrIncludeDataTest.java
│           │                   │   ├── extra/
│           │                   │   │   ├── ExtraData.java
│           │                   │   │   ├── ExtraDataListener.java
│           │                   │   │   └── ExtraDataTest.java
│           │                   │   ├── fill/
│           │                   │   │   ├── FillData.java
│           │                   │   │   ├── FillDataTest.java
│           │                   │   │   ├── annotation/
│           │                   │   │   │   ├── FillAnnotationData.java
│           │                   │   │   │   └── FillAnnotationDataTest.java
│           │                   │   │   └── style/
│           │                   │   │       ├── FillStyleAnnotatedData.java
│           │                   │   │       ├── FillStyleAnnotatedTest.java
│           │                   │   │       ├── FillStyleData.java
│           │                   │   │       └── FillStyleDataTest.java
│           │                   │   ├── handler/
│           │                   │   │   ├── WriteHandler.java
│           │                   │   │   ├── WriteHandlerData.java
│           │                   │   │   └── WriteHandlerTest.java
│           │                   │   ├── head/
│           │                   │   │   ├── ComplexDataListener.java
│           │                   │   │   ├── ComplexHeadData.java
│           │                   │   │   ├── ComplexHeadDataTest.java
│           │                   │   │   ├── ListHeadDataListener.java
│           │                   │   │   ├── ListHeadDataTest.java
│           │                   │   │   ├── NoHeadData.java
│           │                   │   │   ├── NoHeadDataListener.java
│           │                   │   │   └── NoHeadDataTest.java
│           │                   │   ├── large/
│           │                   │   │   ├── LargeData.java
│           │                   │   │   ├── LargeDataListener.java
│           │                   │   │   └── LargeDataTest.java
│           │                   │   ├── multiplesheets/
│           │                   │   │   ├── MultipleSheetsData.java
│           │                   │   │   ├── MultipleSheetsDataTest.java
│           │                   │   │   └── MultipleSheetsListener.java
│           │                   │   ├── nomodel/
│           │                   │   │   └── NoModelDataTest.java
│           │                   │   ├── noncamel/
│           │                   │   │   ├── UnCamelData.java
│           │                   │   │   ├── UnCamelDataListener.java
│           │                   │   │   └── UnCamelDataTest.java
│           │                   │   ├── parameter/
│           │                   │   │   ├── ParameterData.java
│           │                   │   │   ├── ParameterDataListener.java
│           │                   │   │   └── ParameterDataTest.java
│           │                   │   ├── repetition/
│           │                   │   │   ├── RepetitionData.java
│           │                   │   │   ├── RepetitionDataListener.java
│           │                   │   │   └── RepetitionDataTest.java
│           │                   │   ├── simple/
│           │                   │   │   ├── SimpleData.java
│           │                   │   │   ├── SimpleDataListener.java
│           │                   │   │   ├── SimpleDataSheetNameListener.java
│           │                   │   │   └── SimpleDataTest.java
│           │                   │   ├── skip/
│           │                   │   │   ├── SkipData.java
│           │                   │   │   └── SkipDataTest.java
│           │                   │   ├── sort/
│           │                   │   │   ├── SortData.java
│           │                   │   │   ├── SortDataListener.java
│           │                   │   │   └── SortDataTest.java
│           │                   │   ├── style/
│           │                   │   │   ├── StyleData.java
│           │                   │   │   ├── StyleDataListener.java
│           │                   │   │   └── StyleDataTest.java
│           │                   │   └── template/
│           │                   │       ├── TemplateData.java
│           │                   │       ├── TemplateDataListener.java
│           │                   │       └── TemplateDataTest.java
│           │                   ├── demo/
│           │                   │   ├── fill/
│           │                   │   │   ├── FillData.java
│           │                   │   │   └── FillTest.java
│           │                   │   ├── rare/
│           │                   │   │   └── WriteTest.java
│           │                   │   ├── read/
│           │                   │   │   ├── CellDataDemoHeadDataListener.java
│           │                   │   │   ├── CellDataReadDemoData.java
│           │                   │   │   ├── ConverterData.java
│           │                   │   │   ├── ConverterDataListener.java
│           │                   │   │   ├── CustomStringStringConverter.java
│           │                   │   │   ├── DemoDAO.java
│           │                   │   │   ├── DemoData.java
│           │                   │   │   ├── DemoDataListener.java
│           │                   │   │   ├── DemoExceptionListener.java
│           │                   │   │   ├── DemoExtraData.java
│           │                   │   │   ├── DemoExtraListener.java
│           │                   │   │   ├── DemoHeadDataListener.java
│           │                   │   │   ├── ExceptionDemoData.java
│           │                   │   │   ├── IndexOrNameData.java
│           │                   │   │   ├── IndexOrNameDataListener.java
│           │                   │   │   ├── NoModelDataListener.java
│           │                   │   │   └── ReadTest.java
│           │                   │   ├── web/
│           │                   │   │   ├── DownloadData.java
│           │                   │   │   ├── EasyexcelApplication.java
│           │                   │   │   ├── UploadDAO.java
│           │                   │   │   ├── UploadData.java
│           │                   │   │   ├── UploadDataListener.java
│           │                   │   │   └── WebTest.java
│           │                   │   └── write/
│           │                   │       ├── CommentWriteHandler.java
│           │                   │       ├── ComplexHeadData.java
│           │                   │       ├── ConverterData.java
│           │                   │       ├── CustomCellWriteHandler.java
│           │                   │       ├── CustomSheetWriteHandler.java
│           │                   │       ├── CustomStringStringConverter.java
│           │                   │       ├── DemoData.java
│           │                   │       ├── DemoMergeData.java
│           │                   │       ├── DemoStyleData.java
│           │                   │       ├── ImageDataWithAnnotation.java
│           │                   │       ├── ImageDemoData.java
│           │                   │       ├── IndexData.java
│           │                   │       ├── LongestMatchColumnWidthData.java
│           │                   │       ├── WidthAndHeightData.java
│           │                   │       ├── WriteCellDemoData.java
│           │                   │       └── WriteTest.java
│           │                   ├── temp/
│           │                   │   ├── CamlData.java
│           │                   │   ├── DemoData2.java
│           │                   │   ├── DemoData3.java
│           │                   │   ├── FillTempTest.java
│           │                   │   ├── Lock2Test.java
│           │                   │   ├── LockData.java
│           │                   │   ├── LockDataListener.java
│           │                   │   ├── LockTest.java
│           │                   │   ├── StyleData.java
│           │                   │   ├── StyleTest.java
│           │                   │   ├── TempFillData.java
│           │                   │   ├── WriteLargeTest.java
│           │                   │   ├── WriteV33Test.java
│           │                   │   ├── WriteV34Test.java
│           │                   │   ├── Xls03Test.java
│           │                   │   ├── bug/
│           │                   │   │   ├── DataType.java
│           │                   │   │   ├── ExcelCreat.java
│           │                   │   │   └── HeadType.java
│           │                   │   ├── cache/
│           │                   │   │   └── CacheTest.java
│           │                   │   ├── csv/
│           │                   │   │   ├── CsvData.java
│           │                   │   │   ├── CsvDataListeer.java
│           │                   │   │   └── CsvReadTest.java
│           │                   │   ├── data/
│           │                   │   │   ├── DataType.java
│           │                   │   │   └── HeadType.java
│           │                   │   ├── dataformat/
│           │                   │   │   ├── DataFormatData.java
│           │                   │   │   ├── DataFormatTest.java
│           │                   │   │   └── DataFormatter1.java
│           │                   │   ├── fill/
│           │                   │   │   ├── FillData2.java
│           │                   │   │   └── FillTempTest.java
│           │                   │   ├── issue1662/
│           │                   │   │   ├── Data1662.java
│           │                   │   │   └── Issue1662Test.java
│           │                   │   ├── issue1663/
│           │                   │   │   ├── FillData.java
│           │                   │   │   └── FillTest.java
│           │                   │   ├── issue2443/
│           │                   │   │   ├── Issue2443.java
│           │                   │   │   └── Issue2443Test.java
│           │                   │   ├── large/
│           │                   │   │   ├── LargeData.java
│           │                   │   │   ├── LargeDataListener.java
│           │                   │   │   ├── NoModelLargeDataListener.java
│           │                   │   │   └── TempLargeDataTest.java
│           │                   │   ├── poi/
│           │                   │   │   ├── Poi2Test.java
│           │                   │   │   ├── Poi3Test.java
│           │                   │   │   ├── PoiDateFormatTest.java
│           │                   │   │   ├── PoiEncryptTest.java
│           │                   │   │   ├── PoiFormatTest.java
│           │                   │   │   ├── PoiTest.java
│           │                   │   │   ├── PoiWriteTest.java
│           │                   │   │   └── TestCell.java
│           │                   │   ├── read/
│           │                   │   │   ├── CommentTest.java
│           │                   │   │   ├── HDListener.java
│           │                   │   │   ├── HeadListener.java
│           │                   │   │   ├── HeadReadData.java
│           │                   │   │   ├── HeadReadTest.java
│           │                   │   │   └── TestListener.java
│           │                   │   ├── simple/
│           │                   │   │   ├── DemoData1.java
│           │                   │   │   ├── DemoData2.java
│           │                   │   │   ├── HgListener.java
│           │                   │   │   ├── HgTest.java
│           │                   │   │   ├── JsonData.java
│           │                   │   │   ├── RepeatListener.java
│           │                   │   │   ├── RepeatTest.java
│           │                   │   │   ├── Write.java
│           │                   │   │   ├── WriteCellHandler.java
│           │                   │   │   ├── WriteData.java
│           │                   │   │   └── WriteHandler.java
│           │                   │   └── write/
│           │                   │       ├── TempWriteData.java
│           │                   │       └── TempWriteTest.java
│           │                   └── util/
│           │                       ├── TestFileUtil.java
│           │                       └── TestUtil.java
│           └── resources/
│               ├── bom/
│               │   ├── no_bom.csv
│               │   └── office_bom.csv
│               ├── compatibility/
│               │   ├── t01.xls
│               │   ├── t02.xlsx
│               │   ├── t03.xlsx
│               │   ├── t04.xlsx
│               │   ├── t05.xlsx
│               │   ├── t06.xlsx
│               │   ├── t07.xlsx
│               │   └── t09.xlsx
│               ├── converter/
│               │   ├── converter03.xls
│               │   ├── converter07.xlsx
│               │   └── converterCsv.csv
│               ├── dataformat/
│               │   ├── dataformat.xls
│               │   ├── dataformat.xlsx
│               │   └── dataformatv2.xlsx
│               ├── demo/
│               │   ├── cellDataDemo.xlsx
│               │   ├── demo.csv
│               │   ├── demo.xlsx
│               │   ├── extra.xlsx
│               │   └── fill/
│               │       ├── complex.xlsx
│               │       ├── complexFillWithTable.xlsx
│               │       ├── composite.xlsx
│               │       ├── horizontal.xlsx
│               │       ├── list.xlsx
│               │       └── simple.xlsx
│               ├── extra/
│               │   ├── extra.xls
│               │   ├── extra.xlsx
│               │   └── extraRelationships.xlsx
│               ├── fill/
│               │   ├── annotation.xls
│               │   ├── annotation.xlsx
│               │   ├── byName.xls
│               │   ├── byName.xlsx
│               │   ├── complex.xls
│               │   ├── complex.xlsx
│               │   ├── composite.xls
│               │   ├── composite.xlsx
│               │   ├── horizontal.xls
│               │   ├── horizontal.xlsx
│               │   ├── simple.csv
│               │   ├── simple.xls
│               │   ├── simple.xlsx
│               │   ├── style.xls
│               │   └── style.xlsx
│               ├── large/
│               │   ├── fill.xlsx
│               │   └── large07.xlsx
│               ├── logback.xml
│               ├── multiplesheets/
│               │   ├── multiplesheets.xls
│               │   └── multiplesheets.xlsx
│               ├── simple/
│               │   └── simple07.xlsx
│               ├── temp/
│               │   ├── issue1663/
│               │   │   └── template.xlsx
│               │   └── issue2443/
│               │       ├── date1.xlsx
│               │       └── date2.xlsx
│               └── template/
│                   ├── template03.xls
│                   └── template07.xlsx
├── easyexcel_en.md
├── lombok.config
├── mvnw
├── mvnw.cmd
├── pom.xml
├── quickstart.md
├── src/
│   └── test/
│       └── java/
│           └── com/
│               └── alibaba/
│                   └── easyexcel/
│                       └── test/
│                           └── demo/
│                               ├── fill/
│                               │   └── FillTest.java
│                               ├── read/
│                               │   └── ReadTest.java
│                               ├── web/
│                               │   └── WebTest.java
│                               └── write/
│                                   └── WriteTest.java
├── style/
│   ├── STYLE.md
│   └── codestyle/
│       ├── eclipse/
│       │   └── codestyle.xml
│       └── idea/
│           └── codestyle.xml
└── update.md
Download .txt
Showing preview only (242K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2798 symbols across 515 files)

FILE: easyexcel-core/src/main/java/com/alibaba/excel/EasyExcel.java
  class EasyExcel (line 8) | public class EasyExcel extends EasyExcelFactory {}

FILE: easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java
  class EasyExcelFactory (line 19) | public class EasyExcelFactory {
    method write (line 26) | public static ExcelWriterBuilder write() {
    method write (line 36) | public static ExcelWriterBuilder write(File file) {
    method write (line 47) | public static ExcelWriterBuilder write(File file, Class head) {
    method write (line 62) | public static ExcelWriterBuilder write(String pathName) {
    method write (line 73) | public static ExcelWriterBuilder write(String pathName, Class head) {
    method write (line 88) | public static ExcelWriterBuilder write(OutputStream outputStream) {
    method write (line 99) | public static ExcelWriterBuilder write(OutputStream outputStream, Clas...
    method writerSheet (line 113) | public static ExcelWriterSheetBuilder writerSheet() {
    method writerSheet (line 123) | public static ExcelWriterSheetBuilder writerSheet(Integer sheetNo) {
    method writerSheet (line 133) | public static ExcelWriterSheetBuilder writerSheet(String sheetName) {
    method writerSheet (line 144) | public static ExcelWriterSheetBuilder writerSheet(Integer sheetNo, Str...
    method writerTable (line 160) | public static ExcelWriterTableBuilder writerTable() {
    method writerTable (line 170) | public static ExcelWriterTableBuilder writerTable(Integer tableNo) {
    method read (line 183) | public static ExcelReaderBuilder read() {
    method read (line 193) | public static ExcelReaderBuilder read(File file) {
    method read (line 204) | public static ExcelReaderBuilder read(File file, ReadListener readList...
    method read (line 216) | public static ExcelReaderBuilder read(File file, Class head, ReadListe...
    method read (line 234) | public static ExcelReaderBuilder read(String pathName) {
    method read (line 245) | public static ExcelReaderBuilder read(String pathName, ReadListener re...
    method read (line 257) | public static ExcelReaderBuilder read(String pathName, Class head, Rea...
    method read (line 275) | public static ExcelReaderBuilder read(InputStream inputStream) {
    method read (line 286) | public static ExcelReaderBuilder read(InputStream inputStream, ReadLis...
    method read (line 298) | public static ExcelReaderBuilder read(InputStream inputStream, Class h...
    method readSheet (line 315) | public static ExcelReaderSheetBuilder readSheet() {
    method readSheet (line 325) | public static ExcelReaderSheetBuilder readSheet(Integer sheetNo) {
    method readSheet (line 335) | public static ExcelReaderSheetBuilder readSheet(String sheetName) {
    method readSheet (line 346) | public static ExcelReaderSheetBuilder readSheet(Integer sheetNo, Strin...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/ExcelReader.java
  class ExcelReader (line 21) | @Slf4j
    method ExcelReader (line 29) | public ExcelReader(ReadWorkbook readWorkbook) {
    method read (line 38) | @Deprecated
    method readAll (line 46) | public void readAll() {
    method read (line 55) | public ExcelReader read(ReadSheet... readSheet) {
    method read (line 65) | public ExcelReader read(List<ReadSheet> readSheetList) {
    method analysisContext (line 75) | public AnalysisContext analysisContext() {
    method excelExecutor (line 84) | public ExcelReadExecutor excelExecutor() {
    method getAnalysisContext (line 92) | @Deprecated
    method finish (line 100) | public void finish() {
    method close (line 106) | @Override
    method finalize (line 115) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/ExcelWriter.java
  class ExcelWriter (line 28) | @Slf4j
    method ExcelWriter (line 38) | public ExcelWriter(WriteWorkbook writeWorkbook) {
    method write (line 49) | public ExcelWriter write(Collection<?> data, WriteSheet writeSheet) {
    method write (line 60) | public ExcelWriter write(Supplier<Collection<?>> supplier, WriteSheet ...
    method write (line 72) | public ExcelWriter write(Collection<?> data, WriteSheet writeSheet, Wr...
    method write (line 85) | public ExcelWriter write(Supplier<Collection<?>> supplier, WriteSheet ...
    method fill (line 97) | public ExcelWriter fill(Object data, WriteSheet writeSheet) {
    method fill (line 109) | public ExcelWriter fill(Object data, FillConfig fillConfig, WriteSheet...
    method fill (line 121) | public ExcelWriter fill(Supplier<Object> supplier, WriteSheet writeShe...
    method fill (line 133) | public ExcelWriter fill(Supplier<Object> supplier, FillConfig fillConf...
    method finish (line 141) | public void finish() {
    method writeContext (line 152) | public WriteContext writeContext() {
    method close (line 156) | @Override
    method finalize (line 164) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
  type ExcelAnalyser (line 13) | public interface ExcelAnalyser {
    method analysis (line 22) | void analysis(List<ReadSheet> readSheetList, Boolean readAll);
    method finish (line 27) | void finish();
    method excelExecutor (line 34) | ExcelReadExecutor excelExecutor();
    method analysisContext (line 41) | AnalysisContext analysisContext();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
  class ExcelAnalyserImpl (line 42) | public class ExcelAnalyserImpl implements ExcelAnalyser {
    method ExcelAnalyserImpl (line 53) | public ExcelAnalyserImpl(ReadWorkbook readWorkbook) {
    method choiceExcelExecutor (line 65) | private void choiceExcelExecutor(ReadWorkbook readWorkbook) throws Exc...
    method analysis (line 115) | @Override
    method finish (line 139) | @Override
    method removeThreadLocalCache (line 213) | private void removeThreadLocalCache() {
    method clearEncrypt03 (line 219) | private void clearEncrypt03() {
    method excelExecutor (line 227) | @Override
    method analysisContext (line 232) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java
  type ExcelReadExecutor (line 12) | public interface ExcelReadExecutor {
    method sheetList (line 19) | List<ReadSheet> sheetList();
    method execute (line 24) | void execute();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java
  class CsvExcelReadExecutor (line 41) | @Slf4j
    method CsvExcelReadExecutor (line 47) | public CsvExcelReadExecutor(CsvReadContext csvReadContext) {
    method sheetList (line 55) | @Override
    method execute (line 60) | @Override
    method csvParser (line 93) | private CSVParser csvParser() throws IOException {
    method buildCsvParser (line 108) | private CSVParser buildCsvParser(CSVFormat csvFormat, InputStream inpu...
    method dealRecord (line 118) | private void dealRecord(CSVRecord record, int rowIndex) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java
  type IgnorableXlsRecordHandler (line 8) | public interface IgnorableXlsRecordHandler extends XlsRecordHandler {}

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java
  class XlsListSheetListener (line 27) | public class XlsListSheetListener implements HSSFListener {
    method XlsListSheetListener (line 36) | public XlsListSheetListener(XlsReadContext xlsReadContext) {
    method processRecord (line 41) | @Override
    method execute (line 50) | public void execute() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java
  type XlsRecordHandler (line 12) | public interface XlsRecordHandler {
    method support (line 20) | boolean support(XlsReadContext xlsReadContext, Record record);
    method processRecord (line 28) | void processRecord(XlsReadContext xlsReadContext, Record record);

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
  class XlsSaxAnalyser (line 80) | @Slf4j
    method XlsSaxAnalyser (line 110) | public XlsSaxAnalyser(XlsReadContext xlsReadContext) {
    method sheetList (line 114) | @Override
    method execute (line 128) | @Override
    method processRecord (line 150) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java
  class AbstractXlsRecordHandler (line 13) | public abstract class AbstractXlsRecordHandler implements XlsRecordHandl...
    method support (line 15) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java
  class BlankRecordHandler (line 15) | public class BlankRecordHandler extends AbstractXlsRecordHandler impleme...
    method processRecord (line 17) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java
  class BofRecordHandler (line 21) | public class BofRecordHandler extends AbstractXlsRecordHandler {
    method processRecord (line 23) | @Override
    method initReadSheetDataList (line 57) | private void initReadSheetDataList(XlsReadWorkbookHolder xlsReadWorkbo...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java
  class BoolErrRecordHandler (line 16) | public class BoolErrRecordHandler extends AbstractXlsRecordHandler imple...
    method processRecord (line 18) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java
  class BoundSheetRecordHandler (line 14) | public class BoundSheetRecordHandler extends AbstractXlsRecordHandler im...
    method processRecord (line 16) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java
  class DummyRecordHandler (line 22) | public class DummyRecordHandler extends AbstractXlsRecordHandler impleme...
    method processRecord (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java
  class EofRecordHandler (line 20) | public class EofRecordHandler extends AbstractXlsRecordHandler {
    method processRecord (line 22) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java
  class FormulaRecordHandler (line 28) | @Slf4j
    method processRecord (line 32) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java
  class HyperlinkRecordHandler (line 16) | public class HyperlinkRecordHandler extends AbstractXlsRecordHandler imp...
    method support (line 17) | @Override
    method processRecord (line 22) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java
  class IndexRecordHandler (line 14) | public class IndexRecordHandler extends AbstractXlsRecordHandler impleme...
    method processRecord (line 15) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java
  class LabelRecordHandler (line 16) | public class LabelRecordHandler extends AbstractXlsRecordHandler impleme...
    method processRecord (line 17) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java
  class LabelSstRecordHandler (line 20) | public class LabelSstRecordHandler extends AbstractXlsRecordHandler impl...
    method processRecord (line 22) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java
  class MergeCellsRecordHandler (line 17) | public class MergeCellsRecordHandler extends AbstractXlsRecordHandler im...
    method support (line 19) | @Override
    method processRecord (line 24) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java
  class NoteRecordHandler (line 16) | public class NoteRecordHandler extends AbstractXlsRecordHandler implemen...
    method support (line 18) | @Override
    method processRecord (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java
  class NumberRecordHandler (line 21) | public class NumberRecordHandler extends AbstractXlsRecordHandler implem...
    method processRecord (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java
  class ObjRecordHandler (line 16) | public class ObjRecordHandler extends AbstractXlsRecordHandler implement...
    method processRecord (line 17) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java
  class RkRecordHandler (line 15) | public class RkRecordHandler extends AbstractXlsRecordHandler implements...
    method processRecord (line 17) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java
  class SstRecordHandler (line 15) | public class SstRecordHandler extends AbstractXlsRecordHandler implement...
    method processRecord (line 16) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java
  class StringRecordHandler (line 18) | public class StringRecordHandler extends AbstractXlsRecordHandler implem...
    method processRecord (line 21) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java
  class TextObjectRecordHandler (line 18) | public class TextObjectRecordHandler extends AbstractXlsRecordHandler im...
    method support (line 21) | @Override
    method processRecord (line 26) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
  class XlsxSaxAnalyser (line 59) | @Slf4j
    method XlsxSaxAnalyser (line 84) | public XlsxSaxAnalyser(XlsxReadContext xlsxReadContext, InputStream de...
    method setStylesTable (line 147) | private void setStylesTable(XlsxReadWorkbookHolder xlsxReadWorkbookHol...
    method defaultReadCache (line 158) | private void defaultReadCache(XlsxReadWorkbookHolder xlsxReadWorkbookH...
    method analysisUse1904WindowDate (line 165) | private void analysisUse1904WindowDate(XSSFReader xssfReader, XlsxRead...
    method analysisSharedStringsTable (line 181) | private void analysisSharedStringsTable(InputStream sharedStringsTable...
    method readOpcPackage (line 188) | private OPCPackage readOpcPackage(XlsxReadWorkbookHolder xlsxReadWorkb...
    method sheetList (line 212) | @Override
    method parseXmlSource (line 217) | private void parseXmlSource(InputStream inputStream, ContentHandler ha...
    method execute (line 254) | @Override
    method readComments (line 275) | private void readComments(ReadSheet readSheet) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java
  class AbstractCellValueTagHandler (line 10) | public abstract class AbstractCellValueTagHandler extends AbstractXlsxTa...
    method characters (line 12) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java
  class AbstractXlsxTagHandler (line 12) | public abstract class AbstractXlsxTagHandler implements XlsxTagHandler {
    method support (line 13) | @Override
    method startElement (line 18) | @Override
    method endElement (line 23) | @Override
    method characters (line 28) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java
  class CellFormulaTagHandler (line 14) | public class CellFormulaTagHandler extends AbstractXlsxTagHandler {
    method startElement (line 16) | @Override
    method endElement (line 22) | @Override
    method characters (line 30) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java
  class CellInlineStringValueTagHandler (line 8) | public class CellInlineStringValueTagHandler extends AbstractCellValueTa...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java
  class CellTagHandler (line 22) | public class CellTagHandler extends AbstractXlsxTagHandler {
    method startElement (line 26) | @Override
    method endElement (line 56) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java
  class CellValueTagHandler (line 8) | public class CellValueTagHandler extends AbstractCellValueTagHandler {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java
  class CountTagHandler (line 14) | public class CountTagHandler extends AbstractXlsxTagHandler {
    method startElement (line 16) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java
  class HyperlinkTagHandler (line 20) | public class HyperlinkTagHandler extends AbstractXlsxTagHandler {
    method support (line 22) | @Override
    method startElement (line 27) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java
  class MergeCellTagHandler (line 16) | public class MergeCellTagHandler extends AbstractXlsxTagHandler {
    method support (line 18) | @Override
    method startElement (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java
  class RowTagHandler (line 23) | public class RowTagHandler extends AbstractXlsxTagHandler {
    method startElement (line 25) | @Override
    method endElement (line 42) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java
  type XlsxTagHandler (line 12) | public interface XlsxTagHandler {
    method support (line 20) | boolean support(XlsxReadContext xlsxReadContext);
    method startElement (line 32) | void startElement(XlsxReadContext xlsxReadContext, String name, Attrib...
    method endElement (line 42) | void endElement(XlsxReadContext xlsxReadContext, String name);
    method characters (line 52) | void characters(XlsxReadContext xlsxReadContext, char[] ch, int start,...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java
  class SharedStringsTableHandler (line 34) | public class SharedStringsTableHandler extends DefaultHandler {
    method SharedStringsTableHandler (line 57) | public SharedStringsTableHandler(ReadCache readCache) {
    method startElement (line 61) | @Override
    method endElement (line 88) | @Override
    method characters (line 124) | @Override
    method utfDecode (line 151) | static String utfDecode(String value) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java
  class XlsxRowHandler (line 26) | @Slf4j
    method XlsxRowHandler (line 66) | public XlsxRowHandler(XlsxReadContext xlsxReadContext) {
    method startElement (line 70) | @Override
    method characters (line 80) | @Override
    method endElement (line 93) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/Ehcache.java
  class Ehcache (line 27) | @Slf4j
    method Ehcache (line 57) | @Deprecated
    method Ehcache (line 62) | public Ehcache(Integer maxCacheActivateSize, Integer maxCacheActivateB...
    method init (line 91) | @Override
    method put (line 115) | @Override
    method get (line 131) | @Override
    method putFinished (line 150) | @Override
    method destroy (line 158) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/MapCache.java
  class MapCache (line 13) | public class MapCache implements ReadCache {
    method init (line 16) | @Override
    method put (line 19) | @Override
    method get (line 24) | @Override
    method putFinished (line 32) | @Override
    method destroy (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/ReadCache.java
  type ReadCache (line 10) | public interface ReadCache {
    method init (line 18) | void init(AnalysisContext analysisContext);
    method put (line 26) | void put(String value);
    method get (line 35) | String get(Integer key);
    method putFinished (line 40) | void putFinished();
    method destroy (line 45) | void destroy();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/XlsCache.java
  class XlsCache (line 13) | public class XlsCache implements ReadCache {
    method XlsCache (line 16) | public XlsCache(SSTRecord sstRecord) {
    method init (line 20) | @Override
    method put (line 23) | @Override
    method get (line 26) | @Override
    method putFinished (line 31) | @Override
    method destroy (line 34) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/EternalReadCacheSelector.java
  class EternalReadCacheSelector (line 12) | public class EternalReadCacheSelector implements ReadCacheSelector {
    method EternalReadCacheSelector (line 15) | public EternalReadCacheSelector(ReadCache readCache) {
    method readCache (line 19) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/ReadCacheSelector.java
  type ReadCacheSelector (line 12) | public interface ReadCacheSelector {
    method readCache (line 20) | ReadCache readCache(PackagePart sharedStringsTablePackagePart);

FILE: easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java
  class SimpleReadCacheSelector (line 22) | @Getter
    method SimpleReadCacheSelector (line 61) | public SimpleReadCacheSelector() {
    method SimpleReadCacheSelector (line 70) | @Deprecated
    method readCache (line 76) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/constant/BuiltinFormats.java
  class BuiltinFormats (line 22) | public class BuiltinFormats {
    method getBuiltinFormat (line 482) | public static String getBuiltinFormat(Short index, String defaultForma...
    method switchBuiltinFormats (line 508) | public static String[] switchBuiltinFormats(Locale locale) {
    method switchBuiltinFormatsMap (line 515) | public static Map<String, Short> switchBuiltinFormatsMap(Locale locale) {
    method buildMap (line 522) | private static Map<String, Short> buildMap(String[] builtinFormats) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/constant/EasyExcelConstants.java
  class EasyExcelConstants (line 11) | public class EasyExcelConstants {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java
  class ExcelXmlConstants (line 6) | public class ExcelXmlConstants {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/constant/OrderConstant.java
  class OrderConstant (line 8) | public class OrderConstant {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContext.java
  type AnalysisContext (line 21) | public interface AnalysisContext {
    method currentSheet (line 28) | void currentSheet(ReadSheet readSheet);
    method readWorkbookHolder (line 35) | ReadWorkbookHolder readWorkbookHolder();
    method readSheetHolder (line 42) | ReadSheetHolder readSheetHolder();
    method readRowHolder (line 50) | void readRowHolder(ReadRowHolder readRowHolder);
    method readRowHolder (line 57) | ReadRowHolder readRowHolder();
    method currentReadHolder (line 64) | ReadHolder currentReadHolder();
    method getCustom (line 71) | Object getCustom();
    method analysisEventProcessor (line 78) | AnalysisEventProcessor analysisEventProcessor();
    method readSheetList (line 85) | List<ReadSheet> readSheetList();
    method readSheetList (line 92) | void readSheetList(List<ReadSheet> readSheetList);
    method getExcelType (line 101) | @Deprecated
    method getInputStream (line 110) | @Deprecated
    method getCurrentRowNum (line 119) | @Deprecated
    method getTotalCount (line 128) | @Deprecated
    method getCurrentRowAnalysisResult (line 137) | @Deprecated
    method interrupt (line 145) | @Deprecated

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
  class AnalysisContextImpl (line 28) | @Slf4j
    method AnalysisContextImpl (line 51) | public AnalysisContextImpl(ReadWorkbook readWorkbook, ExcelTypeEnum ac...
    method currentSheet (line 75) | @Override
    method readWorkbookHolder (line 100) | @Override
    method readSheetHolder (line 105) | @Override
    method readRowHolder (line 110) | @Override
    method readRowHolder (line 115) | @Override
    method currentReadHolder (line 120) | @Override
    method getCustom (line 125) | @Override
    method analysisEventProcessor (line 130) | @Override
    method readSheetList (line 135) | @Override
    method readSheetList (line 140) | @Override
    method getExcelType (line 145) | @Override
    method getInputStream (line 150) | @Override
    method getCurrentRowNum (line 155) | @Override
    method getTotalCount (line 160) | @Override
    method getCurrentRowAnalysisResult (line 165) | @Override
    method interrupt (line 170) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContext.java
  type WriteContext (line 21) | public interface WriteContext {
    method currentSheet (line 29) | void currentSheet(WriteSheet writeSheet, WriteTypeEnum writeType);
    method currentTable (line 36) | void currentTable(WriteTable writeTable);
    method writeWorkbookHolder (line 43) | WriteWorkbookHolder writeWorkbookHolder();
    method writeSheetHolder (line 50) | WriteSheetHolder writeSheetHolder();
    method writeTableHolder (line 57) | WriteTableHolder writeTableHolder();
    method currentWriteHolder (line 65) | WriteHolder currentWriteHolder();
    method finish (line 72) | void finish(boolean onException);
    method getCurrentSheet (line 80) | @Deprecated
    method needHead (line 89) | @Deprecated
    method getOutputStream (line 98) | @Deprecated
    method getWorkbook (line 107) | @Deprecated

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java
  class WriteContextImpl (line 57) | public class WriteContextImpl implements WriteContext {
    method WriteContextImpl (line 83) | public WriteContextImpl(WriteWorkbook writeWorkbook) {
    method initCurrentWorkbookHolder (line 106) | private void initCurrentWorkbookHolder(WriteWorkbook writeWorkbook) {
    method currentSheet (line 117) | @Override
    method selectSheetFromCache (line 138) | private boolean selectSheetFromCache(WriteSheet writeSheet) {
    method initCurrentSheetHolder (line 165) | private void initCurrentSheetHolder(WriteSheet writeSheet) {
    method initSheet (line 174) | private void initSheet(WriteTypeEnum writeType) {
    method createSheet (line 215) | private Sheet createSheet() {
    method initHead (line 228) | public void initHead(ExcelWriteHeadProperty excelWriteHeadProperty) {
    method addMergedRegionToCurrentSheet (line 254) | private void addMergedRegionToCurrentSheet(ExcelWriteHeadProperty exce...
    method addOneRowOfHeadDataToExcel (line 262) | private void addOneRowOfHeadDataToExcel(Row row, Integer rowIndex, Map...
    method currentTable (line 288) | @Override
    method initCurrentTableHolder (line 324) | private void initCurrentTableHolder(WriteTable writeTable) {
    method writeWorkbookHolder (line 333) | @Override
    method writeSheetHolder (line 338) | @Override
    method writeTableHolder (line 343) | @Override
    method currentWriteHolder (line 348) | @Override
    method finish (line 353) | @Override
    method removeThreadLocalCache (line 427) | private void removeThreadLocalCache() {
    method getCurrentSheet (line 433) | @Override
    method needHead (line 438) | @Override
    method getOutputStream (line 443) | @Override
    method getWorkbook (line 448) | @Override
    method clearEncrypt03 (line 453) | private void clearEncrypt03() {
    method doOutputStreamEncrypt07 (line 464) | private boolean doOutputStreamEncrypt07() throws Exception {
    method doFileEncrypt07 (line 500) | private void doFileEncrypt07() throws Exception {
    method openFileSystemAndEncrypt (line 514) | private POIFSFileSystem openFileSystemAndEncrypt(File file) throws Exc...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/csv/CsvReadContext.java
  type CsvReadContext (line 12) | public interface CsvReadContext extends AnalysisContext {
    method csvReadWorkbookHolder (line 18) | CsvReadWorkbookHolder csvReadWorkbookHolder();
    method csvReadSheetHolder (line 25) | CsvReadSheetHolder csvReadSheetHolder();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/csv/DefaultCsvReadContext.java
  class DefaultCsvReadContext (line 14) | public class DefaultCsvReadContext extends AnalysisContextImpl implement...
    method DefaultCsvReadContext (line 16) | public DefaultCsvReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum ...
    method csvReadWorkbookHolder (line 20) | @Override
    method csvReadSheetHolder (line 25) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/xls/DefaultXlsReadContext.java
  class DefaultXlsReadContext (line 15) | public class DefaultXlsReadContext extends AnalysisContextImpl implement...
    method DefaultXlsReadContext (line 17) | public DefaultXlsReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum ...
    method xlsReadWorkbookHolder (line 21) | @Override
    method xlsReadSheetHolder (line 26) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/xls/XlsReadContext.java
  type XlsReadContext (line 12) | public interface XlsReadContext extends AnalysisContext {
    method xlsReadWorkbookHolder (line 18) | XlsReadWorkbookHolder xlsReadWorkbookHolder();
    method xlsReadSheetHolder (line 25) | XlsReadSheetHolder xlsReadSheetHolder();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/DefaultXlsxReadContext.java
  class DefaultXlsxReadContext (line 15) | public class DefaultXlsxReadContext extends AnalysisContextImpl implemen...
    method DefaultXlsxReadContext (line 17) | public DefaultXlsxReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum...
    method xlsxReadWorkbookHolder (line 21) | @Override
    method xlsxReadSheetHolder (line 26) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java
  type XlsxReadContext (line 12) | public interface XlsxReadContext extends AnalysisContext {
    method xlsxReadWorkbookHolder (line 18) | XlsxReadWorkbookHolder xlsxReadWorkbookHolder();
    method xlsxReadSheetHolder (line 25) | XlsxReadSheetHolder xlsxReadSheetHolder();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/AutoConverter.java
  class AutoConverter (line 8) | public class AutoConverter implements Converter<Object> {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/Converter.java
  type Converter (line 15) | public interface Converter<T> {
    method supportJavaTypeKey (line 22) | default Class<?> supportJavaTypeKey() {
    method supportExcelTypeKey (line 31) | default CellDataTypeEnum supportExcelTypeKey() {
    method convertToJavaData (line 44) | default T convertToJavaData(ReadCellData<?> cellData, ExcelContentProp...
    method convertToJavaData (line 56) | default T convertToJavaData(ReadConverterContext<?> context) throws Ex...
    method convertToExcelData (line 70) | default WriteCellData<?> convertToExcelData(T value, ExcelContentPrope...
    method convertToExcelData (line 82) | default WriteCellData<?> convertToExcelData(WriteConverterContext<T> c...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/ConverterKeyBuild.java
  class ConverterKeyBuild (line 18) | public class ConverterKeyBuild {
    method buildKey (line 33) | public static ConverterKey buildKey(Class<?> clazz) {
    method buildKey (line 37) | public static ConverterKey buildKey(Class<?> clazz, CellDataTypeEnum c...
    class ConverterKey (line 45) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java
  class DefaultConverterLoader (line 58) | public class DefaultConverterLoader {
    method initAllConverter (line 67) | private static void initAllConverter() {
    method initDefaultWriteConverter (line 120) | private static void initDefaultWriteConverter() {
    method loadDefaultWriteConverter (line 162) | public static Map<ConverterKey, Converter<?>> loadDefaultWriteConverte...
    method putWriteConverter (line 166) | private static void putWriteConverter(Converter<?> converter) {
    method putWriteStringConverter (line 170) | private static void putWriteStringConverter(Converter<?> converter) {
    method loadDefaultReadConverter (line 180) | public static Map<ConverterKey, Converter<?>> loadDefaultReadConverter...
    method loadAllConverter (line 189) | public static Map<ConverterKey, Converter<?>> loadAllConverter() {
    method putAllConverter (line 193) | private static void putAllConverter(Converter<?> converter) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java
  type NullableObjectConverter (line 9) | public interface NullableObjectConverter<T> extends Converter<T> {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/ReadConverterContext.java
  class ReadConverterContext (line 17) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/WriteConverterContext.java
  class WriteConverterContext (line 17) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalBooleanConverter.java
  class BigDecimalBooleanConverter (line 17) | public class BigDecimalBooleanConverter implements Converter<BigDecimal> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java
  class BigDecimalNumberConverter (line 18) | public class BigDecimalNumberConverter implements Converter<BigDecimal> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java
  class BigDecimalStringConverter (line 19) | public class BigDecimalStringConverter implements Converter<BigDecimal> {
    method supportJavaTypeKey (line 21) | @Override
    method supportExcelTypeKey (line 26) | @Override
    method convertToJavaData (line 31) | @Override
    method convertToExcelData (line 37) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java
  class BigIntegerBooleanConverter (line 17) | public class BigIntegerBooleanConverter implements Converter<BigInteger> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java
  class BigIntegerNumberConverter (line 18) | public class BigIntegerNumberConverter implements Converter<BigInteger> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java
  class BigIntegerStringConverter (line 19) | public class BigIntegerStringConverter implements Converter<BigInteger> {
    method supportJavaTypeKey (line 21) | @Override
    method supportExcelTypeKey (line 26) | @Override
    method convertToJavaData (line 31) | @Override
    method convertToExcelData (line 37) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanBooleanConverter.java
  class BooleanBooleanConverter (line 15) | public class BooleanBooleanConverter implements Converter<Boolean> {
    method supportJavaTypeKey (line 17) | @Override
    method supportExcelTypeKey (line 22) | @Override
    method convertToJavaData (line 27) | @Override
    method convertToExcelData (line 33) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java
  class BooleanNumberConverter (line 17) | public class BooleanNumberConverter implements Converter<Boolean> {
    method supportJavaTypeKey (line 18) | @Override
    method supportExcelTypeKey (line 23) | @Override
    method convertToJavaData (line 28) | @Override
    method convertToExcelData (line 37) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanStringConverter.java
  class BooleanStringConverter (line 15) | public class BooleanStringConverter implements Converter<Boolean> {
    method supportJavaTypeKey (line 17) | @Override
    method supportExcelTypeKey (line 22) | @Override
    method convertToJavaData (line 27) | @Override
    method convertToExcelData (line 33) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/BoxingByteArrayImageConverter.java
  class BoxingByteArrayImageConverter (line 13) | public class BoxingByteArrayImageConverter implements Converter<Byte[]> {
    method supportJavaTypeKey (line 14) | @Override
    method convertToExcelData (line 19) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/ByteArrayImageConverter.java
  class ByteArrayImageConverter (line 13) | public class ByteArrayImageConverter implements Converter<byte[]> {
    method supportJavaTypeKey (line 15) | @Override
    method convertToExcelData (line 20) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteBooleanConverter.java
  class ByteBooleanConverter (line 15) | public class ByteBooleanConverter implements Converter<Byte> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java
  class ByteNumberConverter (line 16) | public class ByteNumberConverter implements Converter<Byte> {
    method supportJavaTypeKey (line 18) | @Override
    method supportExcelTypeKey (line 23) | @Override
    method convertToJavaData (line 28) | @Override
    method convertToExcelData (line 34) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java
  class ByteStringConverter (line 18) | public class ByteStringConverter implements Converter<Byte> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java
  class DateDateConverter (line 17) | public class DateDateConverter implements Converter<Date> {
    method supportJavaTypeKey (line 18) | @Override
    method convertToExcelData (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java
  class DateNumberConverter (line 21) | public class DateNumberConverter implements Converter<Date> {
    method supportJavaTypeKey (line 23) | @Override
    method supportExcelTypeKey (line 28) | @Override
    method convertToJavaData (line 33) | @Override
    method convertToExcelData (line 45) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateStringConverter.java
  class DateStringConverter (line 19) | public class DateStringConverter implements Converter<Date> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 41) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java
  class DoubleBooleanConverter (line 15) | public class DoubleBooleanConverter implements Converter<Double> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java
  class DoubleNumberConverter (line 16) | public class DoubleNumberConverter implements Converter<Double> {
    method supportJavaTypeKey (line 18) | @Override
    method supportExcelTypeKey (line 23) | @Override
    method convertToJavaData (line 28) | @Override
    method convertToExcelData (line 34) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java
  class DoubleStringConverter (line 18) | public class DoubleStringConverter implements Converter<Double> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/file/FileImageConverter.java
  class FileImageConverter (line 17) | public class FileImageConverter implements Converter<File> {
    method supportJavaTypeKey (line 18) | @Override
    method convertToExcelData (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java
  class FloatBooleanConverter (line 15) | public class FloatBooleanConverter implements Converter<Float> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java
  class FloatNumberConverter (line 17) | public class FloatNumberConverter implements Converter<Float> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java
  class FloatStringConverter (line 18) | public class FloatStringConverter implements Converter<Float> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/inputstream/InputStreamImageConverter.java
  class InputStreamImageConverter (line 17) | public class InputStreamImageConverter implements Converter<InputStream> {
    method supportJavaTypeKey (line 18) | @Override
    method convertToExcelData (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java
  class IntegerBooleanConverter (line 15) | public class IntegerBooleanConverter implements Converter<Integer> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java
  class IntegerNumberConverter (line 17) | public class IntegerNumberConverter implements Converter<Integer> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java
  class IntegerStringConverter (line 18) | public class IntegerStringConverter implements Converter<Integer> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/localdate/LocalDateDateConverter.java
  class LocalDateDateConverter (line 18) | public class LocalDateDateConverter implements Converter<LocalDate> {
    method supportJavaTypeKey (line 19) | @Override
    method convertToExcelData (line 24) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/localdate/LocalDateNumberConverter.java
  class LocalDateNumberConverter (line 22) | public class LocalDateNumberConverter implements Converter<LocalDate> {
    method supportJavaTypeKey (line 24) | @Override
    method supportExcelTypeKey (line 29) | @Override
    method convertToJavaData (line 34) | @Override
    method convertToExcelData (line 46) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/localdate/LocalDateStringConverter.java
  class LocalDateStringConverter (line 19) | public class LocalDateStringConverter implements Converter<LocalDate> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 41) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java
  class LocalDateTimeDateConverter (line 17) | public class LocalDateTimeDateConverter implements Converter<LocalDateTi...
    method supportJavaTypeKey (line 18) | @Override
    method convertToExcelData (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeNumberConverter.java
  class LocalDateTimeNumberConverter (line 21) | public class LocalDateTimeNumberConverter implements Converter<LocalDate...
    method supportJavaTypeKey (line 23) | @Override
    method supportExcelTypeKey (line 28) | @Override
    method convertToJavaData (line 33) | @Override
    method convertToExcelData (line 45) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java
  class LocalDateTimeStringConverter (line 19) | public class LocalDateTimeStringConverter implements Converter<LocalDate...
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 41) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongBooleanConverter.java
  class LongBooleanConverter (line 15) | public class LongBooleanConverter implements Converter<Long> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java
  class LongNumberConverter (line 17) | public class LongNumberConverter implements Converter<Long> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java
  class LongStringConverter (line 18) | public class LongStringConverter implements Converter<Long> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortBooleanConverter.java
  class ShortBooleanConverter (line 15) | public class ShortBooleanConverter implements Converter<Short> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 38) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java
  class ShortNumberConverter (line 17) | public class ShortNumberConverter implements Converter<Short> {
    method supportJavaTypeKey (line 19) | @Override
    method supportExcelTypeKey (line 24) | @Override
    method convertToJavaData (line 29) | @Override
    method convertToExcelData (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortStringConverter.java
  class ShortStringConverter (line 18) | public class ShortStringConverter implements Converter<Short> {
    method supportJavaTypeKey (line 20) | @Override
    method supportExcelTypeKey (line 25) | @Override
    method convertToJavaData (line 30) | @Override
    method convertToExcelData (line 36) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringBooleanConverter.java
  class StringBooleanConverter (line 15) | public class StringBooleanConverter implements Converter<String> {
    method supportJavaTypeKey (line 17) | @Override
    method supportExcelTypeKey (line 22) | @Override
    method convertToJavaData (line 27) | @Override
    method convertToExcelData (line 33) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringErrorConverter.java
  class StringErrorConverter (line 15) | public class StringErrorConverter implements Converter<String> {
    method supportJavaTypeKey (line 16) | @Override
    method supportExcelTypeKey (line 21) | @Override
    method convertToJavaData (line 26) | @Override
    method convertToExcelData (line 32) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringImageConverter.java
  class StringImageConverter (line 17) | public class StringImageConverter implements Converter<String> {
    method supportJavaTypeKey (line 18) | @Override
    method convertToExcelData (line 23) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java
  class StringNumberConverter (line 23) | public class StringNumberConverter implements Converter<String> {
    method supportJavaTypeKey (line 25) | @Override
    method supportExcelTypeKey (line 30) | @Override
    method convertToJavaData (line 35) | @Override
    method convertToExcelData (line 60) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringStringConverter.java
  class StringStringConverter (line 15) | public class StringStringConverter implements Converter<String> {
    method supportJavaTypeKey (line 16) | @Override
    method supportExcelTypeKey (line 21) | @Override
    method convertToJavaData (line 26) | @Override
    method convertToExcelData (line 32) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/converters/url/UrlImageConverter.java
  class UrlImageConverter (line 20) | public class UrlImageConverter implements Converter<URL> {
    method supportJavaTypeKey (line 24) | @Override
    method convertToExcelData (line 29) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/BooleanEnum.java
  type BooleanEnum (line 11) | @Getter
    method BooleanEnum (line 29) | BooleanEnum(Boolean booleanValue) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java
  type ByteOrderMarkEnum (line 16) | @Getter
    method ByteOrderMarkEnum (line 45) | ByteOrderMarkEnum(ByteOrderMark byteOrderMark) {
    method valueOfByCharsetName (line 62) | public static ByteOrderMarkEnum valueOfByCharsetName(String charsetNam...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/CacheLocationEnum.java
  type CacheLocationEnum (line 8) | public enum CacheLocationEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java
  type CellDataTypeEnum (line 13) | public enum CellDataTypeEnum {
    method buildFromCellType (line 66) | public static CellDataTypeEnum buildFromCellType(String cellType) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/CellExtraTypeEnum.java
  type CellExtraTypeEnum (line 8) | public enum CellExtraTypeEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/HeadKindEnum.java
  type HeadKindEnum (line 8) | public enum HeadKindEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/HolderEnum.java
  type HolderEnum (line 8) | public enum HolderEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/NumericCellTypeEnum.java
  type NumericCellTypeEnum (line 12) | public enum NumericCellTypeEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/ReadDefaultReturnEnum.java
  type ReadDefaultReturnEnum (line 16) | public enum ReadDefaultReturnEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/RowTypeEnum.java
  type RowTypeEnum (line 8) | public enum RowTypeEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteDirectionEnum.java
  type WriteDirectionEnum (line 8) | public enum WriteDirectionEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteLastRowTypeEnum.java
  type WriteLastRowTypeEnum (line 8) | public enum WriteLastRowTypeEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTemplateAnalysisCellTypeEnum.java
  type WriteTemplateAnalysisCellTypeEnum (line 8) | public enum WriteTemplateAnalysisCellTypeEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTypeEnum.java
  type WriteTypeEnum (line 8) | public enum WriteTypeEnum {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/BorderStyleEnum.java
  type BorderStyleEnum (line 13) | @Getter
    method BorderStyleEnum (line 92) | BorderStyleEnum(BorderStyle poiBorderStyle) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/FillPatternTypeEnum.java
  type FillPatternTypeEnum (line 11) | @Getter
    method FillPatternTypeEnum (line 116) | FillPatternTypeEnum(FillPatternType poiFillPatternType) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/HorizontalAlignmentEnum.java
  type HorizontalAlignmentEnum (line 12) | @Getter
    method HorizontalAlignmentEnum (line 89) | HorizontalAlignmentEnum(HorizontalAlignment poiHorizontalAlignment) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/VerticalAlignmentEnum.java
  type VerticalAlignmentEnum (line 15) | @Getter
    method VerticalAlignmentEnum (line 68) | VerticalAlignmentEnum(VerticalAlignment poiVerticalAlignmentEnum) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java
  class AbstractIgnoreExceptionReadListener (line 13) | @Deprecated
    method onException (line 23) | @Override
    method extra (line 32) | @Override
    method hasNext (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/AnalysisEventListener.java
  class AnalysisEventListener (line 15) | public abstract class AnalysisEventListener<T> implements ReadListener<T> {
    method invokeHead (line 17) | @Override
    method invokeHeadMap (line 28) | public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContex...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/Handler.java
  type Handler (line 10) | public interface Handler extends Order {
    method order (line 17) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/Listener.java
  type Listener (line 8) | public interface Listener {}

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/NotRepeatExecutor.java
  type NotRepeatExecutor (line 9) | public interface NotRepeatExecutor {
    method uniqueValue (line 15) | String uniqueValue();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/Order.java
  type Order (line 8) | public interface Order {
    method order (line 14) | int order();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/event/SyncReadListener.java
  class SyncReadListener (line 13) | public class SyncReadListener extends AnalysisEventListener<Object> {
    method invoke (line 16) | @Override
    method doAfterAllAnalysed (line 21) | @Override
    method getList (line 24) | public List<Object> getList() {
    method setList (line 28) | public void setList(List<Object> list) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java
  class ExcelAnalysisException (line 7) | public class ExcelAnalysisException extends ExcelRuntimeException {
    method ExcelAnalysisException (line 9) | public ExcelAnalysisException() {}
    method ExcelAnalysisException (line 11) | public ExcelAnalysisException(String message) {
    method ExcelAnalysisException (line 15) | public ExcelAnalysisException(String message, Throwable cause) {
    method ExcelAnalysisException (line 19) | public ExcelAnalysisException(Throwable cause) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopException.java
  class ExcelAnalysisStopException (line 11) | public class ExcelAnalysisStopException extends ExcelAnalysisException {
    method ExcelAnalysisStopException (line 13) | public ExcelAnalysisStopException() {}
    method ExcelAnalysisStopException (line 15) | public ExcelAnalysisStopException(String message) {
    method ExcelAnalysisStopException (line 19) | public ExcelAnalysisStopException(String message, Throwable cause) {
    method ExcelAnalysisStopException (line 23) | public ExcelAnalysisStopException(Throwable cause) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopSheetException.java
  class ExcelAnalysisStopSheetException (line 15) | public class ExcelAnalysisStopSheetException extends ExcelAnalysisExcept...
    method ExcelAnalysisStopSheetException (line 17) | public ExcelAnalysisStopSheetException() {}
    method ExcelAnalysisStopSheetException (line 19) | public ExcelAnalysisStopSheetException(String message) {
    method ExcelAnalysisStopSheetException (line 23) | public ExcelAnalysisStopSheetException(String message, Throwable cause) {
    method ExcelAnalysisStopSheetException (line 27) | public ExcelAnalysisStopSheetException(Throwable cause) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java
  class ExcelCommonException (line 7) | public class ExcelCommonException extends ExcelRuntimeException {
    method ExcelCommonException (line 9) | public ExcelCommonException() {}
    method ExcelCommonException (line 11) | public ExcelCommonException(String message) {
    method ExcelCommonException (line 15) | public ExcelCommonException(String message, Throwable cause) {
    method ExcelCommonException (line 19) | public ExcelCommonException(Throwable cause) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java
  class ExcelDataConvertException (line 16) | @Getter
    method ExcelDataConvertException (line 39) | public ExcelDataConvertException(Integer rowIndex, Integer columnIndex...
    method ExcelDataConvertException (line 48) | public ExcelDataConvertException(Integer rowIndex, Integer columnIndex...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java
  class ExcelGenerateException (line 6) | public class ExcelGenerateException extends ExcelRuntimeException {
    method ExcelGenerateException (line 8) | public ExcelGenerateException(String message) {
    method ExcelGenerateException (line 12) | public ExcelGenerateException(String message, Throwable cause) {
    method ExcelGenerateException (line 16) | public ExcelGenerateException(Throwable cause) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelRuntimeException.java
  class ExcelRuntimeException (line 7) | public class ExcelRuntimeException extends RuntimeException {
    method ExcelRuntimeException (line 8) | public ExcelRuntimeException() {}
    method ExcelRuntimeException (line 10) | public ExcelRuntimeException(String message) {
    method ExcelRuntimeException (line 14) | public ExcelRuntimeException(String message, Throwable cause) {
    method ExcelRuntimeException (line 18) | public ExcelRuntimeException(Throwable cause) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelWriteDataConvertException.java
  class ExcelWriteDataConvertException (line 14) | @Getter
    method ExcelWriteDataConvertException (line 23) | public ExcelWriteDataConvertException(CellWriteHandlerContext cellWrit...
    method ExcelWriteDataConvertException (line 29) | public ExcelWriteDataConvertException(CellWriteHandlerContext cellWrit...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractCell.java
  class AbstractCell (line 12) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
  class AbstractHolder (line 19) | @Getter
    method AbstractHolder (line 48) | public AbstractHolder(BasicParameter basicParameter, AbstractHolder pr...
    method converterMap (line 97) | @Override
    method globalConfiguration (line 102) | @Override
    method isNew (line 107) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java
  class AbstractParameterBuilder (line 15) | public abstract class AbstractParameterBuilder<T extends AbstractParamet...
    method head (line 22) | public T head(List<List<String>> head) {
    method head (line 33) | public T head(Class<?> clazz) {
    method registerConverter (line 44) | public T registerConverter(Converter<?> converter) {
    method use1904windowing (line 60) | public T use1904windowing(Boolean use1904windowing) {
    method locale (line 72) | public T locale(Locale locale) {
    method filedCacheLocation (line 84) | public T filedCacheLocation(CacheLocationEnum filedCacheLocation) {
    method autoTrim (line 95) | public T autoTrim(Boolean autoTrim) {
    method self (line 100) | @SuppressWarnings("unchecked")
    method parameter (line 110) | protected abstract C parameter();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java
  class BasicParameter (line 18) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/Cell.java
  type Cell (line 8) | public interface Cell {
    method getRowIndex (line 14) | Integer getRowIndex();
    method getColumnIndex (line 21) | Integer getColumnIndex();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellExtra.java
  class CellExtra (line 13) | public class CellExtra extends AbstractCell {
    method CellExtra (line 39) | public CellExtra(CellExtraTypeEnum type, String text, String range) {
    method CellExtra (line 57) | public CellExtra(CellExtraTypeEnum type, String text, Integer rowIndex...
    method CellExtra (line 61) | public CellExtra(CellExtraTypeEnum type, String text, Integer firstRow...
    method getType (line 74) | public CellExtraTypeEnum getType() {
    method setType (line 78) | public void setType(CellExtraTypeEnum type) {
    method getText (line 82) | public String getText() {
    method setText (line 86) | public void setText(String text) {
    method getFirstRowIndex (line 90) | public Integer getFirstRowIndex() {
    method setFirstRowIndex (line 94) | public void setFirstRowIndex(Integer firstRowIndex) {
    method getFirstColumnIndex (line 98) | public Integer getFirstColumnIndex() {
    method setFirstColumnIndex (line 102) | public void setFirstColumnIndex(Integer firstColumnIndex) {
    method getLastRowIndex (line 106) | public Integer getLastRowIndex() {
    method setLastRowIndex (line 110) | public void setLastRowIndex(Integer lastRowIndex) {
    method getLastColumnIndex (line 114) | public Integer getLastColumnIndex() {
    method setLastColumnIndex (line 118) | public void setLastColumnIndex(Integer lastColumnIndex) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellRange.java
  class CellRange (line 10) | @Getter
    method CellRange (line 20) | public CellRange(int firstRow, int lastRow, int firstCol, int lastCol) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/ConfigurationHolder.java
  type ConfigurationHolder (line 13) | public interface ConfigurationHolder extends Holder {
    method isNew (line 20) | boolean isNew();
    method globalConfiguration (line 27) | GlobalConfiguration globalConfiguration();
    method converterMap (line 34) | Map<ConverterKey, Converter<?>> converterMap();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldCache.java
  class FieldCache (line 17) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldWrapper.java
  class FieldWrapper (line 20) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/Font.java
  class Font (line 8) | @Deprecated
    method getFontName (line 23) | public String getFontName() {
    method setFontName (line 27) | public void setFontName(String fontName) {
    method getFontHeightInPoints (line 31) | public short getFontHeightInPoints() {
    method setFontHeightInPoints (line 35) | public void setFontHeightInPoints(short fontHeightInPoints) {
    method isBold (line 39) | public boolean isBold() {
    method setBold (line 43) | public void setBold(boolean bold) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java
  class GlobalConfiguration (line 16) | @Getter
    method GlobalConfiguration (line 52) | public GlobalConfiguration() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/Head.java
  class Head (line 22) | @Getter
    method Head (line 69) | public Head(Integer columnIndex, Field field, String fieldName, List<S...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/Holder.java
  type Holder (line 11) | public interface Holder {
    method holderType (line 18) | HolderEnum holderType();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/NullObject.java
  class NullObject (line 8) | public class NullObject {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java
  class CsvCell (line 32) | @Getter
    method CsvCell (line 104) | public CsvCell(CsvWorkbook csvWorkbook, CsvSheet csvSheet, CsvRow csvR...
    method setCellTypeImpl (line 115) | @Override
    method setCellFormulaImpl (line 120) | @Override
    method removeFormulaImpl (line 128) | @Override
    method setCellValueImpl (line 133) | @Override
    method setCellValueImpl (line 139) | @Override
    method setCellValueImpl (line 149) | @Override
    method setCellValueImpl (line 156) | @Override
    method setCellValueImpl (line 165) | @Override
    method setCellValueImpl (line 171) | @Override
    method setCellValue (line 177) | @Override
    method setCellValue (line 186) | @Override
    method getSpreadsheetVersion (line 195) | @Override
    method getColumnIndex (line 200) | @Override
    method getRowIndex (line 205) | @Override
    method getSheet (line 210) | @Override
    method getRow (line 215) | @Override
    method getCellType (line 220) | @Override
    method getCachedFormulaResultType (line 225) | @Override
    method getCellFormula (line 230) | @Override
    method getNumericCellValue (line 238) | @Override
    method getDateCellValue (line 246) | @Override
    method getLocalDateTimeCellValue (line 254) | @Override
    method getRichStringCellValue (line 259) | @Override
    method getStringCellValue (line 264) | @Override
    method setCellValue (line 269) | @Override
    method setCellErrorValue (line 275) | @Override
    method getBooleanCellValue (line 281) | @Override
    method getErrorCellValue (line 289) | @Override
    method setCellStyle (line 297) | @Override
    method getCellStyle (line 302) | @Override
    method setAsActiveCell (line 307) | @Override
    method setCellComment (line 312) | @Override
    method getCellComment (line 317) | @Override
    method removeCellComment (line 322) | @Override
    method getHyperlink (line 327) | @Override
    method setHyperlink (line 332) | @Override
    method removeHyperlink (line 337) | @Override
    method getArrayFormulaRange (line 342) | @Override
    method isPartOfArrayFormulaGroup (line 347) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java
  class CsvCellStyle (line 21) | @Getter
    method CsvCellStyle (line 36) | public CsvCellStyle(Short index) {
    method getIndex (line 40) | @Override
    method setDataFormat (line 45) | @Override
    method initDataFormatData (line 51) | private void initDataFormatData() {
    method getDataFormat (line 57) | @Override
    method getDataFormatString (line 65) | @Override
    method setFont (line 73) | @Override
    method getFontIndex (line 78) | @Override
    method getFontIndexAsInt (line 83) | @Override
    method setHidden (line 88) | @Override
    method getHidden (line 93) | @Override
    method setLocked (line 98) | @Override
    method getLocked (line 103) | @Override
    method setQuotePrefixed (line 108) | @Override
    method getQuotePrefixed (line 113) | @Override
    method setAlignment (line 118) | @Override
    method getAlignment (line 123) | @Override
    method setWrapText (line 128) | @Override
    method getWrapText (line 133) | @Override
    method setVerticalAlignment (line 138) | @Override
    method getVerticalAlignment (line 143) | @Override
    method setRotation (line 148) | @Override
    method getRotation (line 153) | @Override
    method setIndention (line 158) | @Override
    method getIndention (line 163) | @Override
    method setBorderLeft (line 168) | @Override
    method getBorderLeft (line 173) | @Override
    method setBorderRight (line 178) | @Override
    method getBorderRight (line 183) | @Override
    method setBorderTop (line 188) | @Override
    method getBorderTop (line 193) | @Override
    method setBorderBottom (line 198) | @Override
    method getBorderBottom (line 203) | @Override
    method setLeftBorderColor (line 208) | @Override
    method getLeftBorderColor (line 213) | @Override
    method setRightBorderColor (line 218) | @Override
    method getRightBorderColor (line 223) | @Override
    method setTopBorderColor (line 228) | @Override
    method getTopBorderColor (line 233) | @Override
    method setBottomBorderColor (line 238) | @Override
    method getBottomBorderColor (line 243) | @Override
    method setFillPattern (line 248) | @Override
    method getFillPattern (line 253) | @Override
    method setFillBackgroundColor (line 258) | @Override
    method setFillBackgroundColor (line 263) | @Override
    method getFillBackgroundColor (line 268) | @Override
    method getFillBackgroundColorColor (line 273) | @Override
    method setFillForegroundColor (line 278) | @Override
    method setFillForegroundColor (line 283) | @Override
    method getFillForegroundColor (line 288) | @Override
    method getFillForegroundColorColor (line 293) | @Override
    method cloneStyleFrom (line 298) | @Override
    method setShrinkToFit (line 303) | @Override
    method getShrinkToFit (line 308) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java
  class CsvDataFormat (line 18) | public class CsvDataFormat implements DataFormat {
    method CsvDataFormat (line 31) | public CsvDataFormat(Locale locale) {
    method getFormat (line 38) | @Override
    method getFormat (line 55) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvRichTextString.java
  class CsvRichTextString (line 11) | public class CsvRichTextString implements RichTextString {
    method CsvRichTextString (line 17) | public CsvRichTextString(String string) {
    method applyFont (line 21) | @Override
    method applyFont (line 26) | @Override
    method applyFont (line 31) | @Override
    method clearFormatting (line 36) | @Override
    method getString (line 41) | @Override
    method length (line 46) | @Override
    method numFormattingRuns (line 54) | @Override
    method getIndexOfFormattingRun (line 59) | @Override
    method applyFont (line 64) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvRow.java
  class CsvRow (line 22) | @Getter
    method CsvRow (line 52) | public CsvRow(CsvWorkbook csvWorkbook, CsvSheet csvSheet, Integer rowI...
    method createCell (line 59) | @Override
    method createCell (line 66) | @Override
    method removeCell (line 73) | @Override
    method setRowNum (line 78) | @Override
    method getRowNum (line 83) | @Override
    method getCell (line 88) | @Override
    method getCell (line 96) | @Override
    method getFirstCellNum (line 101) | @Override
    method getLastCellNum (line 109) | @Override
    method getPhysicalNumberOfCells (line 117) | @Override
    method setHeight (line 122) | @Override
    method setZeroHeight (line 127) | @Override
    method getZeroHeight (line 132) | @Override
    method setHeightInPoints (line 137) | @Override
    method getHeight (line 142) | @Override
    method getHeightInPoints (line 147) | @Override
    method isFormatted (line 152) | @Override
    method getRowStyle (line 157) | @Override
    method setRowStyle (line 162) | @Override
    method cellIterator (line 167) | @Override
    method getSheet (line 172) | @Override
    method getOutlineLevel (line 177) | @Override
    method shiftCellsRight (line 182) | @Override
    method shiftCellsLeft (line 187) | @Override
    method iterator (line 192) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java
  class CsvSheet (line 58) | @Getter
    method CsvSheet (line 94) | public CsvSheet(CsvWorkbook csvWorkbook, Appendable out) {
    method createRow (line 102) | @Override
    method initSheet (line 115) | private void initSheet() {
    method removeRow (line 134) | @Override
    method getRow (line 139) | @Override
    method getPhysicalNumberOfRows (line 148) | @Override
    method getFirstRowNum (line 153) | @Override
    method getLastRowNum (line 161) | @Override
    method setColumnHidden (line 166) | @Override
    method isColumnHidden (line 171) | @Override
    method setRightToLeft (line 176) | @Override
    method isRightToLeft (line 181) | @Override
    method setColumnWidth (line 186) | @Override
    method getColumnWidth (line 191) | @Override
    method getColumnWidthInPixels (line 196) | @Override
    method setDefaultColumnWidth (line 201) | @Override
    method getDefaultColumnWidth (line 206) | @Override
    method getDefaultRowHeight (line 211) | @Override
    method getDefaultRowHeightInPoints (line 216) | @Override
    method setDefaultRowHeight (line 221) | @Override
    method setDefaultRowHeightInPoints (line 226) | @Override
    method getColumnStyle (line 231) | @Override
    method addMergedRegion (line 236) | @Override
    method addMergedRegionUnsafe (line 241) | @Override
    method validateMergedRegions (line 246) | @Override
    method setVerticallyCenter (line 251) | @Override
    method setHorizontallyCenter (line 256) | @Override
    method getHorizontallyCenter (line 261) | @Override
    method getVerticallyCenter (line 266) | @Override
    method removeMergedRegion (line 271) | @Override
    method removeMergedRegions (line 276) | @Override
    method getNumMergedRegions (line 281) | @Override
    method getMergedRegion (line 286) | @Override
    method getMergedRegions (line 291) | @Override
    method rowIterator (line 296) | @Override
    method setForceFormulaRecalculation (line 301) | @Override
    method getForceFormulaRecalculation (line 306) | @Override
    method setAutobreaks (line 311) | @Override
    method setDisplayGuts (line 316) | @Override
    method setDisplayZeros (line 321) | @Override
    method isDisplayZeros (line 326) | @Override
    method setFitToPage (line 331) | @Override
    method setRowSumsBelow (line 336) | @Override
    method setRowSumsRight (line 341) | @Override
    method getAutobreaks (line 346) | @Override
    method getDisplayGuts (line 351) | @Override
    method getFitToPage (line 356) | @Override
    method getRowSumsBelow (line 361) | @Override
    method getRowSumsRight (line 366) | @Override
    method isPrintGridlines (line 371) | @Override
    method setPrintGridlines (line 376) | @Override
    method isPrintRowAndColumnHeadings (line 381) | @Override
    method setPrintRowAndColumnHeadings (line 386) | @Override
    method getPrintSetup (line 391) | @Override
    method getHeader (line 396) | @Override
    method getFooter (line 401) | @Override
    method setSelected (line 406) | @Override
    method getMargin (line 411) | @Override
    method getMargin (line 416) | @Override
    method setMargin (line 421) | @Override
    method setMargin (line 426) | @Override
    method getProtect (line 431) | @Override
    method protectSheet (line 436) | @Override
    method getScenarioProtect (line 441) | @Override
    method setZoom (line 446) | @Override
    method getTopRow (line 451) | @Override
    method getLeftCol (line 456) | @Override
    method showInPane (line 461) | @Override
    method shiftRows (line 466) | @Override
    method shiftRows (line 471) | @Override
    method shiftColumns (line 476) | @Override
    method createFreezePane (line 481) | @Override
    method createFreezePane (line 486) | @Override
    method createSplitPane (line 491) | @Override
    method createSplitPane (line 496) | @Override
    method getPaneInformation (line 501) | @Override
    method setDisplayGridlines (line 506) | @Override
    method isDisplayGridlines (line 511) | @Override
    method setDisplayFormulas (line 516) | @Override
    method isDisplayFormulas (line 521) | @Override
    method setDisplayRowColHeadings (line 526) | @Override
    method isDisplayRowColHeadings (line 531) | @Override
    method setRowBreak (line 536) | @Override
    method isRowBroken (line 541) | @Override
    method removeRowBreak (line 546) | @Override
    method getRowBreaks (line 551) | @Override
    method getColumnBreaks (line 556) | @Override
    method setColumnBreak (line 561) | @Override
    method isColumnBroken (line 566) | @Override
    method removeColumnBreak (line 571) | @Override
    method setColumnGroupCollapsed (line 576) | @Override
    method groupColumn (line 581) | @Override
    method ungroupColumn (line 586) | @Override
    method groupRow (line 591) | @Override
    method ungroupRow (line 596) | @Override
    method setRowGroupCollapsed (line 601) | @Override
    method setDefaultColumnStyle (line 606) | @Override
    method autoSizeColumn (line 611) | @Override
    method autoSizeColumn (line 616) | @Override
    method getCellComment (line 621) | @Override
    method getCellComments (line 626) | @Override
    method getDrawingPatriarch (line 631) | @Override
    method createDrawingPatriarch (line 636) | @Override
    method getWorkbook (line 641) | @Override
    method getSheetName (line 646) | @Override
    method isSelected (line 651) | @Override
    method setArrayFormula (line 656) | @Override
    method removeArrayFormula (line 662) | @Override
    method getDataValidationHelper (line 667) | @Override
    method getDataValidations (line 672) | @Override
    method addValidationData (line 677) | @Override
    method setAutoFilter (line 682) | @Override
    method getSheetConditionalFormatting (line 687) | @Override
    method getRepeatingRows (line 692) | @Override
    method getRepeatingColumns (line 697) | @Override
    method setRepeatingRows (line 702) | @Override
    method setRepeatingColumns (line 707) | @Override
    method getColumnOutlineLevel (line 712) | @Override
    method getHyperlink (line 717) | @Override
    method getHyperlink (line 722) | @Override
    method getHyperlinkList (line 727) | @Override
    method getActiveCell (line 732) | @Override
    method setActiveCell (line 737) | @Override
    method iterator (line 742) | @Override
    method close (line 747) | @Override
    method printData (line 757) | public void printData() {
    method flushData (line 763) | public void flushData() {
    method buildCellValue (line 783) | private String buildCellValue(CsvCell csvCell) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java
  class CsvWorkbook (line 34) | @Getter
    method CsvWorkbook (line 87) | public CsvWorkbook(Appendable out, Locale locale, Boolean use1904windo...
    method getActiveSheetIndex (line 97) | @Override
    method setActiveSheet (line 102) | @Override
    method getFirstVisibleTab (line 107) | @Override
    method setFirstVisibleTab (line 112) | @Override
    method setSheetOrder (line 117) | @Override
    method setSelectedTab (line 122) | @Override
    method setSheetName (line 127) | @Override
    method getSheetName (line 132) | @Override
    method getSheetIndex (line 137) | @Override
    method getSheetIndex (line 142) | @Override
    method createSheet (line 147) | @Override
    method createSheet (line 154) | @Override
    method cloneSheet (line 161) | @Override
    method sheetIterator (line 166) | @Override
    method getNumberOfSheets (line 171) | @Override
    method getSheetAt (line 176) | @Override
    method getSheet (line 182) | @Override
    method removeSheetAt (line 187) | @Override
    method createFont (line 192) | @Override
    method findFont (line 197) | @Override
    method getNumberOfFonts (line 203) | @Override
    method getNumberOfFontsAsInt (line 208) | @Override
    method getFontAt (line 213) | @Override
    method createCellStyle (line 218) | @Override
    method getNumCellStyles (line 228) | @Override
    method getCellStyleAt (line 233) | @Override
    method write (line 241) | @Override
    method close (line 246) | @Override
    method getNumberOfNames (line 251) | @Override
    method getName (line 256) | @Override
    method getNames (line 261) | @Override
    method getAllNames (line 266) | @Override
    method createName (line 271) | @Override
    method removeName (line 276) | @Override
    method linkExternalWorkbook (line 281) | @Override
    method setPrintArea (line 286) | @Override
    method setPrintArea (line 291) | @Override
    method getPrintArea (line 296) | @Override
    method removePrintArea (line 301) | @Override
    method getMissingCellPolicy (line 306) | @Override
    method setMissingCellPolicy (line 311) | @Override
    method createDataFormat (line 316) | @Override
    method addPicture (line 325) | @Override
    method getAllPictures (line 330) | @Override
    method getCreationHelper (line 335) | @Override
    method isHidden (line 340) | @Override
    method setHidden (line 345) | @Override
    method isSheetHidden (line 350) | @Override
    method isSheetVeryHidden (line 355) | @Override
    method setSheetHidden (line 360) | @Override
    method getSheetVisibility (line 365) | @Override
    method setSheetVisibility (line 370) | @Override
    method addToolPack (line 375) | @Override
    method setForceFormulaRecalculation (line 380) | @Override
    method getForceFormulaRecalculation (line 385) | @Override
    method getSpreadsheetVersion (line 390) | @Override
    method addOlePackage (line 395) | @Override
    method createEvaluationWorkbook (line 400) | @Override
    method getCellReferenceType (line 405) | @Override
    method setCellReferenceType (line 410) | @Override
    method iterator (line 415) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CellData.java
  class CellData (line 21) | @Getter
    method checkEmpty (line 55) | public void checkEmpty() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java
  class ClientAnchorData (line 25) | @Getter
    type AnchorType (line 54) | @Getter
      method AnchorType (line 108) | AnchorType(ClientAnchor.AnchorType value) {
      method byId (line 118) | @Internal

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CommentData.java
  class CommentData (line 12) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java
  class CoordinateData (line 12) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/DataFormatData.java
  class DataFormatData (line 14) | @Getter
    method merge (line 34) | public static void merge(DataFormatData source, DataFormatData target) {
    method clone (line 46) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/FormulaData.java
  class FormulaData (line 12) | @Getter
    method clone (line 21) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java
  class HyperlinkData (line 12) | @Getter
    type HyperlinkType (line 25) | @Getter
      method HyperlinkType (line 54) | HyperlinkType(org.apache.poi.common.usermodel.HyperlinkType value) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ImageData.java
  class ImageData (line 12) | @Getter
    type ImageType (line 27) | @Getter
      method ImageType (line 58) | ImageType(int value) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java
  class ReadCellData (line 20) | @Getter
    method ReadCellData (line 53) | public ReadCellData(CellDataTypeEnum type) {
    method ReadCellData (line 61) | public ReadCellData(T data) {
    method ReadCellData (line 66) | public ReadCellData(String stringValue) {
    method ReadCellData (line 70) | public ReadCellData(CellDataTypeEnum type, String stringValue) {
    method ReadCellData (line 82) | public ReadCellData(BigDecimal numberValue) {
    method ReadCellData (line 91) | public ReadCellData(Boolean booleanValue) {
    method newEmptyInstance (line 100) | public static ReadCellData<?> newEmptyInstance() {
    method newEmptyInstance (line 104) | public static ReadCellData<?> newEmptyInstance(Integer rowIndex, Integ...
    method newInstance (line 111) | public static ReadCellData<?> newInstance(Boolean booleanValue) {
    method newInstance (line 115) | public static ReadCellData<?> newInstance(Boolean booleanValue, Intege...
    method newInstance (line 122) | public static ReadCellData<?> newInstance(String stringValue, Integer ...
    method newInstance (line 129) | public static ReadCellData<?> newInstance(BigDecimal numberValue, Inte...
    method newInstanceOriginal (line 136) | public static ReadCellData<?> newInstanceOriginal(BigDecimal numberVal...
    method clone (line 145) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java
  class RichTextStringData (line 19) | @Getter
    method RichTextStringData (line 28) | public RichTextStringData(String textString) {
    class IntervalFont (line 32) | @Getter
    method applyFont (line 49) | public void applyFont(int startIndex, int endIndex, WriteFont writeFon...
    method applyFont (line 61) | public void applyFont(WriteFont writeFont) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java
  class WriteCellData (line 24) | @Getter
    method WriteCellData (line 63) | public WriteCellData(String stringValue) {
    method WriteCellData (line 67) | public WriteCellData(CellDataTypeEnum type) {
    method WriteCellData (line 72) | public WriteCellData(CellDataTypeEnum type, String stringValue) {
    method WriteCellData (line 84) | public WriteCellData(BigDecimal numberValue) {
    method WriteCellData (line 93) | public WriteCellData(Boolean booleanValue) {
    method WriteCellData (line 102) | public WriteCellData(Date dateValue) {
    method WriteCellData (line 111) | public WriteCellData(LocalDateTime dateValue) {
    method WriteCellData (line 120) | public WriteCellData(byte[] image) {
    method getOrCreateStyle (line 137) | public WriteCellStyle getOrCreateStyle() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java
  class DataFormatter (line 55) | public class DataFormatter {
    method DataFormatter (line 168) | public DataFormatter(Boolean use1904windowing, Locale locale, Boolean ...
    method getFormat (line 191) | private Format getFormat(Double data, Short dataFormat, String dataFor...
    method createFormat (line 248) | private Format createFormat(Short dataFormat, String dataFormatString) {
    method checkSpecialConverter (line 325) | private Format checkSpecialConverter(String dataFormatString) {
    method createDateFormat (line 341) | private Format createDateFormat(String pFormatStr) {
    method cleanFormatForNumber (line 468) | private String cleanFormatForNumber(String formatStr) {
    class InternalDecimalFormatWithScale (line 512) | private static class InternalDecimalFormatWithScale extends Format {
      method trimTrailingCommas (line 519) | private static String trimTrailingCommas(String s) {
      method InternalDecimalFormatWithScale (line 523) | public InternalDecimalFormatWithScale(String pattern, DecimalFormatS...
      method scaleInput (line 539) | private Object scaleInput(Object obj) {
      method format (line 552) | @Override
      method parseObject (line 558) | @Override
    method createNumberFormat (line 564) | private Format createNumberFormat(String formatStr) {
    method getDefaultFormat (line 596) | private Format getDefaultFormat() {
    method performDateFormatting (line 609) | private String performDateFormatting(Date d, Format dateFormat) {
    method getFormattedDateString (line 627) | private String getFormattedDateString(Double data, Short dataFormat, S...
    method getFormattedNumberString (line 649) | private String getFormattedNumberString(BigDecimal data, Short dataFor...
    method format (line 662) | public String format(BigDecimal data, Short dataFormat, String dataFor...
    method setDefaultNumberFormat (line 684) | public void setDefaultNumberFormat(Format format) {
    method addFormat (line 704) | public void addFormat(String excelFormatStr, Format format) {
    method createIntegerOnlyFormat (line 713) | private static DecimalFormat createIntegerOnlyFormat(String fmt) {
    method setExcelStyleRoundingMode (line 723) | public static void setExcelStyleRoundingMode(DecimalFormat format) {
    method setExcelStyleRoundingMode (line 733) | public static void setExcelStyleRoundingMode(DecimalFormat format, Rou...
    class SSNFormat (line 742) | @SuppressWarnings("serial")
      method SSNFormat (line 746) | private SSNFormat() {
      method format (line 753) | public static String format(Number num) {
      method format (line 758) | @Override
      method parseObject (line 763) | @Override
    class ZipPlusFourFormat (line 774) | @SuppressWarnings("serial")
      method ZipPlusFourFormat (line 778) | private ZipPlusFourFormat() {
      method format (line 785) | public static String format(Number num) {
      method format (line 790) | @Override
      method parseObject (line 795) | @Override
    class PhoneFormat (line 806) | @SuppressWarnings("serial")
      method PhoneFormat (line 810) | private PhoneFormat() {
      method format (line 817) | public static String format(Number num) {
      method format (line 840) | @Override
      method parseObject (line 845) | @Override
    class CellFormatResultWrapper (line 856) | private final class CellFormatResultWrapper extends Format {
      method CellFormatResultWrapper (line 859) | private CellFormatResultWrapper(CellFormatResult result) {
      method format (line 863) | @Override
      method parseObject (line 868) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java
  class ExcelGeneralNumberFormat (line 22) | public class ExcelGeneralNumberFormat extends Format {
    method ExcelGeneralNumberFormat (line 33) | public ExcelGeneralNumberFormat(final Locale locale, final boolean use...
    method format (line 48) | @Override
    method parseObject (line 76) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ColumnWidthProperty.java
  class ColumnWidthProperty (line 10) | public class ColumnWidthProperty {
    method ColumnWidthProperty (line 13) | public ColumnWidthProperty(Integer width) {
    method build (line 17) | public static ColumnWidthProperty build(ColumnWidth columnWidth) {
    method getWidth (line 24) | public Integer getWidth() {
    method setWidth (line 28) | public void setWidth(Integer width) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/DateTimeFormatProperty.java
  class DateTimeFormatProperty (line 15) | @Getter
    method DateTimeFormatProperty (line 22) | public DateTimeFormatProperty(String format, Boolean use1904windowing) {
    method build (line 27) | public static DateTimeFormatProperty build(DateTimeFormat dateTimeForm...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java
  class ExcelContentProperty (line 14) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java
  class ExcelHeadProperty (line 35) | @Getter
    method ExcelHeadProperty (line 58) | public ExcelHeadProperty(ConfigurationHolder configurationHolder, Clas...
    method initHeadRowNumber (line 85) | private void initHeadRowNumber() {
    method initColumnProperties (line 105) | private void initColumnProperties(ConfigurationHolder configurationHol...
    method initOneColumnProperty (line 126) | private void initOneColumnProperty(int index, FieldWrapper field, Bool...
    method hasHead (line 143) | public boolean hasHead() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/FontProperty.java
  class FontProperty (line 20) | @Getter
    method build (line 82) | public static FontProperty build(HeadFontStyle headFontStyle) {
    method build (line 111) | public static FontProperty build(ContentFontStyle contentFontStyle) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/LoopMergeProperty.java
  class LoopMergeProperty (line 10) | public class LoopMergeProperty {
    method LoopMergeProperty (line 20) | public LoopMergeProperty(int eachRow, int columnExtend) {
    method build (line 25) | public static LoopMergeProperty build(ContentLoopMerge contentLoopMerg...
    method getEachRow (line 32) | public int getEachRow() {
    method setEachRow (line 36) | public void setEachRow(int eachRow) {
    method getColumnExtend (line 40) | public int getColumnExtend() {
    method setColumnExtend (line 44) | public void setColumnExtend(int columnExtend) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/NumberFormatProperty.java
  class NumberFormatProperty (line 12) | public class NumberFormatProperty {
    method NumberFormatProperty (line 16) | public NumberFormatProperty(String format, RoundingMode roundingMode) {
    method build (line 21) | public static NumberFormatProperty build(NumberFormat numberFormat) {
    method getFormat (line 28) | public String getFormat() {
    method setFormat (line 32) | public void setFormat(String format) {
    method getRoundingMode (line 36) | public RoundingMode getRoundingMode() {
    method setRoundingMode (line 40) | public void setRoundingMode(RoundingMode roundingMode) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/OnceAbsoluteMergeProperty.java
  class OnceAbsoluteMergeProperty (line 10) | public class OnceAbsoluteMergeProperty {
    method OnceAbsoluteMergeProperty (line 28) | public OnceAbsoluteMergeProperty(int firstRowIndex, int lastRowIndex, ...
    method build (line 35) | public static OnceAbsoluteMergeProperty build(OnceAbsoluteMerge onceAb...
    method getFirstRowIndex (line 43) | public int getFirstRowIndex() {
    method setFirstRowIndex (line 47) | public void setFirstRowIndex(int firstRowIndex) {
    method getLastRowIndex (line 51) | public int getLastRowIndex() {
    method setLastRowIndex (line 55) | public void setLastRowIndex(int lastRowIndex) {
    method getFirstColumnIndex (line 59) | public int getFirstColumnIndex() {
    method setFirstColumnIndex (line 63) | public void setFirstColumnIndex(int firstColumnIndex) {
    method getLastColumnIndex (line 67) | public int getLastColumnIndex() {
    method setLastColumnIndex (line 71) | public void setLastColumnIndex(int lastColumnIndex) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/RowHeightProperty.java
  class RowHeightProperty (line 11) | public class RowHeightProperty {
    method RowHeightProperty (line 14) | public RowHeightProperty(Short height) {
    method build (line 18) | public static RowHeightProperty build(HeadRowHeight headRowHeight) {
    method build (line 25) | public static RowHeightProperty build(ContentRowHeight contentRowHeigh...
    method getHeight (line 32) | public Short getHeight() {
    method setHeight (line 36) | public void setHeight(Short height) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java
  class StyleProperty (line 24) | @Getter
    method build (line 145) | public static StyleProperty build(HeadStyle headStyle) {
    method build (line 194) | public static StyleProperty build(ContentStyle contentStyle) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java
  class AbstractExcelReaderParameterBuilder (line 13) | public abstract class AbstractExcelReaderParameterBuilder<T extends Abst...
    method headRowNumber (line 28) | public T headRowNumber(Integer headRowNumber) {
    method useScientificFormat (line 41) | public T useScientificFormat(Boolean useScientificFormat) {
    method registerReadListener (line 52) | public T registerReadListener(ReadListener<?> readListener) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
  class ExcelReaderBuilder (line 28) | public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuil...
    method ExcelReaderBuilder (line 34) | public ExcelReaderBuilder() {
    method excelType (line 38) | public ExcelReaderBuilder excelType(ExcelTypeEnum excelType) {
    method file (line 48) | public ExcelReaderBuilder file(InputStream inputStream) {
    method file (line 58) | public ExcelReaderBuilder file(File file) {
    method file (line 68) | public ExcelReaderBuilder file(String pathName) {
    method charset (line 76) | public ExcelReaderBuilder charset(Charset charset) {
    method mandatoryUseInputStream (line 86) | public ExcelReaderBuilder mandatoryUseInputStream(Boolean mandatoryUse...
    method autoCloseStream (line 97) | public ExcelReaderBuilder autoCloseStream(Boolean autoCloseStream) {
    method ignoreEmptyRow (line 108) | public ExcelReaderBuilder ignoreEmptyRow(Boolean ignoreEmptyRow) {
    method customObject (line 120) | public ExcelReaderBuilder customObject(Object customObject) {
    method readCache (line 131) | public ExcelReaderBuilder readCache(ReadCache readCache) {
    method readCacheSelector (line 142) | public ExcelReaderBuilder readCacheSelector(ReadCacheSelector readCach...
    method password (line 153) | public ExcelReaderBuilder password(String password) {
    method xlsxSAXParserFactoryName (line 170) | public ExcelReaderBuilder xlsxSAXParserFactoryName(String xlsxSAXParse...
    method extraRead (line 181) | public ExcelReaderBuilder extraRead(CellExtraTypeEnum extraType) {
    method useDefaultListener (line 197) | public ExcelReaderBuilder useDefaultListener(Boolean useDefaultListene...
    method readDefaultReturn (line 208) | public ExcelReaderBuilder readDefaultReturn(ReadDefaultReturnEnum read...
    method build (line 213) | public ExcelReader build() {
    method doReadAll (line 217) | public void doReadAll() {
    method doReadAllSync (line 228) | public <T> List<T> doReadAllSync() {
    method sheet (line 238) | public ExcelReaderSheetBuilder sheet() {
    method sheet (line 242) | public ExcelReaderSheetBuilder sheet(Integer sheetNo) {
    method sheet (line 246) | public ExcelReaderSheetBuilder sheet(String sheetName) {
    method sheet (line 250) | public ExcelReaderSheetBuilder sheet(Integer sheetNo, String sheetName) {
    method parameter (line 261) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
  class ExcelReaderSheetBuilder (line 16) | public class ExcelReaderSheetBuilder extends AbstractExcelReaderParamete...
    method ExcelReaderSheetBuilder (line 23) | public ExcelReaderSheetBuilder() {
    method ExcelReaderSheetBuilder (line 27) | public ExcelReaderSheetBuilder(ExcelReader excelReader) {
    method sheetNo (line 38) | public ExcelReaderSheetBuilder sheetNo(Integer sheetNo) {
    method sheetName (line 49) | public ExcelReaderSheetBuilder sheetName(String sheetName) {
    method build (line 54) | public ReadSheet build() {
    method doRead (line 61) | public void doRead() {
    method doReadSync (line 74) | public <T> List<T> doReadSync() {
    method parameter (line 85) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/listener/IgnoreExceptionReadListener.java
  type IgnoreExceptionReadListener (line 10) | public interface IgnoreExceptionReadListener<T> extends ReadListener<T> {
    method onException (line 20) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
  class ModelBuildEventListener (line 30) | public class ModelBuildEventListener implements IgnoreExceptionReadListe...
    method invoke (line 32) | @Override
    method buildNoModel (line 43) | private Object buildNoModel(Map<Integer, ReadCellData<?>> cellDataMap,...
    method convertReadCellData (line 82) | private ReadCellData convertReadCellData(ReadCellData<?> cellData, Rea...
    method calculateHeadSize (line 114) | private int calculateHeadSize(ReadSheetHolder readSheetHolder) {
    method buildUserModel (line 124) | private Object buildUserModel(Map<Integer, ReadCellData<?>> cellDataMa...
    method doAfterAllAnalysed (line 156) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java
  class PageReadListener (line 16) | public class PageReadListener<T> implements ReadListener<T> {
    method PageReadListener (line 35) | public PageReadListener(Consumer<List<T>> consumer) {
    method PageReadListener (line 39) | public PageReadListener(Consumer<List<T>> consumer, int batchCount) {
    method invoke (line 44) | @Override
    method doAfterAllAnalysed (line 53) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java
  type ReadListener (line 15) | public interface ReadListener<T> extends Listener {
    method onException (line 24) | default void onException(Exception exception, AnalysisContext context)...
    method invokeHead (line 34) | default void invokeHead(Map<Integer, ReadCellData<?>> headMap, Analysi...
    method invoke (line 42) | void invoke(T data, AnalysisContext context);
    method extra (line 50) | default void extra(CellExtra extra, AnalysisContext context) {}
    method doAfterAllAnalysed (line 57) | void doAfterAllAnalysed(AnalysisContext context);
    method hasNext (line 65) | default boolean hasNext(AnalysisContext context) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java
  class ReadBasicParameter (line 18) | @Getter
    method ReadBasicParameter (line 38) | public ReadBasicParameter() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
  class ReadSheet (line 8) | public class ReadSheet extends ReadBasicParameter {
    method ReadSheet (line 18) | public ReadSheet() {}
    method ReadSheet (line 20) | public ReadSheet(Integer sheetNo) {
    method ReadSheet (line 24) | public ReadSheet(Integer sheetNo, String sheetName) {
    method getSheetNo (line 29) | public Integer getSheetNo() {
    method setSheetNo (line 33) | public void setSheetNo(Integer sheetNo) {
    method getSheetName (line 37) | public String getSheetName() {
    method setSheetName (line 41) | public void setSheetName(String sheetName) {
    method copyBasicParameter (line 45) | public void copyBasicParameter(ReadSheet other) {
    method toString (line 58) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
  class ReadWorkbook (line 28) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/AbstractReadHolder.java
  class AbstractReadHolder (line 28) | @Getter
    method AbstractReadHolder (line 53) | public AbstractReadHolder(ReadBasicParameter readBasicParameter, Abstr...
    method readListenerList (line 112) | @Override
    method excelReadHeadProperty (line 117) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java
  type ReadHolder (line 15) | public interface ReadHolder extends ConfigurationHolder {
    method readListenerList (line 21) | List<ReadListener<?>> readListenerList();
    method excelReadHeadProperty (line 28) | ExcelReadHeadProperty excelReadHeadProperty();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
  class ReadRowHolder (line 16) | public class ReadRowHolder implements Holder {
    method ReadRowHolder (line 38) | public ReadRowHolder(Integer rowIndex, RowTypeEnum rowType, GlobalConf...
    method getGlobalConfiguration (line 46) | public GlobalConfiguration getGlobalConfiguration() {
    method setGlobalConfiguration (line 50) | public void setGlobalConfiguration(GlobalConfiguration globalConfigura...
    method getCurrentRowAnalysisResult (line 54) | public Object getCurrentRowAnalysisResult() {
    method setCurrentRowAnalysisResult (line 58) | public void setCurrentRowAnalysisResult(Object currentRowAnalysisResul...
    method getRowIndex (line 62) | public Integer getRowIndex() {
    method setRowIndex (line 66) | public void setRowIndex(Integer rowIndex) {
    method getRowType (line 70) | public RowTypeEnum getRowType() {
    method setRowType (line 74) | public void setRowType(RowTypeEnum rowType) {
    method getCellMap (line 78) | public Map<Integer, Cell> getCellMap() {
    method setCellMap (line 82) | public void setCellMap(Map<Integer, Cell> cellMap) {
    method holderType (line 86) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java
  class ReadSheetHolder (line 22) | @Getter
    method ReadSheetHolder (line 75) | public ReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder readWor...
    method getTotal (line 91) | @Deprecated
    method holderType (line 96) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java
  class ReadWorkbookHolder (line 34) | @Getter
    method ReadWorkbookHolder (line 135) | public ReadWorkbookHolder(ReadWorkbook readWorkbook) {
    method holderType (line 193) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadSheetHolder.java
  class CsvReadSheetHolder (line 16) | @Getter
    method CsvReadSheetHolder (line 21) | public CsvReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder read...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java
  class CsvReadWorkbookHolder (line 21) | @Getter
    method CsvReadWorkbookHolder (line 29) | public CsvReadWorkbookHolder(ReadWorkbook readWorkbook) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadSheetHolder.java
  class XlsReadSheetHolder (line 21) | @Getter
    method XlsReadSheetHolder (line 39) | public XlsReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder read...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java
  class XlsReadWorkbookHolder (line 24) | @Getter
    method XlsReadWorkbookHolder (line 63) | public XlsReadWorkbookHolder(ReadWorkbook readWorkbook) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java
  class XlsxReadSheetHolder (line 20) | @Getter
    method XlsxReadSheetHolder (line 45) | public XlsxReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder rea...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java
  class XlsxReadWorkbookHolder (line 27) | @Getter
    method XlsxReadWorkbookHolder (line 60) | public XlsxReadWorkbookHolder(ReadWorkbook readWorkbook) {
    method dataFormatData (line 67) | public DataFormatData dataFormatData(int dateFormatIndexInteger) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java
  class ExcelReadHeadProperty (line 14) | public class ExcelReadHeadProperty extends ExcelHeadProperty {
    method ExcelReadHeadProperty (line 16) | public ExcelReadHeadProperty(ConfigurationHolder configurationHolder, ...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/processor/AnalysisEventProcessor.java
  type AnalysisEventProcessor (line 11) | public interface AnalysisEventProcessor {
    method extra (line 17) | void extra(AnalysisContext analysisContext);
    method endRow (line 24) | void endRow(AnalysisContext analysisContext);
    method endSheet (line 32) | void endSheet(AnalysisContext analysisContext);

FILE: easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java
  class DefaultAnalysisEventProcessor (line 32) | public class DefaultAnalysisEventProcessor implements AnalysisEventProce...
    method extra (line 35) | @Override
    method endRow (line 40) | @Override
    method endSheet (line 53) | @Override
    method dealExtra (line 66) | private void dealExtra(AnalysisContext analysisContext) {
    method onException (line 80) | private void onException(AnalysisContext analysisContext, Exception e) {
    method dealData (line 92) | private void dealData(AnalysisContext analysisContext) {
    method buildHead (line 123) | private void buildHead(AnalysisContext analysisContext, Map<Integer, R...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java
  type ExcelTypeEnum (line 19) | @Getter
    method ExcelTypeEnum (line 40) | ExcelTypeEnum(String value, byte[] magic) {
    method valueOf (line 47) | public static ExcelTypeEnum valueOf(ReadWorkbook readWorkbook) {
    method recognitionExcelType (line 96) | private static ExcelTypeEnum recognitionExcelType(InputStream inputStr...
    method findMagic (line 108) | private static boolean findMagic(byte[] expected, byte[] actual) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java
  class BeanMapUtils (line 11) | public class BeanMapUtils {
    method create (line 24) | public static BeanMap create(Object bean) {
    class EasyExcelNamingPolicy (line 32) | public static class EasyExcelNamingPolicy extends DefaultNamingPolicy {
      method getTag (line 35) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/BooleanUtils.java
  class BooleanUtils (line 19) | public class BooleanUtils {
    method BooleanUtils (line 23) | private BooleanUtils() {}
    method valueOf (line 31) | public static Boolean valueOf(String str) {
    method isTrue (line 56) | public static boolean isTrue(final Boolean bool) {
    method isNotTrue (line 74) | public static boolean isNotTrue(final Boolean bool) {
    method isFalse (line 92) | public static boolean isFalse(final Boolean bool) {
    method isNotFalse (line 110) | public static boolean isNotFalse(final Boolean bool) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java
  class ClassUtils (line 62) | public class ClassUtils {
    method declaredExcelContentProperty (line 105) | public static ExcelContentProperty declaredExcelContentProperty(Map<?,...
    method getExcelContentProperty (line 118) | private static ExcelContentProperty getExcelContentProperty(Class<?> c...
    method doGetExcelContentProperty (line 141) | private static ExcelContentProperty doGetExcelContentProperty(Class<?>...
    method combineExcelContentProperty (line 161) | public static void combineExcelContentProperty(ExcelContentProperty co...
    method buildKey (line 186) | private static ContentPropertyKey buildKey(Class<?> clazz, Class<?> he...
    method declaredFieldContentMap (line 190) | private static Map<String, ExcelContentProperty> declaredFieldContentM...
    method doDeclaredFieldContentMap (line 218) | private static Map<String, ExcelContentProperty> doDeclaredFieldConten...
    method declaredFields (line 280) | public static FieldCache declaredFields(Class<?> clazz, ConfigurationH...
    method doDeclaredFields (line 302) | private static FieldCache doDeclaredFields(Class<?> clazz, Configurati...
    method resortField (line 375) | private static void resortField(WriteHolder writeHolder, FieldCache fi...
    method buildSortedAllFieldMap (line 430) | private static Map<Integer, FieldWrapper> buildSortedAllFieldMap(Map<I...
    method declaredOneField (line 453) | private static void declaredOneField(Field field, Map<Integer, List<Fi...
    method getAllInterfaces (line 516) | public static List<Class<?>> getAllInterfaces(final Class<?> cls) {
    method getAllInterfaces (line 533) | private static void getAllInterfaces(Class<?> cls, final HashSet<Class...
    class ContentPropertyKey (line 547) | @Getter
    class FieldCacheKey (line 557) | @Data
      method FieldCacheKey (line 565) | FieldCacheKey(Class<?> clazz, ConfigurationHolder configurationHolde...
    method removeThreadLocalCache (line 577) | public static void removeThreadLocalCache() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/ConverterUtils.java
  class ConverterUtils (line 26) | public class ConverterUtils {
    method ConverterUtils (line 29) | private ConverterUtils() {}
    method convertToStringMap (line 38) | public static Map<Integer, String> convertToStringMap(Map<Integer, Rea...
    method convertToJavaObject (line 84) | public static Object convertToJavaObject(ReadCellData<?> cellData, Fie...
    method convertToJavaObject (line 104) | public static Object convertToJavaObject(ReadCellData<?> cellData, Fie...
    method getClassGeneric (line 125) | private static Class<?> getClassGeneric(Field field, Class<?> classGen...
    method doConvertToJavaObject (line 158) | private static Object doConvertToJavaObject(ReadCellData<?> cellData, ...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/DateUtils.java
  class DateUtils (line 45) | public class DateUtils {
    method DateUtils (line 95) | private DateUtils() {}
    method parseDate (line 105) | public static Date parseDate(String dateString, String dateFormat) thr...
    method parseLocalDateTime (line 120) | public static LocalDateTime parseLocalDateTime(String dateString, Stri...
    method parseLocalDate (line 139) | public static LocalDate parseLocalDate(String dateString, String dateF...
    method parseDate (line 157) | public static Date parseDate(String dateString) throws ParseException {
    method switchDateFormat (line 167) | public static String switchDateFormat(String dateString) {
    method format (line 201) | public static String format(Date date) {
    method format (line 212) | public static String format(Date date, String dateFormat) {
    method format (line 229) | public static String format(LocalDateTime date, String dateFormat, Loc...
    method format (line 250) | public static String format(LocalDate date, String dateFormat) {
    method format (line 261) | public static String format(LocalDate date, String dateFormat, Locale ...
    method format (line 282) | public static String format(LocalDateTime date, String dateFormat) {
    method format (line 293) | public static String format(BigDecimal date, Boolean use1904windowing,...
    method getCacheDateFormat (line 302) | private static DateFormat getCacheDateFormat(String dateFormat) {
    method getJavaDate (line 332) | public static Date getJavaDate(double date, boolean use1904windowing) {
    method getJavaCalendar (line 346) | public static Calendar getJavaCalendar(double date, boolean use1904win...
    method setCalendar (line 363) | public static void setCalendar(Calendar calendar, int wholeDays,
    method isValidExcelDate (line 396) | public static boolean isValidExcelDate(double value)
    method getLocalDateTime (line 416) | public static LocalDateTime getLocalDateTime(double date, boolean use1...
    method getLocalDate (line 434) | public static LocalDate getLocalDate(double date, boolean use1904windo...
    method isADateFormat (line 446) | public static boolean isADateFormat(Short formatIndex, String formatSt...
    method isADateFormatUncached (line 472) | public static boolean isADateFormatUncached(Short formatIndex, String ...
    method isInternalDateFormat (line 550) | public static boolean isInternalDateFormat(short format) {
    method removeThreadLocalCache (line 573) | public static void removeThreadLocalCache() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/EasyExcelTempFileCreationStrategy.java
  class EasyExcelTempFileCreationStrategy (line 41) | public class EasyExcelTempFileCreationStrategy implements TempFileCreati...
    method EasyExcelTempFileCreationStrategy (line 67) | public EasyExcelTempFileCreationStrategy() {
    method EasyExcelTempFileCreationStrategy (line 78) | public EasyExcelTempFileCreationStrategy(File dir) {
    method createPOIFilesDirectory (line 82) | private void createPOIFilesDirectory() throws IOException {
    method createTempFile (line 104) | @Override
    method createTempDirectory (line 122) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java
  class FieldUtils (line 26) | public class FieldUtils {
    method getFieldClass (line 32) | public static Class<?> getFieldClass(Map dataMap, String fieldName, Ob...
    method getFieldClass (line 42) | public static Class<?> getFieldClass(Object value) {
    method resolveCglibFieldName (line 64) | public static String resolveCglibFieldName(Field field) {
    method buildFieldName (line 83) | private static String buildFieldName(char firstChar, String fieldName) {
    method getField (line 95) | public static Field getField(final Class<?> cls, final String fieldNam...
    method getField (line 116) | public static Field getField(final Class<?> cls, final String fieldNam...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/FileTypeUtils.java
  class FileTypeUtils (line 13) | public class FileTypeUtils {
    method getImageTypeFormat (line 32) | public static int getImageTypeFormat(byte[] image) {
    method getImageType (line 40) | public static ImageType getImageType(byte[] image) {
    method encodeHexStr (line 49) | private static String encodeHexStr(byte[] data) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java
  class FileUtils (line 33) | public class FileUtils {
    method FileUtils (line 54) | private FileUtils() {}
    method readFileToByteArray (line 73) | public static byte[] readFileToByteArray(final File file) throws IOExc...
    method openInputStream (line 96) | public static FileInputStream openInputStream(final File file) throws ...
    method writeToFile (line 116) | public static void writeToFile(File file, InputStream inputStream) {
    method writeToFile (line 127) | public static void writeToFile(File file, InputStream inputStream, boo...
    method createPoiFilesDirectory (line 156) | public static void createPoiFilesDirectory() {
    method createCacheTmpFile (line 160) | public static File createCacheTmpFile() {
    method createTmpFile (line 164) | public static File createTmpFile(String fileName) {
    method createDirectory (line 172) | public static File createDirectory(File directory) {
    method delete (line 184) | public static void delete(File file) {
    method getTempFilePrefix (line 202) | public static String getTempFilePrefix() {
    method setTempFilePrefix (line 206) | public static void setTempFilePrefix(String tempFilePrefix) {
    method getPoiFilesPath (line 210) | public static String getPoiFilesPath() {
    method setPoiFilesPath (line 214) | public static void setPoiFilesPath(String poiFilesPath) {
    method getCachePath (line 218) | public static String getCachePath() {
    method setCachePath (line 222) | public static void setCachePath(String cachePath) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/IntUtils.java
  class IntUtils (line 8) | public class IntUtils {
    method IntUtils (line 9) | private IntUtils() {}
    method saturatedCast (line 27) | public static int saturatedCast(long value) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/IoUtils.java
  class IoUtils (line 13) | public class IoUtils {
    method IoUtils (line 20) | private IoUtils() {}
    method toByteArray (line 29) | public static byte[] toByteArray(final InputStream input) throws IOExc...
    method toByteArray (line 47) | public static byte[] toByteArray(final InputStream input, final int si...
    method copy (line 74) | public static int copy(final InputStream input, final OutputStream out...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/ListUtils.java
  class ListUtils (line 28) | public class ListUtils {
    method ListUtils (line 29) | private ListUtils() {}
    method newArrayList (line 38) | public static <E> ArrayList<E> newArrayList() {
    method newArrayList (line 46) | public static <E> ArrayList<E> newArrayList(E... elements) {
    method newArrayList (line 61) | public static <E> ArrayList<E> newArrayList(Iterator<? extends E> elem...
    method newArrayList (line 76) | public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elem...
    method newArrayListWithCapacity (line 100) | public static <E> ArrayList<E> newArrayListWithCapacity(int initialArr...
    method newArrayListWithExpectedSize (line 118) | public static <E> ArrayList<E> newArrayListWithExpectedSize(int estima...
    method computeArrayListCapacity (line 122) | static int computeArrayListCapacity(int arraySize) {
    method checkNonnegative (line 127) | static int checkNonnegative(int value, String name) {
    method checkNotNull (line 141) | public static <T extends @NonNull Object> T checkNotNull(T reference) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/MapUtils.java
  class MapUtils (line 23) | public class MapUtils {
    method MapUtils (line 25) | private MapUtils() {}
    method newHashMap (line 41) | public static <K, V> HashMap<K, V> newHashMap() {
    method newTreeMap (line 57) | public static <K extends Comparable, V> TreeMap<K, V> newTreeMap() {
    method newHashMapWithExpectedSize (line 72) | public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(int expe...
    method newLinkedHashMap (line 87) | public static <K, V> LinkedHashMap<K, V> newLinkedHashMap() {
    method newLinkedHashMapWithExpectedSize (line 103) | public static <K, V> LinkedHashMap<K, V> newLinkedHashMapWithExpectedS...
    method capacity (line 111) | static int capacity(int expectedSize) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/MemberUtils.java
  class MemberUtils (line 23) | public class MemberUtils {
    method setAccessibleWorkaround (line 41) | static boolean setAccessibleWorkaround(final AccessibleObject o) {
    method isPackageAccess (line 62) | static boolean isPackageAccess(final int modifiers) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java
  class NumberDataFormatterUtils (line 14) | public class NumberDataFormatterUtils {
    method format (line 30) | public static String format(BigDecimal data, Short dataFormat, String ...
    method format (line 50) | public static String format(BigDecimal data, Short dataFormat, String ...
    method removeThreadLocalCache (line 60) | public static void removeThreadLocalCache() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/NumberUtils.java
  class NumberUtils (line 16) | public class NumberUtils {
    method NumberUtils (line 17) | private NumberUtils() {}
    method format (line 26) | public static String format(Number num, ExcelContentProperty contentPr...
    method formatToCellDataString (line 49) | public static WriteCellData<?> formatToCellDataString(Number num, Exce...
    method formatToCellData (line 60) | public static WriteCellData<?> formatToCellData(Number num, ExcelConte...
    method parseShort (line 76) | public static Short parseShort(String string, ExcelContentProperty con...
    method parseLong (line 90) | public static Long parseLong(String string, ExcelContentProperty conte...
    method parseInteger (line 104) | public static Integer parseInteger(String string, ExcelContentProperty...
    method parseFloat (line 118) | public static Float parseFloat(String string, ExcelContentProperty con...
    method parseBigDecimal (line 132) | public static BigDecimal parseBigDecimal(String string, ExcelContentPr...
    method parseByte (line 147) | public static Byte parseByte(String string, ExcelContentProperty conte...
    method parseDouble (line 161) | public static Double parseDouble(String string, ExcelContentProperty c...
    method hasFormat (line 168) | private static boolean hasFormat(ExcelContentProperty contentProperty) {
    method parse (line 181) | private static Number parse(String string, ExcelContentProperty conten...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java
  class PoiUtils (line 19) | public class PoiUtils {
    method customHeight (line 34) | public static boolean customHeight(Row row) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/PositionUtils.java
  class PositionUtils (line 8) | public class PositionUtils {
    method PositionUtils (line 15) | private PositionUtils() {}
    method getRowByRowTagt (line 17) | public static int getRowByRowTagt(String rowTagt, Integer before) {
    method getRow (line 30) | public static int getRow(String currentCellIndex) {
    method getCol (line 44) | public static int getCol(String currentCellIndex, Integer before) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/SheetUtils.java
  class SheetUtils (line 15) | public class SheetUtils {
    method SheetUtils (line 18) | private SheetUtils() {}
    method match (line 27) | public static ReadSheet match(ReadSheet readSheet, AnalysisContext ana...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/StringUtils.java
  class StringUtils (line 19) | public class StringUtils {
    method StringUtils (line 20) | private StringUtils() {}
    method isEmpty (line 50) | public static boolean isEmpty(final CharSequence cs) {
    method isBlank (line 70) | public static boolean isBlank(final CharSequence cs) {
    method isNotBlank (line 102) | public static boolean isNotBlank(final CharSequence cs) {
    method equals (line 127) | public static boolean equals(final CharSequence cs1, final CharSequenc...
    method regionMatches (line 154) | public static boolean regionMatches(final CharSequence cs, final boole...
    method isNumeric (line 230) | public static boolean isNumeric(final CharSequence cs) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/StyleUtil.java
  class StyleUtil (line 33) | @Slf4j
    method StyleUtil (line 36) | private StyleUtil() {}
    method buildCellStyle (line 46) | public static CellStyle buildCellStyle(Workbook workbook, CellStyle or...
    method buildCellStyle (line 59) | private static void buildCellStyle(CellStyle cellStyle, WriteCellStyle...
    method buildDataFormat (line 122) | public static short buildDataFormat(Workbook workbook, DataFormatData ...
    method buildFont (line 139) | public static Font buildFont(Workbook workbook, Font originFont, Write...
    method createFont (line 180) | private static Font createFont(Workbook workbook, Font originFont, Wri...
    method buildRichTextString (line 222) | public static RichTextString buildRichTextString(WriteWorkbookHolder w...
    method getHyperlinkType (line 245) | public static HyperlinkType getHyperlinkType(HyperlinkData.HyperlinkTy...
    method getCoordinate (line 252) | public static int getCoordinate(Integer coordinate) {
    method getCellCoordinate (line 259) | public static int getCellCoordinate(Integer currentCoordinate, Integer...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/Validate.java
  class Validate (line 21) | public class Validate {
    method isTrue (line 45) | public static void isTrue(final boolean expression, final String messa...
    method isTrue (line 70) | public static void isTrue(final boolean expression, final String messa...
    method isTrue (line 94) | public static void isTrue(final boolean expression, final String messa...
    method isTrue (line 119) | public static void isTrue(final boolean expression) {
    method notNull (line 141) | public static <T> T notNull(final T object) {
    method notNull (line 159) | public static <T> T notNull(final T object, final String message, fina...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java
  class WorkBookUtil (line 27) | public class WorkBookUtil {
    method WorkBookUtil (line 29) | private WorkBookUtil() {}
    method createWorkBook (line 31) | public static void createWorkBook(WriteWorkbookHolder writeWorkbookHol...
    method createSheet (line 85) | public static Sheet createSheet(Workbook workbook, String sheetName) {
    method createRow (line 89) | public static Row createRow(Sheet sheet, int rowNum) {
    method createCell (line 93) | public static Cell createCell(Row row, int colNum) {
    method createCell (line 97) | public static Cell createCell(Row row, int colNum, CellStyle cellStyle) {
    method createCell (line 103) | public static Cell createCell(Row row, int colNum, CellStyle cellStyle...
    method createCell (line 109) | public static Cell createCell(Row row, int colNum, String cellValue) {
    method fillDataFormat (line 115) | public static void fillDataFormat(WriteCellData<?> cellData, String fo...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
  class WriteHandlerUtils (line 24) | @Slf4j
    method WriteHandlerUtils (line 27) | private WriteHandlerUtils() {}
    method createWorkbookWriteHandlerContext (line 29) | public static WorkbookWriteHandlerContext createWorkbookWriteHandlerCo...
    method beforeWorkbookCreate (line 36) | public static void beforeWorkbookCreate(WorkbookWriteHandlerContext co...
    method beforeWorkbookCreate (line 40) | public static void beforeWorkbookCreate(WorkbookWriteHandlerContext co...
    method afterWorkbookCreate (line 47) | public static void afterWorkbookCreate(WorkbookWriteHandlerContext con...
    method afterWorkbookCreate (line 51) | public static void afterWorkbookCreate(WorkbookWriteHandlerContext con...
    method getWorkbookHandlerExecutionChain (line 58) | private static WorkbookHandlerExecutionChain getWorkbookHandlerExecuti...
    method afterWorkbookDispose (line 68) | public static void afterWorkbookDispose(WorkbookWriteHandlerContext co...
    method createSheetWriteHandlerContext (line 75) | public static SheetWriteHandlerContext createSheetWriteHandlerContext(...
    method beforeSheetCreate (line 80) | public static void beforeSheetCreate(SheetWriteHandlerContext context) {
    method beforeSheetCreate (line 84) | public static void beforeSheetCreate(SheetWriteHandlerContext context,...
    method afterSheetCreate (line 91) | public static void afterSheetCreate(SheetWriteHandlerContext context) {
    method afterSheetCreate (line 95) | public static void afterSheetCreate(SheetWriteHandlerContext context, ...
    method getSheetHandlerExecutionChain (line 102) | private static SheetHandlerExecutionChain getSheetHandlerExecutionChai...
    method createCellWriteHandlerContext (line 112) | public static CellWriteHandlerContext createCellWriteHandlerContext(Wr...
    method beforeCellCreate (line 120) | public static void beforeCellCreate(CellWriteHandlerContext context) {
    method afterCellCreate (line 128) | public static void afterCellCreate(CellWriteHandlerContext context) {
    method afterCellDataConverted (line 136) | public static void afterCellDataConverted(CellWriteHandlerContext cont...
    method afterCellDispose (line 144) | public static void afterCellDispose(CellWriteHandlerContext context) {
    method createRowWriteHandlerContext (line 152) | public static RowWriteHandlerContext createRowWriteHandlerContext(Writ...
    method beforeRowCreate (line 158) | public static void beforeRowCreate(RowWriteHandlerContext context) {
    method afterRowCreate (line 166) | public static void afterRowCreate(RowWriteHandlerContext context) {
    method afterRowDispose (line 174) | public static void afterRowDispose(RowWriteHandlerContext context) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilder.java
  type ExcelBuilder (line 14) | public interface ExcelBuilder {
    method addContent (line 25) | @Deprecated
    method addContent (line 38) | void addContent(Collection<?> data, WriteSheet writeSheet, WriteTable ...
    method fill (line 47) | void fill(Object data, FillConfig fillConfig, WriteSheet writeSheet);
    method merge (line 62) | @Deprecated
    method writeContext (line 70) | WriteContext writeContext();
    method finish (line 77) | void finish(boolean onException);

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
  class ExcelBuilderImpl (line 23) | public class ExcelBuilderImpl implements ExcelBuilder {
    method ExcelBuilderImpl (line 34) | public ExcelBuilderImpl(WriteWorkbook writeWorkbook) {
    method addContent (line 46) | @Override
    method addContent (line 51) | @Override
    method fill (line 69) | @Override
    method finishOnException (line 92) | private void finishOnException() {
    method finish (line 96) | @Override
    method merge (line 103) | @Override
    method writeContext (line 109) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java
  class AbstractExcelWriterParameterBuilder (line 15) | public abstract class AbstractExcelWriterParameterBuilder<T extends Abst...
    method relativeHeadRowIndex (line 23) | public T relativeHeadRowIndex(Integer relativeHeadRowIndex) {
    method needHead (line 31) | public T needHead(Boolean needHead) {
    method registerWriteHandler (line 42) | public T registerWriteHandler(WriteHandler writeHandler) {
    method useDefaultStyle (line 56) | public T useDefaultStyle(Boolean useDefaultStyle) {
    method automaticMergeHead (line 67) | public T automaticMergeHead(Boolean automaticMergeHead) {
    method excludeColumnIndexes (line 75) | public T excludeColumnIndexes(Collection<Integer> excludeColumnIndexes) {
    method excludeColumnFiledNames (line 85) | public T excludeColumnFiledNames(Collection<String> excludeColumnField...
    method excludeColumnFieldNames (line 93) | public T excludeColumnFieldNames(Collection<String> excludeColumnField...
    method includeColumnIndexes (line 101) | public T includeColumnIndexes(Collection<Integer> includeColumnIndexes) {
    method includeColumnFiledNames (line 111) | @Deprecated
    method includeColumnFieldNames (line 120) | public T includeColumnFieldNames(Collection<String> includeColumnField...
    method orderByIncludeColumn (line 132) | public T orderByIncludeColumn(Boolean orderByIncludeColumn) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
  class ExcelWriterBuilder (line 17) | public class ExcelWriterBuilder extends AbstractExcelWriterParameterBuil...
    method ExcelWriterBuilder (line 23) | public ExcelWriterBuilder() {
    method autoCloseStream (line 33) | public ExcelWriterBuilder autoCloseStream(Boolean autoCloseStream) {
    method password (line 46) | public ExcelWriterBuilder password(String password) {
    method inMemory (line 56) | public ExcelWriterBuilder inMemory(Boolean inMemory) {
    method writeExcelOnException (line 64) | public ExcelWriterBuilder writeExcelOnException(Boolean writeExcelOnEx...
    method excelType (line 69) | public ExcelWriterBuilder excelType(ExcelTypeEnum excelType) {
    method file (line 74) | public ExcelWriterBuilder file(OutputStream outputStream) {
    method file (line 79) | public ExcelWriterBuilder file(File outputFile) {
    method file (line 84) | public ExcelWriterBuilder file(String outputPathName) {
    method charset (line 92) | public ExcelWriterBuilder charset(Charset charset) {
    method withBom (line 101) | public ExcelWriterBuilder withBom(Boolean withBom) {
    method withTemplate (line 110) | public ExcelWriterBuilder withTemplate(InputStream templateInputStream) {
    method withTemplate (line 119) | public ExcelWriterBuilder withTemplate(File templateFile) {
    method withTemplate (line 128) | public ExcelWriterBuilder withTemplate(String pathName) {
    method build (line 132) | public ExcelWriter build() {
    method sheet (line 136) | public ExcelWriterSheetBuilder sheet() {
    method sheet (line 140) | public ExcelWriterSheetBuilder sheet(Integer sheetNo) {
    method sheet (line 144) | public ExcelWriterSheetBuilder sheet(String sheetName) {
    method sheet (line 148) | public ExcelWriterSheetBuilder sheet(Integer sheetNo, String sheetName) {
    method parameter (line 160) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
  class ExcelWriterSheetBuilder (line 16) | public class ExcelWriterSheetBuilder extends AbstractExcelWriterParamete...
    method ExcelWriterSheetBuilder (line 23) | public ExcelWriterSheetBuilder() {
    method ExcelWriterSheetBuilder (line 27) | public ExcelWriterSheetBuilder(ExcelWriter excelWriter) {
    method sheetNo (line 38) | public ExcelWriterSheetBuilder sheetNo(Integer sheetNo) {
    method sheetName (line 49) | public ExcelWriterSheetBuilder sheetName(String sheetName) {
    method build (line 54) | public WriteSheet build() {
    method doWrite (line 58) | public void doWrite(Collection<?> data) {
    method doFill (line 66) | public void doFill(Object data) {
    method doFill (line 70) | public void doFill(Object data, FillConfig fillConfig) {
    method doWrite (line 78) | public void doWrite(Supplier<Collection<?>> supplier) {
    method doFill (line 82) | public void doFill(Supplier<Object> supplier) {
    method doFill (line 86) | public void doFill(Supplier<Object> supplier, FillConfig fillConfig) {
    method table (line 90) | public ExcelWriterTableBuilder table() {
    method table (line 94) | public ExcelWriterTableBuilder table(Integer tableNo) {
    method parameter (line 102) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
  class ExcelWriterTableBuilder (line 16) | public class ExcelWriterTableBuilder extends AbstractExcelWriterParamete...
    method ExcelWriterTableBuilder (line 26) | public ExcelWriterTableBuilder() {
    method ExcelWriterTableBuilder (line 30) | public ExcelWriterTableBuilder(ExcelWriter excelWriter, WriteSheet wri...
    method tableNo (line 42) | public ExcelWriterTableBuilder tableNo(Integer tableNo) {
    method build (line 47) | public WriteTable build() {
    method doWrite (line 51) | public void doWrite(Collection<?> data) {
    method doWrite (line 59) | public void doWrite(Supplier<Collection<?>> supplier) {
    method parameter (line 63) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/executor/AbstractExcelWriteExecutor.java
  class AbstractExcelWriteExecutor (line 44) | public abstract class AbstractExcelWriteExecutor implements ExcelWriteEx...
    method AbstractExcelWriteExecutor (line 47) | public AbstractExcelWriteExecutor(WriteContext writeContext) {
    method converterAndSet (line 56) | protected void converterAndSet(CellWriteHandlerContext cellWriteHandle...
    method fillFormula (line 112) | private void fillFormula(CellWriteHandlerContext cellWriteHandlerConte...
    method fillHyperLink (line 122) | private void fillHyperLink(CellWriteHandlerContext cellWriteHandlerCon...
    method fillComment (line 145) | private void fillComment(CellWriteHandlerContext cellWriteHandlerConte...
    method fillImage (line 194) | protected void fillImage(CellWriteHandlerContext cellWriteHandlerConte...
    method convert (line 239) | protected WriteCellData<?> convert(CellWriteHandlerContext cellWriteHa...
    method fillProperty (line 280) | private void fillProperty(WriteCellData<?> cellDataValue, ExcelContent...
    method doConvert (line 301) | private WriteCellData<?> doConvert(CellWriteHandlerContext cellWriteHa...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
  class ExcelWriteAddExecutor (line 38) | public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
    method ExcelWriteAddExecutor (line 40) | public ExcelWriteAddExecutor(WriteContext writeContext) {
    method add (line 44) | public void add(Collection<?> data) {
    method addOneRowOfDataToExcel (line 61) | private void addOneRowOfDataToExcel(Object oneRowData, int rowIndex, i...
    method addBasicTypeToExcel (line 85) | private void addBasicTypeToExcel(RowData oneRowData, Row row, int rowI...
    method doAddBasicTypeToExcel (line 115) | private void doAddBasicTypeToExcel(RowData oneRowData, Head head, Row ...
    method addJavaObjectToExcel (line 138) | private void addJavaObjectToExcel(Object oneRowData, Row row, int rowI...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteExecutor.java
  type ExcelWriteExecutor (line 8) | public interface ExcelWriteExecutor {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java
  class ExcelWriteFillExecutor (line 54) | public class ExcelWriteFillExecutor extends AbstractExcelWriteExecutor {
    method ExcelWriteFillExecutor (line 90) | public ExcelWriteFillExecutor(WriteContext writeContext) {
    method fill (line 94) | public void fill(Object data, FillConfig fillConfig) {
    method shiftRows (line 136) | private void shiftRows(int size, List<AnalysisCell> analysisCellList) {
    method increaseRowIndex (line 176) | private void increaseRowIndex(Map<UniqueDataFlagKey, List<AnalysisCell...
    method doFill (line 192) | private void doFill(List<AnalysisCell> analysisCellList, Object oneRow...
    method getRelativeRowIndex (line 305) | private Integer getRelativeRowIndex() {
    method createCell (line 316) | private void createCell(AnalysisCell analysisCell, FillConfig fillConfig,
    method createCellIfNecessary (line 379) | private Cell createCellIfNecessary(Row row, Integer lastColumnIndex,
    method createRowIfNecessary (line 393) | private Row createRowIfNecessary(Sheet sheet, Sheet cachedSheet, Integ...
    method checkRowHeight (line 430) | private void checkRowHeight(AnalysisCell analysisCell, FillConfig fill...
    method readTemplateData (line 447) | private List<AnalysisCell> readTemplateData(Map<UniqueDataFlagKey, Lis...
    method prepareData (line 483) | private String prepareData(Cell cell, int rowIndex, int columnIndex,
    method dealAnalysisCell (line 566) | private String dealAnalysisCell(AnalysisCell analysisCell, String valu...
    method initAnalysisCell (line 600) | private AnalysisCell initAnalysisCell(Integer rowIndex, Integer column...
    method convertPrepareData (line 614) | private String convertPrepareData(String prepareData) {
    method uniqueDataFlag (line 620) | private UniqueDataFlagKey uniqueDataFlag(WriteSheetHolder writeSheetHo...
    class UniqueDataFlagKey (line 624) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java
  class AbstractCellWriteHandler (line 19) | @Deprecated
    method beforeCellCreate (line 22) | @Override
    method afterCellCreate (line 28) | @Override
    method afterCellDataConverted (line 34) | @Override
    method afterCellDispose (line 39) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractRowWriteHandler.java
  class AbstractRowWriteHandler (line 14) | @Deprecated
    method beforeRowCreate (line 16) | @Override
    method afterRowCreate (line 22) | @Override
    method afterRowDispose (line 28) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractSheetWriteHandler.java
  class AbstractSheetWriteHandler (line 12) | @Deprecated
    method beforeSheetCreate (line 14) | @Override
    method afterSheetCreate (line 19) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractWorkbookWriteHandler.java
  class AbstractWorkbookWriteHandler (line 11) | @Deprecated
    method beforeWorkbookCreate (line 14) | @Override
    method afterWorkbookCreate (line 19) | @Override
    method afterWorkbookDispose (line 24) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
  type CellWriteHandler (line 20) | public interface CellWriteHandler extends WriteHandler {
    method beforeCellCreate (line 27) | default void beforeCellCreate(CellWriteHandlerContext context) {
    method beforeCellCreate (line 43) | default void beforeCellCreate(WriteSheetHolder writeSheetHolder, Write...
    method afterCellCreate (line 51) | default void afterCellCreate(CellWriteHandlerContext context) {
    method afterCellCreate (line 66) | default void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteT...
    method afterCellDataConverted (line 74) | default void afterCellDataConverted(CellWriteHandlerContext context) {
    method afterCellDataConverted (line 92) | default void afterCellDataConverted(WriteSheetHolder writeSheetHolder,...
    method afterCellDispose (line 100) | default void afterCellDispose(CellWriteHandlerContext context) {
    method afterCellDispose (line 116) | default void afterCellDispose(WriteSheetHolder writeSheetHolder, Write...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java
  class DefaultWriteHandlerLoader (line 17) | public class DefaultWriteHandlerLoader {
    method loadDefaultHandler (line 32) | public static List<WriteHandler> loadDefaultHandler(Boolean useDefault...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
  type RowWriteHandler (line 14) | public interface RowWriteHandler extends WriteHandler {
    method beforeRowCreate (line 21) | default void beforeRowCreate(RowWriteHandlerContext context) {
    method beforeRowCreate (line 35) | default void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteT...
    method afterRowCreate (line 43) | default void afterRowCreate(RowWriteHandlerContext context) {
    method afterRowCreate (line 57) | default void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTa...
    method afterRowDispose (line 66) | default void afterRowDispose(RowWriteHandlerContext context) {
    method afterRowDispose (line 81) | default void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteT...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
  type SheetWriteHandler (line 12) | public interface SheetWriteHandler extends WriteHandler {
    method beforeSheetCreate (line 19) | default void beforeSheetCreate(SheetWriteHandlerContext context) {
    method beforeSheetCreate (line 29) | default void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder...
    method afterSheetCreate (line 36) | default void afterSheetCreate(SheetWriteHandlerContext context) {
    method afterSheetCreate (line 46) | default void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
  type WorkbookWriteHandler (line 11) | public interface WorkbookWriteHandler extends WriteHandler {
    method beforeWorkbookCreate (line 18) | default void beforeWorkbookCreate(WorkbookWriteHandlerContext context) {
    method beforeWorkbookCreate (line 25) | default void beforeWorkbookCreate() {}
    method afterWorkbookCreate (line 32) | default void afterWorkbookCreate(WorkbookWriteHandlerContext context) {
    method afterWorkbookCreate (line 41) | default void afterWorkbookCreate(WriteWorkbookHolder writeWorkbookHold...
    method afterWorkbookDispose (line 48) | default void afterWorkbookDispose(WorkbookWriteHandlerContext context) {
    method afterWorkbookDispose (line 57) | default void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHol...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/WriteHandler.java
  type WriteHandler (line 10) | public interface WriteHandler extends Handler {}

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/CellHandlerExecutionChain.java
  class CellHandlerExecutionChain (line 15) | @Getter
    method CellHandlerExecutionChain (line 28) | public CellHandlerExecutionChain(CellWriteHandler handler) {
    method beforeCellCreate (line 32) | public void beforeCellCreate(CellWriteHandlerContext context) {
    method afterCellCreate (line 39) | public void afterCellCreate(CellWriteHandlerContext context) {
    method afterCellDataConverted (line 46) | public void afterCellDataConverted(CellWriteHandlerContext context) {
    method afterCellDispose (line 53) | public void afterCellDispose(CellWriteHandlerContext context) {
    method addLast (line 60) | public void addLast(CellWriteHandler handler) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/RowHandlerExecutionChain.java
  class RowHandlerExecutionChain (line 15) | @Getter
    method RowHandlerExecutionChain (line 28) | public RowHandlerExecutionChain(RowWriteHandler handler) {
    method beforeRowCreate (line 32) | public void beforeRowCreate(RowWriteHandlerContext context) {
    method afterRowCreate (line 39) | public void afterRowCreate(RowWriteHandlerContext context) {
    method afterRowDispose (line 46) | public void afterRowDispose(RowWriteHandlerContext context) {
    method addLast (line 53) | public void addLast(RowWriteHandler handler) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/SheetHandlerExecutionChain.java
  class SheetHandlerExecutionChain (line 15) | @Getter
    method SheetHandlerExecutionChain (line 28) | public SheetHandlerExecutionChain(SheetWriteHandler handler) {
    method beforeSheetCreate (line 32) | public void beforeSheetCreate(SheetWriteHandlerContext context) {
    method afterSheetCreate (line 39) | public void afterSheetCreate(SheetWriteHandlerContext context) {
    method addLast (line 45) | public void addLast(SheetWriteHandler handler) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/WorkbookHandlerExecutionChain.java
  class WorkbookHandlerExecutionChain (line 15) | @Getter
    method WorkbookHandlerExecutionChain (line 29) | public WorkbookHandlerExecutionChain(WorkbookWriteHandler handler) {
    method beforeWorkbookCreate (line 33) | public void beforeWorkbookCreate(WorkbookWriteHandlerContext context) {
    method afterWorkbookCreate (line 40) | public void afterWorkbookCreate(WorkbookWriteHandlerContext context) {
    method afterWorkbookDispose (line 47) | public void afterWorkbookDispose(WorkbookWriteHandlerContext context) {
    method addLast (line 54) | public void addLast(WorkbookWriteHandler handler) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java
  class CellWriteHandlerContext (line 26) | @Getter
    method CellWriteHandlerContext (line 112) | public CellWriteHandlerContext(WriteContext writeContext,

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java
  class RowWriteHandlerContext (line 19) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java
  class SheetWriteHandlerContext (line 17) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java
  class WorkbookWriteHandlerContext (line 16) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java
  class DefaultRowWriteHandler (line 13) | @Slf4j
    method afterRowDispose (line 16) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/DimensionWorkbookWriteHandler.java
  class DimensionWorkbookWriteHandler (line 26) | @Slf4j
    method afterWorkbookDispose (line 33) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java
  class FillStyleCellWriteHandler (line 19) | @Slf4j
    method order (line 22) | @Override
    method afterCellDispose (line 27) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java
  class AbstractMergeStrategy (line 15) | public abstract class AbstractMergeStrategy implements CellWriteHandler {
    method afterCellDispose (line 17) | @Override
    method merge (line 34) | protected abstract void merge(Sheet sheet, Cell cell, Head head, Integ...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java
  class LoopMergeStrategy (line 14) | public class LoopMergeStrategy implements RowWriteHandler {
    method LoopMergeStrategy (line 28) | public LoopMergeStrategy(int eachRow, int columnIndex) {
    method LoopMergeStrategy (line 32) | public LoopMergeStrategy(int eachRow, int columnExtend, int columnInde...
    method LoopMergeStrategy (line 50) | public LoopMergeStrategy(LoopMergeProperty loopMergeProperty, Integer ...
    method afterRowDispose (line 54) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java
  class OnceAbsoluteMergeStrategy (line 15) | public class OnceAbsoluteMergeStrategy implements SheetWriteHandler {
    method OnceAbsoluteMergeStrategy (line 33) | public OnceAbsoluteMergeStrategy(int firstRowIndex, int lastRowIndex, ...
    method OnceAbsoluteMergeStrategy (line 43) | public OnceAbsoluteMergeStrategy(OnceAbsoluteMergeProperty onceAbsolut...
    method afterSheetCreate (line 48) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/CollectionRowData.java
  class CollectionRowData (line 10) | public class CollectionRowData implements RowData {
    method CollectionRowData (line 14) | public CollectionRowData(Collection<?> collection) {
    method get (line 18) | @Override
    method size (line 23) | @Override
    method isEmpty (line 28) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/MapRowData.java
  class MapRowData (line 10) | public class MapRowData implements RowData {
    method MapRowData (line 14) | public MapRowData(Map<Integer, ?> map) {
    method get (line 18) | @Override
    method size (line 23) | @Override
    method isEmpty (line 28) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/RowData.java
  type RowData (line 8) | public interface RowData {
    method get (line 17) | Object get(int index);
    method size (line 26) | int size();
    method isEmpty (line 33) | boolean isEmpty();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java
  class WriteBasicParameter (line 19) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java
  class WriteSheet (line 12) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteTable.java
  class WriteTable (line 12) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java
  class WriteWorkbook (line 19) | @Getter

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/AnalysisCell.java
  class AnalysisCell (line 16) | @Getter
    method equals (line 29) | @Override
    method hashCode (line 44) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/FillConfig.java
  class FillConfig (line 17) | @Getter
    method init (line 42) | public void init() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/FillWrapper.java
  class FillWrapper (line 10) | public class FillWrapper {
    method FillWrapper (line 20) | public FillWrapper(Collection collectionData) {
    method FillWrapper (line 24) | public FillWrapper(String name, Collection collectionData) {
    method getName (line 29) | public String getName() {
    method setName (line 33) | public void setName(String name) {
    method getCollectionData (line 37) | public Collection getCollectionData() {
    method setCollectionData (line 41) | public void setCollectionData(Collection collectionData) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
  class AbstractWriteHolder (line 55) | @Getter
    method AbstractWriteHolder (line 142) | public AbstractWriteHolder(WriteBasicParameter writeBasicParameter, Ab...
    method initHandler (line 238) | protected void initHandler(WriteBasicParameter writeBasicParameter, Ab...
    method initAnnotationConfig (line 264) | protected void initAnnotationConfig(List<WriteHandler> handlerList, Wr...
    method dealStyle (line 290) | private void dealStyle(List<WriteHandler> handlerList) {
    method dealLoopMerge (line 316) | private void dealLoopMerge(List<WriteHandler> handlerList, Head head) {
    method dealOnceAbsoluteMerge (line 324) | private void dealOnceAbsoluteMerge(List<WriteHandler> handlerList) {
    method dealRowHigh (line 333) | private void dealRowHigh(List<WriteHandler> handlerList) {
    method dealColumnWidth (line 350) | private void dealColumnWidth(List<WriteHandler> handlerList) {
    method sortAndClearUpHandler (line 366) | protected void sortAndClearUpHandler(List<WriteHandler> handlerList, b...
    method buildChain (line 404) | protected void buildChain(WriteHandler writeHandler, boolean runOwn) {
    method ignore (line 460) | @Override
    method excelWriteHeadProperty (line 481) | @Override
    method needHead (line 486) | @Override
    method relativeHeadRowIndex (line 491) | @Override
    method automaticMergeHead (line 496) | @Override
    method orderByIncludeColumn (line 501) | @Override
    method includeColumnIndexes (line 506) | @Override
    method includeColumnFieldNames (line 511) | @Override
    method excludeColumnIndexes (line 516) | @Override
    method excludeColumnFieldNames (line 521) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java
  type WriteHolder (line 13) | public interface WriteHolder extends ConfigurationHolder {
    method excelWriteHeadProperty (line 19) | ExcelWriteHeadProperty excelWriteHeadProperty();
    method ignore (line 28) | boolean ignore(String fieldName, Integer columnIndex);
    method needHead (line 35) | boolean needHead();
    method automaticMergeHead (line 42) | boolean automaticMergeHead();
    method relativeHeadRowIndex (line 49) | int relativeHeadRowIndex();
    method orderByIncludeColumn (line 59) | boolean orderByIncludeColumn();
    method includeColumnIndexes (line 66) | Collection<Integer> includeColumnIndexes();
    method includeColumnFieldNames (line 73) | Collection<String> includeColumnFieldNames();
    method excludeColumnIndexes (line 80) | Collection<Integer> excludeColumnIndexes();
    method excludeColumnFieldNames (line 87) | Collection<String> excludeColumnFieldNames();

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
  class WriteSheetHolder (line 25) | @Getter
    method WriteSheetHolder (line 81) | public WriteSheetHolder(WriteSheet writeSheet, WriteWorkbookHolder wri...
    method getNewRowIndexAndStartDoWrite (line 109) | public int getNewRowIndexAndStartDoWrite() {
    method holderType (line 130) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java
  class WriteTableHolder (line 15) | @Getter
    method WriteTableHolder (line 32) | public WriteTableHolder(WriteTable writeTable, WriteSheetHolder writeS...
    method holderType (line 42) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
  class WriteWorkbookHolder (line 47) | @Getter
    method WriteWorkbookHolder (line 167) | public WriteWorkbookHolder(WriteWorkbook writeWorkbook) {
    method copyTemplate (line 249) | private void copyTemplate() throws IOException {
    method holderType (line 271) | @Override
    method createCellStyle (line 283) | public CellStyle createCellStyle(WriteCellStyle writeCellStyle, CellSt...
    method createFont (line 334) | public Font createFont(WriteFont writeFont, Font originFont, boolean u...
    method createDataFormat (line 357) | public Short createDataFormat(DataFormatData dataFormatData, boolean u...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java
  class WriteCellStyle (line 24) | @Getter
    method merge (line 152) | public static void merge(WriteCellStyle source, WriteCellStyle target) {
    method build (line 238) | public static WriteCellStyle build(StyleProperty styleProperty, FontPr...
    method buildFontProperty (line 248) | private static void buildFontProperty(FontProperty fontProperty, Write...
    method buildStyleProperty (line 286) | private static void buildStyleProperty(StyleProperty styleProperty, Wr...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/style/WriteFont.java
  class WriteFont (line 18) | @Getter
    method merge (line 86) | public static void merge(WriteFont source, WriteFont target) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java
  class ExcelWriteHeadProperty (line 39) | @Getter
    method ExcelWriteHeadProperty (line 48) | public ExcelWriteHeadProperty(ConfigurationHolder configurationHolder,...
    method headCellRangeList (line 101) | public List<CellRange> headCellRangeList() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
  class AbstractCellStyleStrategy (line 15) | public abstract class AbstractCellStyleStrategy implements CellWriteHand...
    method order (line 17) | @Override
    method afterCellDispose (line 22) | @Override
    method setHeadCellStyle (line 39) | protected void setHeadCellStyle(CellWriteHandlerContext context) {
    method setHeadCellStyle (line 50) | protected void setHeadCellStyle(Cell cell, Head head, Integer relative...
    method setContentCellStyle (line 59) | protected void setContentCellStyle(CellWriteHandlerContext context) {
    method setContentCellStyle (line 70) | protected void setContentCellStyle(Cell cell, Head head, Integer relat...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java
  class AbstractVerticalCellStyleStrategy (line 13) | public abstract class AbstractVerticalCellStyleStrategy extends Abstract...
    method setHeadCellStyle (line 15) | @Override
    method setContentCellStyle (line 24) | @Override
    method headCellStyle (line 39) | protected WriteCellStyle headCellStyle(CellWriteHandlerContext context) {
    method headCellStyle (line 49) | protected WriteCellStyle headCellStyle(Head head) {
    method contentCellStyle (line 59) | protected WriteCellStyle contentCellStyle(CellWriteHandlerContext cont...
    method contentCellStyle (line 69) | protected WriteCellStyle contentCellStyle(Head head) {
    method stopProcessing (line 73) | protected boolean stopProcessing(CellWriteHandlerContext context) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/DefaultStyle.java
  class DefaultStyle (line 18) | public class DefaultStyle extends HorizontalCellStyleStrategy {
    method order (line 20) | @Override
    method DefaultStyle (line 25) | public DefaultStyle() {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java
  class HorizontalCellStyleStrategy (line 20) | @Getter
    method HorizontalCellStyleStrategy (line 28) | public HorizontalCellStyleStrategy() {
    method HorizontalCellStyleStrategy (line 31) | public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle,
    method HorizontalCellStyleStrategy (line 37) | public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle, ...
    method setHeadCellStyle (line 44) | @Override
    method setContentCellStyle (line 53) | @Override
    method stopProcessing (line 68) | protected boolean stopProcessing(CellWriteHandlerContext context) {

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
  class AbstractColumnWidthStyleStrategy (line 18) | public abstract class AbstractColumnWidthStyleStrategy implements CellWr...
    method afterCellDispose (line 20) | @Override
    method setColumnWidth (line 30) | protected void setColumnWidth(CellWriteHandlerContext context) {
    method setColumnWidth (line 45) | protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java
  class AbstractHeadColumnWidthStyleStrategy (line 16) | public abstract class AbstractHeadColumnWidthStyleStrategy extends Abstr...
    method setColumnWidth (line 18) | @Override
    method columnWidth (line 44) | protected abstract Integer columnWidth(Head head, Integer columnIndex);

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
  class LongestMatchColumnWidthStyleStrategy (line 24) | public class LongestMatchColumnWidthStyleStrategy extends AbstractColumn...
    method setColumnWidth (line 30) | @Override
    method dataLength (line 53) | private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell c...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java
  class SimpleColumnWidthStyleStrategy (line 10) | public class SimpleColumnWidthStyleStrategy extends AbstractHeadColumnWi...
    method SimpleColumnWidthStyleStrategy (line 17) | public SimpleColumnWidthStyleStrategy(Integer columnWidth) {
    method columnWidth (line 21) | @Override

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
  class AbstractRowHeightStyleStrategy (line 13) | public abstract class AbstractRowHeightStyleStrategy implements RowWrite...
    method afterRowDispose (line 14) | @Override
    method setHeadColumnHeight (line 32) | protected abstract void setHeadColumnHeight(Row row, int relativeRowIn...
    method setContentColumnHeight (line 40) | protected abstract void setContentColumnHeight(Row row, int relativeRo...

FILE: easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java
  class SimpleRowHeightStyleStrategy (line 10) | public class SimpleRowHeightStyleStrategy extends AbstractRowHeightStyle...
    method SimpleRowHeightStyleStrategy (line 14) | public SimpleRowHeightStyleStrategy(Short headRowHeight, Short content...
    method setHeadColumnHeight (line 19) | @Override
    method setContentColumnHeight (line 26) | @Override

FILE: easyexcel-support/src/main/java/com/alibaba/excel/support/Empty.java
  class Empty (line 8) | public class Empty {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/StyleTestUtils.java
  class StyleTestUtils (line 9) | public class StyleTestUtils {
    method getFillForegroundColor (line 11) | public static byte[] getFillForegroundColor(Cell cell) {
    method getFontColor (line 19) | public static byte[] getFontColor(Cell cell, Workbook workbook) {
    method getFontHeightInPoints (line 28) | public static short getFontHeightInPoints(Cell cell, Workbook workbook) {
    method short2byte (line 36) | private static byte[] short2byte(short[] shorts) {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationData.java
  class AnnotationData (line 20) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java
  class AnnotationDataListener (line 20) | public class AnnotationDataListener extends AnalysisEventListener<Annota...
    method invoke (line 24) | @Override
    method doAfterAllAnalysed (line 29) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java
  class AnnotationDataTest (line 26) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 35) | @BeforeAll
    method t01ReadAndWrite07 (line 44) | @Test
    method t02ReadAndWrite03 (line 49) | @Test
    method t03ReadAndWriteCsv (line 54) | @Test
    method t11WriteStyle07 (line 59) | @Test
    method t12Write03 (line 64) | @Test
    method writeStyle (line 69) | private void writeStyle(File file) throws Exception {
    method readAndWrite (line 97) | private void readAndWrite(File file) throws Exception {
    method dataStyle (line 115) | private List<AnnotationStyleData> dataStyle() throws Exception {
    method data (line 124) | private List<AnnotationData> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameData.java
  class AnnotationIndexAndNameData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java
  class AnnotationIndexAndNameDataListener (line 17) | public class AnnotationIndexAndNameDataListener extends AnalysisEventLis...
    method invoke (line 21) | @Override
    method doAfterAllAnalysed (line 26) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java
  class AnnotationIndexAndNameDataTest (line 20) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 27) | @BeforeAll
    method t01ReadAndWrite07 (line 34) | @Test
    method t02ReadAndWrite03 (line 39) | @Test
    method t03ReadAndWriteCsv (line 44) | @Test
    method readAndWrite (line 49) | private void readAndWrite(File file) {
    method data (line 55) | private List<AnnotationIndexAndNameData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java
  class AnnotationStyleData (line 17) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java
  class BomData (line 9) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java
  class BomDataTest (line 29) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method t01ReadCsv (line 33) | @Test
    method t02ReadAndWriteCsv (line 39) | @Test
    method readAndWriteCsv (line 51) | private void readAndWriteCsv(File file, String charsetName, Boolean wi...
    method readCsv (line 90) | private void readCsv(File file) {
    method data (line 116) | private List<BomData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheData.java
  class CacheData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java
  class CacheDataTest (line 33) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 43) | @BeforeAll
    method t01ReadAndWrite (line 52) | @Test
    method t02ReadAndWriteInvoke (line 67) | @Test
    method t03ReadAndWriteInvokeMemory (line 121) | @Test
    method data (line 187) | private List<CacheData> data() {
    method dataInvoke (line 198) | private List<CacheInvokeData> dataInvoke() {
    method dataInvokeMemory (line 209) | private List<CacheInvokeMemoryData> dataInvokeMemory() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeData.java
  class CacheInvokeData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeMemoryData.java
  class CacheInvokeMemoryData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java
  class CellDataDataListener (line 18) | public class CellDataDataListener extends AnalysisEventListener<CellData...
    method invoke (line 22) | @Override
    method doAfterAllAnalysed (line 27) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java
  class CellDataDataTest (line 23) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 30) | @BeforeAll
    method t01ReadAndWrite07 (line 37) | @Test
    method t02ReadAndWrite03 (line 42) | @Test
    method t03ReadAndWriteCsv (line 47) | @Test
    method readAndWrite (line 52) | private void readAndWrite(File file) throws Exception {
    method data (line 57) | private List<CellDataWriteData> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataReadData.java
  class CellDataReadData (line 13) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataWriteData.java
  class CellDataWriteData (line 15) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetData.java
  class CharsetData (line 9) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetDataTest.java
  class CharsetDataTest (line 28) | @Slf4j
    method init (line 36) | @BeforeAll
    method t01ReadAndWriteCsv (line 43) | @Test
    method t02ReadAndWriteCsvError (line 49) | @Test
    method readAndWrite (line 73) | private void readAndWrite(File file, Charset charset) {
    method data (line 100) | private List<CharsetData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java
  class CompatibilityTest (line 29) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method t01 (line 33) | @Test
    method t02 (line 43) | @Test
    method t03 (line 54) | @Test
    method t04 (line 65) | @Test
    method t05 (line 76) | @Test
    method t06 (line 92) | @Test
    method t07 (line 104) | @Test
    method t08 (line 124) | @Test
    method t09 (line 148) | @Test
    method data (line 162) | private List<SimpleData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java
  class ConverterDataListener (line 20) | public class ConverterDataListener extends AnalysisEventListener<Convert...
    method invoke (line 24) | @Override
    method doAfterAllAnalysed (line 29) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java
  class ConverterDataTest (line 24) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 33) | @BeforeAll
    method t01ReadAndWrite07 (line 42) | @Test
    method t02ReadAndWrite03 (line 47) | @Test
    method t03ReadAndWriteCsv (line 52) | @Test
    method readAndWrite (line 57) | private void readAndWrite(File file) throws Exception {
    method t11ReadAllConverter07 (line 62) | @Test
    method t12ReadAllConverter03 (line 67) | @Test
    method t13ReadAllConverterCsv (line 72) | @Test
    method t21WriteImage07 (line 77) | @Test
    method t22WriteImage03 (line 82) | @Test
    method writeImage (line 87) | private void writeImage(File file) throws Exception {
    method readAllConverter (line 107) | private void readAllConverter(String fileName) {
    method data (line 112) | private List<ConverterWriteData> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java
  class ConverterReadData (line 19) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterTest.java
  class ConverterTest (line 17) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method t01FloatNumberConverter (line 20) | @Test

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java
  class ConverterWriteData (line 19) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ImageData.java
  class ImageData (line 18) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java
  class ReadAllConverterData (line 15) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java
  class ReadAllConverterDataListener (line 23) | public class ReadAllConverterDataListener extends AnalysisEventListener<...
    method invoke (line 27) | @Override
    method doAfterAllAnalysed (line 32) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java
  class DateFormatData (line 10) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java
  class DateFormatTest (line 23) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 31) | @BeforeAll
    method t01Read07 (line 39) | @Test
    method t02Read03 (line 45) | @Test
    method t03Read (line 51) | @Test
    method readCn (line 64) | private void readCn(File file) {
    method readUs (line 88) | private void readUs(File file) {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptData.java
  class EncryptData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataListener.java
  class EncryptDataListener (line 17) | public class EncryptDataListener extends AnalysisEventListener<EncryptDa...
    method invoke (line 21) | @Override
    method doAfterAllAnalysed (line 26) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java
  class EncryptDataTest (line 25) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method testformat (line 33) | @Test
    method init (line 42) | @BeforeAll
    method t01ReadAndWrite07 (line 50) | @Test
    method t02ReadAndWrite03 (line 55) | @Test
    method t03ReadAndWriteStream07 (line 60) | @Test
    method t04ReadAndWriteStream03 (line 65) | @Test
    method readAndWrite (line 70) | private void readAndWrite(File file) {
    method readAndWriteStream (line 75) | private void readAndWriteStream(File file, ExcelTypeEnum excelType) th...
    method data (line 86) | private List<SimpleData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExcelAnalysisStopSheetExceptionDataListener.java
  class ExcelAnalysisStopSheetExceptionDataListener (line 29) | @Getter
    method invoke (line 36) | @Override
    method doAfterAllAnalysed (line 46) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionData.java
  class ExceptionData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java
  class ExceptionDataListener (line 17) | public class ExceptionDataListener extends AnalysisEventListener<Excepti...
    method onException (line 21) | @Override
    method hasNext (line 26) | @Override
    method invoke (line 31) | @Override
    method doAfterAllAnalysed (line 39) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java
  class ExceptionDataTest (line 26) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 38) | @BeforeAll
    method t01ReadAndWrite07 (line 49) | @Test
    method t02ReadAndWrite03 (line 54) | @Test
    method t03ReadAndWriteCsv (line 59) | @Test
    method t11ReadAndWrite07 (line 64) | @Test
    method t12ReadAndWrite03 (line 69) | @Test
    method t21ReadAndWrite07 (line 74) | @Test
    method t22ReadAndWrite03 (line 79) | @Test
    method readAndWriteExcelAnalysisStopSheetException (line 85) | private void readAndWriteExcelAnalysisStopSheetException(File file) th...
    method readAndWriteException (line 112) | private void readAndWriteException(File file) throws Exception {
    method readAndWrite (line 120) | private void readAndWrite(File file) throws Exception {
    method data (line 125) | private List<ExceptionData> data() {
    method data (line 135) | private List<ExceptionData> data(String prefix) {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionThrowDataListener.java
  class ExceptionThrowDataListener (line 15) | public class ExceptionThrowDataListener implements ReadListener<Exceptio...
    method invoke (line 19) | @Override
    method doAfterAllAnalysed (line 27) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeData.java
  class ExcludeOrIncludeData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java
  class ExcludeOrIncludeDataTest (line 13) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 36) | @BeforeAll
    method t01ExcludeIndex07 (line 58) | @Test
    method t02ExcludeIndex03 (line 63) | @Test
    method t03ExcludeIndexCsv (line 68) | @Test
    method t11ExcludeFieldName07 (line 73) | @Test
    method t12ExcludeFieldName03 (line 78) | @Test
    method t13ExcludeFieldNameCsv (line 83) | @Test
    method t21IncludeIndex07 (line 88) | @Test
    method t22IncludeIndex03 (line 93) | @Test
    method t23IncludeIndexCsv (line 98) | @Test
    method t31IncludeFieldName07 (line 103) | @Test
    method t32IncludeFieldName03 (line 108) | @Test
    method t33IncludeFieldNameCsv (line 113) | @Test
    method t41IncludeFieldNameOrder07 (line 118) | @Test
    method t42IncludeFieldNameOrder03 (line 123) | @Test
    method t43IncludeFieldNameOrderCsv (line 128) | @Test
    method t41IncludeFieldNameOrderIndex07 (line 133) | @Test
    method t42IncludeFieldNameOrderIndex03 (line 138) | @Test
    method t43IncludeFieldNameOrderIndexCsv (line 143) | @Test
    method excludeIndex (line 148) | private void excludeIndex(File file) {
    method excludeFieldName (line 163) | private void excludeFieldName(File file) {
    method includeIndex (line 178) | private void includeIndex(File file) {
    method includeFieldName (line 193) | private void includeFieldName(File file) {
    method includeFieldNameOrderIndex (line 209) | private void includeFieldNameOrderIndex(File file) {
    method includeFieldNameOrder (line 230) | private void includeFieldNameOrder(File file) {
    method data (line 249) | private List<ExcludeOrIncludeData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraData.java
  class ExtraData (line 10) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java
  class ExtraDataListener (line 15) | public class ExtraDataListener extends AnalysisEventListener<ExtraData> {
    method invoke (line 18) | @Override
    method doAfterAllAnalysed (line 21) | @Override
    method extra (line 24) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java
  class ExtraDataTest (line 22) | public class ExtraDataTest {
    method init (line 29) | @BeforeAll
    method t01Read07 (line 36) | @Test
    method t02Read03 (line 41) | @Test
    method t03Read (line 46) | @Test
    method read (line 81) | private void read(File file) {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillData.java
  class FillData (line 14) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java
  class FillDataTest (line 28) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 54) | @BeforeAll
    method t01Fill07 (line 80) | @Test
    method t02Fill03 (line 85) | @Test
    method t03FillCsv (line 90) | @Test
    method t03ComplexFill07 (line 97) | @Test
    method t04ComplexFill03 (line 102) | @Test
    method t05HorizontalFill07 (line 107) | @Test
    method t06HorizontalFill03 (line 112) | @Test
    method t07ByNameFill07 (line 117) | @Test
    method t08ByNameFill03 (line 122) | @Test
    method t09CompositeFill07 (line 127) | @Test
    method t10CompositeFill03 (line 132) | @Test
    method byNameFill (line 137) | private void byNameFill(File file, File template) {
    method compositeFill (line 144) | private void compositeFill(File file, File template) {
    method horizontalFill (line 169) | private void horizontalFill(File file, File template) {
    method complexFill (line 187) | private void complexFill(File file, File template) {
    method fill (line 204) | private void fill(File file, File template) {
    method data (line 211) | private List<FillData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java
  class FillAnnotationData (line 19) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java
  class FillAnnotationDataTest (line 35) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 43) | @BeforeAll
    method t01ReadAndWrite07 (line 51) | @Test
    method t02ReadAndWrite03 (line 56) | @Test
    method readAndWrite (line 61) | private void readAndWrite(File file, File fileTemplate) throws Excepti...
    method data (line 107) | private List<FillAnnotationData> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedData.java
  class FillStyleAnnotatedData (line 17) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java
  class FillStyleAnnotatedTest (line 37) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 45) | @BeforeAll
    method t01Fill07 (line 53) | @Test
    method t01Fill07check (line 62) | private void t01Fill07check(XSSFRow row) {
    method t02Fill03 (line 107) | @Test
    method t02Fill03check (line 116) | private void t02Fill03check(HSSFWorkbook workbook, HSSFRow row) {
    method fill (line 167) | private void fill(File file, File template) throws Exception {
    method t11FillStyleHandler07check (line 171) | private void t11FillStyleHandler07check(XSSFRow row) {
    method t12FillStyleHandler03check (line 216) | private void t12FillStyleHandler03check(HSSFWorkbook workbook, HSSFRow...
    method fillStyleHandler (line 267) | private void fillStyleHandler(File file, File template) throws Excepti...
    method data (line 314) | private List<FillStyleAnnotatedData> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleData.java
  class FillStyleData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java
  class FillStyleDataTest (line 36) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 46) | @BeforeAll
    method t01Fill07 (line 56) | @Test
    method t01Fill07check (line 65) | private void t01Fill07check(XSSFRow row) {
    method t02Fill03 (line 110) | @Test
    method t02Fill03check (line 119) | private void t02Fill03check(HSSFWorkbook workbook, HSSFRow row) {
    method fill (line 170) | private void fill(File file, File template) throws Exception {
    method t11FillStyleHandler07 (line 174) | @Test
    method t11FillStyleHandler07check (line 183) | private void t11FillStyleHandler07check(XSSFRow row) {
    method t12FillStyleHandler03 (line 228) | @Test
    method t12FillStyleHandler03check (line 237) | private void t12FillStyleHandler03check(HSSFWorkbook workbook, HSSFRow...
    method fillStyleHandler (line 288) | private void fillStyleHandler(File file, File template) throws Excepti...
    method data (line 335) | private List<FillStyleData> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java
  class WriteHandler (line 22) | public class WriteHandler implements WorkbookWriteHandler, SheetWriteHan...
    method beforeCellCreate (line 37) | @Override
    method afterCellCreate (line 58) | @Override
    method afterCellDataConverted (line 78) | @Override
    method afterCellDispose (line 96) | @Override
    method beforeRowCreate (line 116) | @Override
    method afterRowCreate (line 137) | @Override
    method afterRowDispose (line 157) | @Override
    method beforeSheetCreate (line 177) | @Override
    method afterSheetCreate (line 194) | @Override
    method beforeWorkbookCreate (line 211) | @Override
    method afterWorkbookCreate (line 228) | @Override
    method afterWorkbookDispose (line 245) | @Override
    method afterAll (line 263) | public void afterAll() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerData.java
  class WriteHandlerData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java
  class WriteHandlerTest (line 18) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 25) | @BeforeAll
    method t01WorkbookWrite07 (line 32) | @Test
    method t02WorkbookWrite03 (line 37) | @Test
    method t03WorkbookWriteCsv (line 42) | @Test
    method t11SheetWrite07 (line 47) | @Test
    method t12SheetWrite03 (line 52) | @Test
    method t13SheetWriteCsv (line 57) | @Test
    method t21TableWrite07 (line 62) | @Test
    method t22TableWrite03 (line 67) | @Test
    method t23TableWriteCsv (line 72) | @Test
    method workbookWrite (line 77) | private void workbookWrite(File file) {
    method sheetWrite (line 83) | private void sheetWrite(File file) {
    method tableWrite (line 89) | private void tableWrite(File file) {
    method data (line 96) | private List<WriteHandlerData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java
  class ComplexDataListener (line 17) | public class ComplexDataListener extends AnalysisEventListener<ComplexHe...
    method invoke (line 21) | @Override
    method doAfterAllAnalysed (line 26) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadData.java
  class ComplexHeadData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java
  class ComplexHeadDataTest (line 18) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 28) | @BeforeAll
    method t01ReadAndWrite07 (line 38) | @Test
    method t02ReadAndWrite03 (line 43) | @Test
    method t03ReadAndWriteCsv (line 48) | @Test
    method readAndWrite (line 53) | private void readAndWrite(File file) {
    method t11ReadAndWriteAutomaticMergeHead07 (line 59) | @Test
    method t12ReadAndWriteAutomaticMergeHead03 (line 64) | @Test
    method t13ReadAndWriteAutomaticMergeHeadCsv (line 69) | @Test
    method readAndWriteAutomaticMergeHead (line 74) | private void readAndWriteAutomaticMergeHead(File file) {
    method data (line 79) | private List<ComplexHeadData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java
  class ListHeadDataListener (line 19) | public class ListHeadDataListener implements ReadListener<Map<Integer, S...
    method invokeHead (line 24) | @Override
    method invoke (line 33) | @Override
    method doAfterAllAnalysed (line 38) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java
  class ListHeadDataTest (line 20) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 27) | @BeforeAll
    method t01ReadAndWrite07 (line 34) | @Test
    method t02ReadAndWrite03 (line 39) | @Test
    method t03ReadAndWriteCsv (line 44) | @Test
    method readAndWrite (line 49) | private void readAndWrite(File file) throws Exception {
    method head (line 54) | private List<List<String>> head() {
    method data (line 68) | private List<List<Object>> data() throws ParseException {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadData.java
  class NoHeadData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java
  class NoHeadDataListener (line 17) | public class NoHeadDataListener extends AnalysisEventListener<NoHeadData> {
    method invoke (line 21) | @Override
    method doAfterAllAnalysed (line 26) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java
  class NoHeadDataTest (line 18) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 25) | @BeforeAll
    method t01ReadAndWrite07 (line 32) | @Test
    method t02ReadAndWrite03 (line 37) | @Test
    method t03ReadAndWriteCsv (line 42) | @Test
    method readAndWrite (line 47) | private void readAndWrite(File file) {
    method data (line 52) | private List<NoHeadData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeData.java
  class LargeData (line 10) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java
  class LargeDataListener (line 15) | public class LargeDataListener extends AnalysisEventListener<LargeData> {
    method invoke (line 19) | @Override
    method doAfterAllAnalysed (line 30) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java
  class LargeDataTest (line 28) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 40) | @BeforeAll
    method t01Read (line 50) | @Test
    method t02Fill (line 58) | @Test
    method t03ReadAndWriteCsv (line 69) | @Test
    method t04Write (line 88) | @Test
    method data (line 131) | private List<LargeData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsData.java
  class MultipleSheetsData (line 10) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java
  class MultipleSheetsDataTest (line 20) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 26) | @BeforeAll
    method t01Read07 (line 32) | @Test
    method t02Read03 (line 37) | @Test
    method t03Read07All (line 42) | @Test
    method t04Read03All (line 47) | @Test
    method read (line 52) | private void read(File file) {
    method readAll (line 65) | private void readAll(File file) {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java
  class MultipleSheetsListener (line 17) | public class MultipleSheetsListener extends AnalysisEventListener<Multip...
    method invoke (line 21) | @Override
    method doAfterAllAnalysed (line 26) | @Override
    method getList (line 33) | public List<MultipleSheetsData> getList() {
    method setList (line 37) | public void setList(List<MultipleSheetsData> list) {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/nomodel/NoModelDataTest.java
  class NoModelDataTest (line 27) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 38) | @BeforeAll
    method t01ReadAndWrite07 (line 48) | @Test
    method t02ReadAndWrite03 (line 53) | @Test
    method t03ReadAndWriteCsv (line 58) | @Test
    method readAndWrite (line 63) | private void readAndWrite(File file, File fileRepeat, boolean isCsv) t...
    method data (line 117) | private List<List<Object>> data() throws Exception {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelData.java
  class UnCamelData (line 10) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java
  class UnCamelDataListener (line 17) | @Slf4j
    method invokeHeadMap (line 21) | @Override
    method invoke (line 33) | @Override
    method doAfterAllAnalysed (line 38) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java
  class UnCamelDataTest (line 18) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 25) | @BeforeAll
    method t01ReadAndWrite07 (line 32) | @Test
    method t02ReadAndWrite03 (line 37) | @Test
    method t03ReadAndWriteCsv (line 42) | @Test
    method readAndWrite (line 47) | private void readAndWrite(File file) {
    method data (line 52) | private List<UnCamelData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterData.java
  class ParameterData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java
  class ParameterDataListener (line 17) | public class ParameterDataListener extends AnalysisEventListener<Paramet...
    method invoke (line 21) | @Override
    method doAfterAllAnalysed (line 26) | @Override

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java
  class ParameterDataTest (line 27) | @TestMethodOrder(MethodOrderer.MethodName.class)
    method init (line 33) | @BeforeAll
    method t01ReadAndWrite (line 39) | @Test
    method t02ReadAndWrite (line 50) | @Test
    method readAndWrite1 (line 61) | private void readAndWrite1(File file, ExcelTypeEnum type) {
    method readAndWrite2 (line 67) | private void readAndWrite2(File file, ExcelTypeEnum type) {
    method readAndWrite3 (line 72) | private void readAndWrite3(File file, ExcelTypeEnum type) throws Excep...
    method readAndWrite4 (line 79) | private void readAndWrite4(File file, ExcelTypeEnum type) throws Excep...
    method readAndWrite5 (line 84) | private void readAndWrite5(File file, ExcelTypeEnum type) throws Excep...
    method readAndWrite6 (line 106) | private void readAndWrite6(File file, ExcelTypeEnum type) throws Excep...
    method readAndWrite7 (line 129) | private void readAndWrite7(File file, ExcelTypeEnum type) {
    method data (line 137) | private List<ParameterData> data() {

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionData.java
  class RepetitionData (line 12) | @Getter

FILE: easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java
  class RepetitionDataListener (line 18) | public class RepetitionDataListener extends AnalysisEventListener<Repeti...
    method invoke (line 22) | @Override
  
Condensed preview — 622 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,706K chars).
[
  {
    "path": ".editorconfig",
    "chars": 229,
    "preview": "root = true\n\n[*.{groovy, java, kt, xml}]\n#缩进风格:空格\nindent_style = space\n#缩进大小\nindent_size = 4\n#换行符lf\nend_of_line = lf\n#字符"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE.zh-CN.md",
    "chars": 209,
    "preview": "# 建议先去看文档\n[快速开始](https://easyexcel.opensource.alibaba.com/docs/current/) 、[常见问题](https://easyexcel.opensource.alibaba.co"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.md",
    "chars": 349,
    "preview": "---\nname: bug\nabout: 发现一个新的Bug\ntitle: ''\nlabels: bug\nassignees: zhuangjiaju\n\n---\n\n# 建议先去看文档\n[快速开始](https://easyexcel.ope"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "chars": 367,
    "preview": "---\nname: question\nabout: 有使用疑问,请先阅读“快速开始”,上面无法解决再提交问题。处理完请关闭问题。\ntitle: ''\nlabels: help wanted\nassignees: ''\n\n---\n\n# 建议先"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/suggest.md",
    "chars": 214,
    "preview": "---\nname: suggest\nabout: 给出一些建议的能\ntitle: ''\nlabels: suggest\nassignees: ''\n\n---\n\n# 建议先去看文档\n[快速开始](https://easyexcel.opens"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
    "chars": 378,
    "preview": "## 关联的ISSUE\nTODO 请说明关联的异常\n## 问题描述&解决\nTODO 描述下出了什么问题,必要的话提供excel。在PR合并前,审核同学一定会复现问题,然后再PR合并的。\n## 代码注意点\n* 确认已经安装了阿里巴巴代码规约插"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 1922,
    "preview": "#\n#    Copyright 2009-2021 the original author or authors.\n#\n#    Licensed under the Apache License, Version 2.0 (the \"L"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 1848,
    "preview": "#\n#    Copyright 2009-2021 the original author or authors.\n#\n#    Licensed under the Apache License, Version 2.0 (the \"L"
  },
  {
    "path": ".github/workflows/sync2gitee.yml",
    "chars": 915,
    "preview": "# 通过 Github action, 在仓库的每一次 commit 后自动同步到 Gitee 上\nname: Mirror the Github organization repos to Gitee\non: [push]\n\njobs:\n"
  },
  {
    "path": ".gitignore",
    "chars": 188,
    "preview": ".idea/\n*/.settings/\n*.idea\n.DS_Store\n**/.iml*\n*.iml\n**/.class\n**/.classpath\n**/.project\n*/target/\ntarget/\n*.ipr\n*.iws\nan"
  },
  {
    "path": ".mvn/wrapper/maven-wrapper.properties",
    "chars": 1020,
    "preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE f"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 527,
    "preview": "## 前言\n非常感谢您愿意协助EasyExcel的开发,EasyExcel成长离不开大家的贡献。但是为了合作的更有效率,希望我们在贡献代码的时候能按照如下约定。\n## 提前沟通\n尽量把自己的想法和实现思路提前沟通,可以通过issue,钉钉,"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 9313,
    "preview": "\n\nEasyExcel\n======================\n[![Build Status](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml/badge."
  },
  {
    "path": "README_EN.md",
    "chars": 10216,
    "preview": "EasyExcel\n======================\n[![Build Status](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml/badge.sv"
  },
  {
    "path": "docs/API.md",
    "chars": 2955,
    "preview": "# 详细参数介绍\n## 关于常见类解析\n* EasyExcel 入口类,用于构建开始各种操作\n* ExcelReaderBuilder ExcelWriterBuilder 构建出一个 ReadWorkbook WriteWorkbook,"
  },
  {
    "path": "docs/LARGEREAD.md",
    "chars": 1704,
    "preview": "# 10M以上文件读取说明\n03版没有办法处理,相对内存占用大很多。excel 07版本有个共享字符串[共享字符串](https://docs.microsoft.com/zh-cn/office/open-xml/working-with"
  },
  {
    "path": "easyexcel/pom.xml",
    "chars": 846,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "easyexcel/src/main/java/com/alibaba/excel/Empty.java",
    "chars": 95,
    "preview": "package com.alibaba.excel;\n\n/**\n * empty\n *\n * @author Jiaju Zhuang\n */\npublic class Empty {\n}\n"
  },
  {
    "path": "easyexcel-core/pom.xml",
    "chars": 1395,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/EasyExcel.java",
    "chars": 186,
    "preview": "package com.alibaba.excel;\n\n/**\n * This is actually {@link EasyExcelFactory}, and short names look better.\n *\n * @author"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java",
    "chars": 10381,
    "preview": "package com.alibaba.excel;\n\nimport java.io.File;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\nimport com.al"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/ExcelReader.java",
    "chars": 2657,
    "preview": "package com.alibaba.excel;\n\nimport java.io.Closeable;\nimport java.util.Arrays;\nimport java.util.List;\n\nimport com.alibab"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/ExcelWriter.java",
    "chars": 4421,
    "preview": "package com.alibaba.excel;\n\nimport java.io.Closeable;\nimport java.util.Collection;\nimport java.util.function.Supplier;\n\n"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java",
    "chars": 929,
    "preview": "package com.alibaba.excel.analysis;\n\nimport java.util.List;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport co"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java",
    "chars": 9348,
    "preview": "package com.alibaba.excel.analysis;\n\nimport com.alibaba.excel.analysis.csv.CsvExcelReadExecutor;\nimport com.alibaba.exce"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java",
    "chars": 404,
    "preview": "package com.alibaba.excel.analysis;\n\nimport java.util.List;\n\nimport com.alibaba.excel.read.metadata.ReadSheet;\n\n/**\n * E"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java",
    "chars": 5911,
    "preview": "package com.alibaba.excel.analysis.csv;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStr"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java",
    "chars": 220,
    "preview": "package com.alibaba.excel.analysis.v03;\n\n/**\n * Need to ignore the current handler without reading the current sheet.\n *"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java",
    "chars": 2678,
    "preview": "package com.alibaba.excel.analysis.v03;\n\nimport java.io.IOException;\nimport java.util.HashMap;\nimport java.util.Map;\n\nim"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java",
    "chars": 590,
    "preview": "package com.alibaba.excel.analysis.v03;\n\nimport org.apache.poi.hssf.record.Record;\n\nimport com.alibaba.excel.context.xls"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java",
    "chars": 8530,
    "preview": "package com.alibaba.excel.analysis.v03;\n\nimport java.io.IOException;\nimport java.util.HashMap;\nimport java.util.List;\nim"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java",
    "chars": 466,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.Record;\n\nimport com.alibaba.excel.an"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java",
    "chars": 773,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;\nimpor"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java",
    "chars": 3236,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.apache."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java",
    "chars": 925,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;\nimpor"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java",
    "chars": 664,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.BoundSheetRecord;\nimport org.apache."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java",
    "chars": 2231,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport java.util.LinkedHashMap;\n\nimport com.alibaba.excel.analysis.v03"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java",
    "chars": 2208,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport java.util.LinkedHashMap;\n\nimport org.apache.poi.hssf.record.Rec"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java",
    "chars": 4130,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport java.math.BigDecimal;\nimport java.util.Map;\n\nimport com.alibaba"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java",
    "chars": 1193,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.HyperlinkRecord;\nimport org.apache.p"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java",
    "chars": 713,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.IndexRecord;\nimport org.apache.poi.h"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java",
    "chars": 1086,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;\nimpor"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java",
    "chars": 1688,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport java.util.Map;\n\nimport com.alibaba.excel.analysis.v03.Ignorable"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java",
    "chars": 1430,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.MergeCellsRecord;\nimport org.apache."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java",
    "chars": 1200,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.NoteRecord;\nimport org.apache.poi.hs"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java",
    "chars": 1734,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport java.math.BigDecimal;\n\nimport com.alibaba.excel.analysis.v03.Ig"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java",
    "chars": 1127,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.CommonObjectDataSubRecord;\nimport or"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java",
    "chars": 761,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler;\nimpor"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java",
    "chars": 641,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.Record;\nimport org.apache.poi.hssf.r"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java",
    "chars": 1351,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.Record;\nimport org.apache.poi.hssf.r"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java",
    "chars": 1491,
    "preview": "package com.alibaba.excel.analysis.v03.handlers;\n\nimport org.apache.poi.hssf.record.Record;\nimport org.apache.poi.hssf.r"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java",
    "chars": 12977,
    "preview": "package com.alibaba.excel.analysis.v07;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.io.InputStream;\nim"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java",
    "chars": 450,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport com.alibaba.excel.context.xlsx.XlsxReadContext;\n\n/**\n * Cell Va"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java",
    "chars": 712,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport org.xml.sax.Attributes;\n\nimport com.alibaba.excel.context.xlsx."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java",
    "chars": 1261,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport com.alibaba.excel.context.xlsx.XlsxReadContext;\nimport com.alib"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java",
    "chars": 204,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\n/**\n * Cell inline string value handler\n *\n * @author jipengfei\n */\npu"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java",
    "chars": 4876,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport java.math.BigDecimal;\n\nimport com.alibaba.excel.constant.EasyEx"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java",
    "chars": 178,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\n/**\n * Cell Value Handler\n *\n * @author jipengfei\n */\npublic class Cel"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java",
    "chars": 710,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport com.alibaba.excel.constant.ExcelXmlConstants;\nimport com.alibab"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java",
    "chars": 2388,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport java.util.Optional;\n\nimport org.apache.poi.openxml4j.opc.Packag"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java",
    "chars": 1124,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport org.xml.sax.Attributes;\n\nimport com.alibaba.excel.constant.Exce"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java",
    "chars": 3114,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport java.util.LinkedHashMap;\n\nimport com.alibaba.excel.constant.Exc"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java",
    "chars": 1111,
    "preview": "package com.alibaba.excel.analysis.v07.handlers;\n\nimport org.xml.sax.Attributes;\n\nimport com.alibaba.excel.context.xlsx."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java",
    "chars": 6313,
    "preview": "/* ====================================================================\n   Licensed to the Apache Software Foundation (A"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java",
    "chars": 5480,
    "preview": "package com.alibaba.excel.analysis.v07.handlers.sax;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport com.alibab"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnore.java",
    "chars": 406,
    "preview": "package com.alibaba.excel.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Inherited;\ni"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnoreUnannotated.java",
    "chars": 427,
    "preview": "package com.alibaba.excel.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Inherited;\ni"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelProperty.java",
    "chars": 1718,
    "preview": "package com.alibaba.excel.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Inherited;\ni"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/DateTimeFormat.java",
    "chars": 1004,
    "preview": "package com.alibaba.excel.annotation.format;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Inher"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/NumberFormat.java",
    "chars": 876,
    "preview": "package com.alibaba.excel.annotation.format;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Inher"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ColumnWidth.java",
    "chars": 605,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentFontStyle.java",
    "chars": 2073,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentLoopMerge.java",
    "chars": 612,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentRowHeight.java",
    "chars": 593,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentStyle.java",
    "chars": 4823,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadFontStyle.java",
    "chars": 2069,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadRowHeight.java",
    "chars": 587,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java",
    "chars": 4777,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/OnceAbsoluteMerge.java",
    "chars": 798,
    "preview": "package com.alibaba.excel.annotation.write.style;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/Ehcache.java",
    "chars": 5941,
    "preview": "package com.alibaba.excel.cache;\n\nimport java.io.File;\nimport java.util.ArrayList;\nimport java.util.Optional;\nimport jav"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/MapCache.java",
    "chars": 786,
    "preview": "package com.alibaba.excel.cache;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.alibaba.excel.context.A"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/ReadCache.java",
    "chars": 855,
    "preview": "package com.alibaba.excel.cache;\n\nimport com.alibaba.excel.context.AnalysisContext;\n\n/**\n * Read cache\n *\n * @author Jia"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/XlsCache.java",
    "chars": 686,
    "preview": "package com.alibaba.excel.cache;\n\nimport org.apache.poi.hssf.record.SSTRecord;\n\nimport com.alibaba.excel.context.Analysi"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/EternalReadCacheSelector.java",
    "chars": 527,
    "preview": "package com.alibaba.excel.cache.selector;\n\nimport org.apache.poi.openxml4j.opc.PackagePart;\n\nimport com.alibaba.excel.ca"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/ReadCacheSelector.java",
    "chars": 404,
    "preview": "package com.alibaba.excel.cache.selector;\n\nimport org.apache.poi.openxml4j.opc.PackagePart;\n\nimport com.alibaba.excel.ca"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java",
    "chars": 3530,
    "preview": "package com.alibaba.excel.cache.selector;\n\nimport java.io.IOException;\n\nimport lombok.Data;\nimport lombok.EqualsAndHashC"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/constant/BuiltinFormats.java",
    "chars": 12082,
    "preview": "package com.alibaba.excel.constant;\n\nimport java.util.Locale;\nimport java.util.Map;\n\nimport com.alibaba.excel.util.MapUt"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/constant/EasyExcelConstants.java",
    "chars": 509,
    "preview": "package com.alibaba.excel.constant;\n\nimport java.math.MathContext;\nimport java.math.RoundingMode;\n\n/**\n * Used to store "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java",
    "chars": 3120,
    "preview": "package com.alibaba.excel.constant;\n\n/**\n * @author jipengfei\n */\npublic class ExcelXmlConstants {\n    public static fin"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/constant/OrderConstant.java",
    "chars": 601,
    "preview": "package com.alibaba.excel.constant;\n\n/**\n * Order constant.\n *\n * @author Jiaju Zhuang\n */\npublic class OrderConstant {\n"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContext.java",
    "chars": 3264,
    "preview": "package com.alibaba.excel.context;\n\nimport java.io.InputStream;\nimport java.util.List;\n\nimport com.alibaba.excel.event.A"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java",
    "chars": 5260,
    "preview": "package com.alibaba.excel.context;\n\nimport java.io.InputStream;\nimport java.util.List;\n\nimport com.alibaba.excel.excepti"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContext.java",
    "chars": 2488,
    "preview": "package com.alibaba.excel.context;\n\nimport java.io.OutputStream;\n\nimport org.apache.poi.ss.usermodel.Sheet;\nimport org.a"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java",
    "chars": 21011,
    "preview": "package com.alibaba.excel.context;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.OutputStream;\ni"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/csv/CsvReadContext.java",
    "chars": 750,
    "preview": "package com.alibaba.excel.context.csv;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport com.alibaba.excel.read."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/csv/DefaultCsvReadContext.java",
    "chars": 942,
    "preview": "package com.alibaba.excel.context.csv;\n\nimport com.alibaba.excel.context.AnalysisContextImpl;\nimport com.alibaba.excel.r"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/xls/DefaultXlsReadContext.java",
    "chars": 945,
    "preview": "package com.alibaba.excel.context.xls;\n\nimport com.alibaba.excel.context.AnalysisContextImpl;\nimport com.alibaba.excel.r"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/xls/XlsReadContext.java",
    "chars": 750,
    "preview": "package com.alibaba.excel.context.xls;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport com.alibaba.excel.read."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/DefaultXlsxReadContext.java",
    "chars": 959,
    "preview": "package com.alibaba.excel.context.xlsx;\n\nimport com.alibaba.excel.context.AnalysisContextImpl;\nimport com.alibaba.excel."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java",
    "chars": 761,
    "preview": "package com.alibaba.excel.context.xlsx;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport com.alibaba.excel.read"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/AutoConverter.java",
    "chars": 194,
    "preview": "package com.alibaba.excel.converters;\n\n/**\n * An empty converter.It's automatically converted by type.\n *\n * @author Jia"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/Converter.java",
    "chars": 3146,
    "preview": "package com.alibaba.excel.converters;\n\nimport com.alibaba.excel.enums.CellDataTypeEnum;\nimport com.alibaba.excel.metadat"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/ConverterKeyBuild.java",
    "chars": 1546,
    "preview": "package com.alibaba.excel.converters;\n\nimport java.util.Map;\n\nimport com.alibaba.excel.enums.CellDataTypeEnum;\nimport co"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java",
    "chars": 9102,
    "preview": "package com.alibaba.excel.converters;\n\nimport java.util.Map;\n\nimport com.alibaba.excel.converters.ConverterKeyBuild.Conv"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java",
    "chars": 270,
    "preview": "package com.alibaba.excel.converters;\n\n/**\n * When implementing <code>convertToExcelData</code> method, pay attention to"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/ReadConverterContext.java",
    "chars": 752,
    "preview": "package com.alibaba.excel.converters;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport com.alibaba.excel.metada"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/WriteConverterContext.java",
    "chars": 717,
    "preview": "package com.alibaba.excel.converters;\n\nimport com.alibaba.excel.context.WriteContext;\nimport com.alibaba.excel.metadata."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalBooleanConverter.java",
    "chars": 1402,
    "preview": "package com.alibaba.excel.converters.bigdecimal;\n\nimport java.math.BigDecimal;\n\nimport com.alibaba.excel.converters.Conv"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java",
    "chars": 1274,
    "preview": "package com.alibaba.excel.converters.bigdecimal;\n\nimport java.math.BigDecimal;\n\nimport com.alibaba.excel.converters.Conv"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java",
    "chars": 1381,
    "preview": "package com.alibaba.excel.converters.bigdecimal;\n\nimport java.math.BigDecimal;\nimport java.text.ParseException;\n\nimport "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java",
    "chars": 1402,
    "preview": "package com.alibaba.excel.converters.biginteger;\n\nimport java.math.BigInteger;\n\nimport com.alibaba.excel.converters.Conv"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java",
    "chars": 1289,
    "preview": "package com.alibaba.excel.converters.biginteger;\n\nimport java.math.BigInteger;\n\nimport com.alibaba.excel.converters.Conv"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java",
    "chars": 1396,
    "preview": "package com.alibaba.excel.converters.biginteger;\n\nimport java.math.BigInteger;\nimport java.text.ParseException;\n\nimport "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanBooleanConverter.java",
    "chars": 1159,
    "preview": "package com.alibaba.excel.converters.booleanconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibab"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java",
    "chars": 1384,
    "preview": "package com.alibaba.excel.converters.booleanconverter;\n\nimport java.math.BigDecimal;\n\nimport com.alibaba.excel.converter"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanStringConverter.java",
    "chars": 1183,
    "preview": "package com.alibaba.excel.converters.booleanconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibab"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/BoxingByteArrayImageConverter.java",
    "chars": 881,
    "preview": "package com.alibaba.excel.converters.bytearray;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/ByteArrayImageConverter.java",
    "chars": 723,
    "preview": "package com.alibaba.excel.converters.bytearray;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteBooleanConverter.java",
    "chars": 1388,
    "preview": "package com.alibaba.excel.converters.byteconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.e"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java",
    "chars": 1215,
    "preview": "package com.alibaba.excel.converters.byteconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.e"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java",
    "chars": 1305,
    "preview": "package com.alibaba.excel.converters.byteconverter;\n\nimport java.text.ParseException;\n\nimport com.alibaba.excel.converte"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java",
    "chars": 1163,
    "preview": "package com.alibaba.excel.converters.date;\n\nimport java.util.Date;\n\nimport com.alibaba.excel.converters.Converter;\nimpor"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java",
    "chars": 2053,
    "preview": "package com.alibaba.excel.converters.date;\n\nimport java.math.BigDecimal;\nimport java.util.Date;\n\nimport com.alibaba.exce"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateStringConverter.java",
    "chars": 1806,
    "preview": "package com.alibaba.excel.converters.date;\n\nimport java.text.ParseException;\nimport java.util.Date;\n\nimport com.alibaba."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java",
    "chars": 1398,
    "preview": "package com.alibaba.excel.converters.doubleconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java",
    "chars": 1230,
    "preview": "package com.alibaba.excel.converters.doubleconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java",
    "chars": 1320,
    "preview": "package com.alibaba.excel.converters.doubleconverter;\n\nimport java.text.ParseException;\n\nimport com.alibaba.excel.conver"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/file/FileImageConverter.java",
    "chars": 835,
    "preview": "package com.alibaba.excel.converters.file;\n\nimport java.io.File;\nimport java.io.IOException;\n\nimport com.alibaba.excel.c"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java",
    "chars": 1403,
    "preview": "package com.alibaba.excel.converters.floatconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java",
    "chars": 1245,
    "preview": "package com.alibaba.excel.converters.floatconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java",
    "chars": 1312,
    "preview": "package com.alibaba.excel.converters.floatconverter;\n\nimport java.text.ParseException;\n\nimport com.alibaba.excel.convert"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/inputstream/InputStreamImageConverter.java",
    "chars": 866,
    "preview": "package com.alibaba.excel.converters.inputstream;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\nimport com.a"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java",
    "chars": 1394,
    "preview": "package com.alibaba.excel.converters.integer;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel.e"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java",
    "chars": 1249,
    "preview": "package com.alibaba.excel.converters.integer;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel.c"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java",
    "chars": 1319,
    "preview": "package com.alibaba.excel.converters.integer;\n\nimport java.text.ParseException;\n\nimport com.alibaba.excel.converters.Con"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/localdate/LocalDateDateConverter.java",
    "chars": 1321,
    "preview": "package com.alibaba.excel.converters.localdate;\n\nimport java.time.LocalDate;\nimport java.time.LocalDateTime;\n\nimport com"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/localdate/LocalDateNumberConverter.java",
    "chars": 2127,
    "preview": "package com.alibaba.excel.converters.localdate;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDate;\nimport java.ti"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/localdate/LocalDateStringConverter.java",
    "chars": 2025,
    "preview": "package com.alibaba.excel.converters.localdate;\n\nimport java.text.ParseException;\nimport java.time.LocalDate;\n\nimport co"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java",
    "chars": 1223,
    "preview": "package com.alibaba.excel.converters.localdatetime;\n\nimport java.time.LocalDateTime;\n\nimport com.alibaba.excel.converter"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeNumberConverter.java",
    "chars": 2135,
    "preview": "package com.alibaba.excel.converters.localdatetime;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\n\nimpor"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java",
    "chars": 2065,
    "preview": "package com.alibaba.excel.converters.localdatetime;\n\nimport java.text.ParseException;\nimport java.time.LocalDateTime;\n\ni"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongBooleanConverter.java",
    "chars": 1381,
    "preview": "package com.alibaba.excel.converters.longconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.e"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java",
    "chars": 1241,
    "preview": "package com.alibaba.excel.converters.longconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.e"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java",
    "chars": 1307,
    "preview": "package com.alibaba.excel.converters.longconverter;\n\nimport java.text.ParseException;\n\nimport com.alibaba.excel.converte"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortBooleanConverter.java",
    "chars": 1389,
    "preview": "package com.alibaba.excel.converters.shortconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java",
    "chars": 1249,
    "preview": "package com.alibaba.excel.converters.shortconverter;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortStringConverter.java",
    "chars": 1312,
    "preview": "package com.alibaba.excel.converters.shortconverter;\n\nimport java.text.ParseException;\n\nimport com.alibaba.excel.convert"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringBooleanConverter.java",
    "chars": 1171,
    "preview": "package com.alibaba.excel.converters.string;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel.en"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringErrorConverter.java",
    "chars": 1164,
    "preview": "package com.alibaba.excel.converters.string;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel.en"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringImageConverter.java",
    "chars": 858,
    "preview": "package com.alibaba.excel.converters.string;\n\nimport java.io.File;\nimport java.io.IOException;\n\nimport com.alibaba.excel"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java",
    "chars": 2600,
    "preview": "package com.alibaba.excel.converters.string;\n\nimport java.math.BigDecimal;\n\nimport com.alibaba.excel.converters.Converte"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringStringConverter.java",
    "chars": 1138,
    "preview": "package com.alibaba.excel.converters.string;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibaba.excel.en"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/converters/url/UrlImageConverter.java",
    "chars": 1451,
    "preview": "package com.alibaba.excel.converters.url;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.net.URL;\n"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/BooleanEnum.java",
    "chars": 547,
    "preview": "package com.alibaba.excel.enums;\n\nimport lombok.Getter;\n\n/**\n * Default values cannot be used for annotations.\n * So an "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java",
    "chars": 1507,
    "preview": "package com.alibaba.excel.enums;\n\nimport java.nio.charset.Charset;\nimport java.util.Map;\n\nimport com.alibaba.excel.util."
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/CacheLocationEnum.java",
    "chars": 448,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * cache locaciton\n *\n * @author Jiaju Zhuang\n **/\npublic enum CacheLocationEnum {"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java",
    "chars": 1502,
    "preview": "package com.alibaba.excel.enums;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport com.alibaba.excel.util.StringU"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/CellExtraTypeEnum.java",
    "chars": 256,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * Extra data type\n *\n * @author Jiaju Zhuang\n **/\npublic enum CellExtraTypeEnum {"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/HeadKindEnum.java",
    "chars": 242,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * The types of header\n *\n * @author Jiaju Zhuang\n **/\npublic enum HeadKindEnum {\n"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/HolderEnum.java",
    "chars": 282,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * The types of holder\n *\n * @author Jiaju Zhuang\n **/\npublic enum HolderEnum {\n  "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/NumericCellTypeEnum.java",
    "chars": 369,
    "preview": "package com.alibaba.excel.enums;\n\nimport org.apache.poi.ss.usermodel.CellType;\n\n/**\n * Used to supplement {@link CellTyp"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/ReadDefaultReturnEnum.java",
    "chars": 1043,
    "preview": "package com.alibaba.excel.enums;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\nimport java.util.HashMap;"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/RowTypeEnum.java",
    "chars": 197,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * The types of row\n *\n * @author Jiaju Zhuang\n **/\npublic enum RowTypeEnum {\n    "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteDirectionEnum.java",
    "chars": 240,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * Direction of writing\n *\n * @author Jiaju Zhuang\n **/\npublic enum WriteDirection"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteLastRowTypeEnum.java",
    "chars": 420,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * The types of write last row\n *\n * @author Jiaju Zhuang\n **/\npublic enum WriteLa"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTemplateAnalysisCellTypeEnum.java",
    "chars": 274,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * Type of template to read when writing\n *\n * @author Jiaju Zhuang\n **/\npublic en"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTypeEnum.java",
    "chars": 209,
    "preview": "package com.alibaba.excel.enums;\n\n/**\n * Enumeration of write methods\n *\n * @author Jiaju Zhuang\n **/\npublic enum WriteT"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/BorderStyleEnum.java",
    "chars": 1741,
    "preview": "package com.alibaba.excel.enums.poi;\n\nimport lombok.Getter;\nimport org.apache.poi.ss.usermodel.BorderStyle;\n\n/**\n * The "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/FillPatternTypeEnum.java",
    "chars": 2205,
    "preview": "package com.alibaba.excel.enums.poi;\n\nimport lombok.Getter;\nimport org.apache.poi.ss.usermodel.FillPatternType;\n\n/**\n * "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/HorizontalAlignmentEnum.java",
    "chars": 3807,
    "preview": "package com.alibaba.excel.enums.poi;\n\nimport lombok.Getter;\nimport org.apache.poi.ss.usermodel.HorizontalAlignment;\n\n/**"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/VerticalAlignmentEnum.java",
    "chars": 2589,
    "preview": "package com.alibaba.excel.enums.poi;\n\nimport lombok.Getter;\nimport org.apache.poi.ss.usermodel.VerticalAlignment;\n\n/**\n "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java",
    "chars": 1088,
    "preview": "package com.alibaba.excel.event;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport com.alibaba.excel.metadata.Ce"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/AnalysisEventListener.java",
    "chars": 865,
    "preview": "package com.alibaba.excel.event;\n\nimport java.util.Map;\n\nimport com.alibaba.excel.context.AnalysisContext;\nimport com.al"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/Handler.java",
    "chars": 360,
    "preview": "package com.alibaba.excel.event;\n\nimport com.alibaba.excel.constant.OrderConstant;\n\n/**\n * Intercepts handle some busine"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/Listener.java",
    "chars": 144,
    "preview": "package com.alibaba.excel.event;\n\n/**\n * Interface to listen for processing results\n *\n * @author Jiaju Zhuang\n */\npubli"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/NotRepeatExecutor.java",
    "chars": 366,
    "preview": "package com.alibaba.excel.event;\n\n/**\n * There are multiple interceptors that execute only one of them when fired once.I"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/Order.java",
    "chars": 236,
    "preview": "package com.alibaba.excel.event;\n\n/**\n * Implement this interface when sorting\n *\n * @author Jiaju Zhuang\n */\npublic int"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/event/SyncReadListener.java",
    "chars": 661,
    "preview": "package com.alibaba.excel.event;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.alibaba.excel.context.A"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java",
    "chars": 452,
    "preview": "package com.alibaba.excel.exception;\n\n/**\n *\n * @author jipengfei\n */\npublic class ExcelAnalysisException extends ExcelR"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopException.java",
    "chars": 714,
    "preview": "package com.alibaba.excel.exception;\n\n/**\n * Throw the exception when you need to stop\n * This exception will stop the e"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopSheetException.java",
    "chars": 916,
    "preview": "package com.alibaba.excel.exception;\n\n/**\n * Throw the exception when you need to stop\n * This exception will only stop "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java",
    "chars": 445,
    "preview": "package com.alibaba.excel.exception;\n\n/**\n *\n * @author Jiaju Zhuang\n */\npublic class ExcelCommonException extends Excel"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java",
    "chars": 1624,
    "preview": "package com.alibaba.excel.exception;\n\nimport com.alibaba.excel.metadata.data.CellData;\nimport com.alibaba.excel.metadata"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java",
    "chars": 409,
    "preview": "package com.alibaba.excel.exception;\n\n/**\n * @author jipengfei\n */\npublic class ExcelGenerateException extends ExcelRunt"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelRuntimeException.java",
    "chars": 461,
    "preview": "package com.alibaba.excel.exception;\n\n/**\n * Excel  Exception\n * @author Jiaju Zhuang\n */\npublic class ExcelRuntimeExcep"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelWriteDataConvertException.java",
    "chars": 1288,
    "preview": "package com.alibaba.excel.exception;\n\nimport com.alibaba.excel.write.handler.context.CellWriteHandlerContext;\n\nimport lo"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractCell.java",
    "chars": 372,
    "preview": "package com.alibaba.excel.metadata;\n\nimport lombok.EqualsAndHashCode;\nimport lombok.Getter;\nimport lombok.Setter;\n\n/**\n "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java",
    "chars": 3571,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport com.alibaba.excel.converters.C"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java",
    "chars": 2671,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.util.List;\nimport java.util.Locale;\n\nimport com.alibaba.excel.converter"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java",
    "chars": 1589,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.util.List;\nimport java.util.Locale;\n\nimport com.alibaba.excel.converter"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/Cell.java",
    "chars": 278,
    "preview": "package com.alibaba.excel.metadata;\n\n/**\n * Cell\n *\n * @author Jiaju Zhuang\n **/\npublic interface Cell {\n    /**\n     * "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellExtra.java",
    "chars": 3287,
    "preview": "package com.alibaba.excel.metadata;\n\nimport org.apache.poi.ss.util.CellReference;\n\nimport com.alibaba.excel.constant.Exc"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellRange.java",
    "chars": 525,
    "preview": "package com.alibaba.excel.metadata;\n\nimport lombok.EqualsAndHashCode;\nimport lombok.Getter;\nimport lombok.Setter;\n\n/**\n "
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/ConfigurationHolder.java",
    "chars": 751,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.util.Map;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.al"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldCache.java",
    "chars": 647,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.lang.reflect.Field;\nimport java.util.Map;\nimport java.util.Set;\n\nimport"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldWrapper.java",
    "chars": 721,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.lang.reflect.Field;\nimport java.util.Map;\nimport java.util.Set;\n\nimport"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/Font.java",
    "chars": 827,
    "preview": "package com.alibaba.excel.metadata;\n\n/**\n *\n * @author jipengfei\n * @deprecated please use {@link com.alibaba.excel.writ"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java",
    "chars": 1399,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.util.Locale;\n\nimport com.alibaba.excel.enums.CacheLocationEnum;\n\nimport"
  },
  {
    "path": "easyexcel-core/src/main/java/com/alibaba/excel/metadata/Head.java",
    "chars": 2239,
    "preview": "package com.alibaba.excel.metadata;\n\nimport java.lang.reflect.Field;\nimport java.util.ArrayList;\nimport java.util.List;\n"
  }
]

// ... and 422 more files (download for full content)

About this extraction

This page contains the full source code of the alibaba/easyexcel GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 622 files (75.3 MB), approximately 389.9k tokens, and a symbol index with 2798 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!