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
======================
[](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml?query=branch%3Amaster)
[](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel)
[](http://www.apache.org/licenses/LICENSE-2.0.html)
[](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多一点

# 最新版本
```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
======================
[](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml?query=branch%3Amaster)
[](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel)
[](http://www.apache.org/licenses/LICENSE-2.0.html)
[](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

## 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 > order > default sort
*
* @return Index of column
*/
int index() default -1;
/**
* Defines the sort order for an column.
*
* priority: index > order > 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,
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
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[
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.