├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ └── enhancement.yml └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .mvn └── wrapper │ └── maven-wrapper.properties ├── CHANGELOG.md ├── CODEOWNERS ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── README_EN.md ├── README_JP.md ├── doc └── font │ └── SimHei.ttf ├── docs ├── API.md └── LARGEREAD.md ├── fastexcel-core ├── pom.xml └── src │ └── main │ └── java │ └── cn │ └── idev │ └── excel │ ├── EasyExcel.java │ ├── ExcelReader.java │ ├── ExcelWriter.java │ ├── FastExcel.java │ ├── FastExcelFactory.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 │ ├── EscapeHexCellWriteHandler.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 ├── fastexcel-support ├── README.md ├── README_EN.md ├── pom.xml └── src │ └── main │ └── java │ └── cn │ └── idev │ └── excel │ └── support │ └── Empty.java ├── fastexcel-test ├── README.md ├── pom.xml └── src │ └── test │ ├── java │ └── cn │ │ └── idev │ │ └── excel │ │ └── 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 │ │ │ ├── CustomConverterTest.java │ │ │ ├── CustomConverterWriteData.java │ │ │ ├── ImageData.java │ │ │ ├── ReadAllConverterData.java │ │ │ ├── ReadAllConverterDataListener.java │ │ │ ├── TimestampNumberConverter.java │ │ │ └── TimestampStringConverter.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 │ │ │ ├── MaxHeadReadListener.java │ │ │ ├── MaxHeadSizeData.java │ │ │ ├── MaxHeadSizeTest.java │ │ │ ├── NoHeadData.java │ │ │ ├── NoHeadDataListener.java │ │ │ └── NoHeadDataTest.java │ │ ├── hiddensheets │ │ │ ├── HiddenSheetsData.java │ │ │ ├── HiddenSheetsListener.java │ │ │ └── HiddenSheetsTest.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 │ │ │ ├── DemoChainAccessorsData.java │ │ │ ├── DemoCompatibleHeaderData.java │ │ │ ├── DemoCompatibleHeaderDataListener.java │ │ │ ├── DemoDAO.java │ │ │ ├── DemoData.java │ │ │ ├── DemoDataAnother.java │ │ │ ├── DemoDataListener.java │ │ │ ├── DemoExceptionListener.java │ │ │ ├── DemoExtraData.java │ │ │ ├── DemoExtraListener.java │ │ │ ├── DemoHeadDataListener.java │ │ │ ├── ExceptionDemoData.java │ │ │ ├── GenericHeaderTypeDataListener.java │ │ │ ├── IndexOrNameData.java │ │ │ ├── IndexOrNameDataListener.java │ │ │ ├── NoModelDataListener.java │ │ │ ├── ReadTest.java │ │ │ └── Sample.java │ │ ├── web │ │ │ ├── DownloadData.java │ │ │ ├── EasyexcelApplication.java │ │ │ ├── UploadDAO.java │ │ │ ├── UploadData.java │ │ │ ├── UploadDataListener.java │ │ │ └── WebTest.java │ │ └── write │ │ │ ├── ColorDemoData.java │ │ │ ├── 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 │ │ │ └── WriteWithColorTest.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 │ │ │ ├── CsvDataListener.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 │ │ ├── issue2319 │ │ │ ├── Issue2319.java │ │ │ └── Issue2319Test.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 │ │ │ └── WebStreamReadTest.java │ │ ├── simple │ │ │ ├── DemoData1.java │ │ │ ├── DemoData2.java │ │ │ ├── HgListener.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 │ ├── cache │ ├── headt1.xls │ └── t2.xlsx │ ├── comment │ ├── comment.xls │ └── comment.xlsx │ ├── compatibility │ ├── t01.xls │ ├── t02.xlsx │ ├── t03.xlsx │ ├── t04.xlsx │ ├── t05.xlsx │ ├── t06.xlsx │ ├── t07.xlsx │ └── t09.xlsx │ ├── converter │ ├── converter03.xls │ ├── converter07.xlsx │ ├── converterCsv.csv │ └── img.jpg │ ├── dataformat │ ├── dataformat.xls │ ├── dataformat.xlsx │ └── dataformatv2.xlsx │ ├── demo │ ├── cellDataDemo.xlsx │ ├── demo.csv │ ├── demo.xlsx │ ├── extra.xlsx │ ├── fill │ │ ├── complex.xlsx │ │ ├── complexFillWithTable.xlsx │ │ ├── composite.xlsx │ │ ├── dateFormat.xlsx │ │ ├── horizontal.xlsx │ │ ├── list.xlsx │ │ └── simple.xlsx │ ├── generic-demo.xlsx │ └── pwd_123.xls │ ├── 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 │ ├── hiddensheets │ ├── hiddensheets.xls │ └── hiddensheets.xlsx │ ├── large │ ├── fill.xlsx │ └── large07.xlsx │ ├── logback.xml │ ├── multiplesheets │ ├── multiplesheets.xls │ └── multiplesheets.xlsx │ ├── poi │ ├── last_row_number_test.xlsx │ ├── last_row_number_xssf_date_test.csv │ ├── last_row_number_xssf_date_test.xls │ ├── last_row_number_xssf_date_test.xlsx │ └── last_row_number_xssf_test.xlsx │ ├── repeat │ ├── repeat.xls │ └── repeat.xlsx │ ├── simple │ └── simple07.xlsx │ ├── style │ ├── styleTest.xls │ └── styleTest.xlsx │ ├── temp │ ├── issue1663 │ │ └── template.xlsx │ ├── issue220 │ │ ├── test01.xlsx │ │ ├── test02.xlsx │ │ └── test03.xlsx │ ├── issue2319 │ │ ├── test1.xlsx │ │ └── test2.xlsx │ ├── issue2443 │ │ ├── date1.xlsx │ │ └── date2.xlsx │ ├── lock_data.xlsx │ └── number_format.xlsx │ ├── template │ ├── template03.xls │ └── template07.xlsx │ └── web │ └── io.xlsx ├── fastexcel ├── pom.xml └── src │ └── main │ └── java │ └── cn │ └── idev │ └── excel │ └── easyexcelplus │ └── Empty.java ├── img ├── readme │ └── large.png └── style │ ├── eclipse │ └── step.jpg │ └── idea │ ├── step1.png │ ├── step2.png │ └── step3.png ├── lombok.config ├── mvnw ├── mvnw.cmd ├── pom.xml └── style ├── STYLE.md ├── checkstyle └── fastexcel_checkstyle.xml └── codestyle ├── eclipse └── fastexcel_codestyle.xml └── idea └── fastexcel_codestyle.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.{groovy,java,kt,xml}] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Ask a question or get support 4 | url: https://github.com/fast-excel/fastexcel/discussions 5 | about: Ask a question or request support for using Fastexcel 6 | - name: 用户问题或提出建议 7 | url: https://github.com/fast-excel/fastexcel/discussions 8 | about: 反馈使用 Fastexcel 时遇到的问题,或对 Fastexcel 的建议 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | */.settings/ 3 | *.idea 4 | .DS_Store 5 | **/.iml* 6 | *.iml 7 | **/.class 8 | **/.classpath 9 | **/.project 10 | */target/ 11 | target/ 12 | *.ipr 13 | *.iws 14 | antx.properties 15 | output/ 16 | .flattened-pom.xml 17 | dependency-reduced-pom.xml 18 | 19 | /.mvn/wrapper/maven-wrapper.jar 20 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip 18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar 19 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | /fastexcel-core/ @jipengfei-jpf @psxjoy 2 | /fastexcel-test/ @jipengfei-jpf @psxjoy 3 | -------------------------------------------------------------------------------- /doc/font/SimHei.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/doc/font/SimHei.ttf -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/EasyExcel.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel; 2 | 3 | /** 4 | * This is actually {@link FastExcelFactory}, and short names look better. 5 | * 6 | * @author jipengfei 7 | */ 8 | public class EasyExcel extends FastExcelFactory {} 9 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/FastExcel.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel; 2 | 3 | /** 4 | * This is actually {@link FastExcelFactory}, and short names look better. 5 | * 6 | * @author jipengfei 7 | */ 8 | public class FastExcel extends FastExcelFactory { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/ExcelAnalyser.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis; 2 | 3 | import java.util.List; 4 | 5 | import cn.idev.excel.read.metadata.ReadSheet; 6 | import cn.idev.excel.context.AnalysisContext; 7 | 8 | /** 9 | * Excel file analyser 10 | * 11 | * @author jipengfei 12 | */ 13 | public interface ExcelAnalyser { 14 | /** 15 | * parse the sheet 16 | * 17 | * @param readSheetList 18 | * Which sheets you need to read. 19 | * @param readAll 20 | * The readSheetList parameter is ignored, and all sheets are read. 21 | */ 22 | void analysis(List readSheetList, Boolean readAll); 23 | 24 | /** 25 | * Complete the entire read file.Release the cache and close stream 26 | */ 27 | void finish(); 28 | 29 | /** 30 | * Acquisition excel executor 31 | * 32 | * @return Excel file Executor 33 | */ 34 | ExcelReadExecutor excelExecutor(); 35 | 36 | /** 37 | * get the analysis context. 38 | * 39 | * @return analysis context 40 | */ 41 | AnalysisContext analysisContext(); 42 | 43 | } 44 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/ExcelReadExecutor.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis; 2 | 3 | import java.util.List; 4 | 5 | import cn.idev.excel.read.metadata.ReadSheet; 6 | 7 | /** 8 | * Excel file Executor 9 | * 10 | * @author Jiaju Zhuang 11 | */ 12 | public interface ExcelReadExecutor { 13 | 14 | /** 15 | * Returns the actual sheet in excel 16 | * 17 | * @return Actual sheet in excel 18 | */ 19 | List sheetList(); 20 | 21 | /** 22 | * Read the sheet. 23 | */ 24 | void execute(); 25 | } 26 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/IgnorableXlsRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03; 2 | 3 | /** 4 | * Need to ignore the current handler without reading the current sheet. 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public interface IgnorableXlsRecordHandler extends XlsRecordHandler {} 9 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/XlsRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03; 2 | 3 | import org.apache.poi.hssf.record.Record; 4 | 5 | import cn.idev.excel.context.xls.XlsReadContext; 6 | 7 | /** 8 | * Intercepts handle xls reads. 9 | * 10 | * @author Dan Zheng 11 | */ 12 | public interface XlsRecordHandler { 13 | /** 14 | * Whether to support 15 | * 16 | * @param xlsReadContext 17 | * @param record 18 | * @return 19 | */ 20 | boolean support(XlsReadContext xlsReadContext, Record record); 21 | 22 | /** 23 | * Processing record 24 | * 25 | * @param xlsReadContext 26 | * @param record 27 | */ 28 | void processRecord(XlsReadContext xlsReadContext, Record record); 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.XlsRecordHandler; 4 | import cn.idev.excel.context.xls.XlsReadContext; 5 | import org.apache.poi.hssf.record.Record; 6 | 7 | /** 8 | * Abstract xls record handler 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { 13 | 14 | @Override 15 | public boolean support(XlsReadContext xlsReadContext, Record record) { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/BlankRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.metadata.data.ReadCellData; 5 | import cn.idev.excel.context.xls.XlsReadContext; 6 | 7 | import org.apache.poi.hssf.record.BlankRecord; 8 | import org.apache.poi.hssf.record.Record; 9 | 10 | /** 11 | * Record handler 12 | * 13 | * @author Dan Zheng 14 | */ 15 | public class BlankRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 16 | 17 | @Override 18 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 19 | BlankRecord br = (BlankRecord)record; 20 | xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)br.getColumn(), 21 | ReadCellData.newEmptyInstance(br.getRow(), (int)br.getColumn())); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/BoolErrRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.enums.RowTypeEnum; 5 | import cn.idev.excel.metadata.data.ReadCellData; 6 | import cn.idev.excel.context.xls.XlsReadContext; 7 | 8 | import org.apache.poi.hssf.record.BoolErrRecord; 9 | import org.apache.poi.hssf.record.Record; 10 | 11 | /** 12 | * Record handler 13 | * 14 | * @author Dan Zheng 15 | */ 16 | public class BoolErrRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 17 | 18 | @Override 19 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 20 | BoolErrRecord ber = (BoolErrRecord)record; 21 | xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)ber.getColumn(), 22 | ReadCellData.newInstance(ber.getBooleanValue(), ber.getRow(), (int)ber.getColumn())); 23 | xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/BoundSheetRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.context.xls.XlsReadContext; 5 | import org.apache.poi.hssf.record.BoundSheetRecord; 6 | import org.apache.poi.hssf.record.Record; 7 | 8 | /** 9 | * Record handler 10 | * 11 | * @author Dan Zheng 12 | */ 13 | public class BoundSheetRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 14 | 15 | @Override 16 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 17 | BoundSheetRecord bsr = (BoundSheetRecord)record; 18 | xlsReadContext.xlsReadWorkbookHolder().getBoundSheetRecordList().add(bsr); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/IndexRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.context.xls.XlsReadContext; 5 | import org.apache.poi.hssf.record.IndexRecord; 6 | import org.apache.poi.hssf.record.Record; 7 | 8 | /** 9 | * Record handler 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public class IndexRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 14 | @Override 15 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 16 | if (xlsReadContext.readSheetHolder() == null) { 17 | return; 18 | } 19 | xlsReadContext.readSheetHolder().setApproximateTotalRowNumber(((IndexRecord)record).getLastRowAdd1()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/LabelRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.enums.RowTypeEnum; 5 | import cn.idev.excel.metadata.data.ReadCellData; 6 | import cn.idev.excel.context.xls.XlsReadContext; 7 | 8 | import org.apache.poi.hssf.record.LabelRecord; 9 | import org.apache.poi.hssf.record.Record; 10 | 11 | /** 12 | * Record handler 13 | * 14 | * @author Dan Zheng 15 | */ 16 | public class LabelRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 17 | @Override 18 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 19 | LabelRecord lrec = (LabelRecord)record; 20 | String data = lrec.getValue(); 21 | if (data != null && xlsReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) { 22 | data = data.trim(); 23 | } 24 | xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)lrec.getColumn(), 25 | ReadCellData.newInstance(data, lrec.getRow(), (int)lrec.getColumn())); 26 | xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/ObjRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.context.xls.XlsReadContext; 5 | import org.apache.poi.hssf.record.CommonObjectDataSubRecord; 6 | import org.apache.poi.hssf.record.ObjRecord; 7 | import org.apache.poi.hssf.record.Record; 8 | import org.apache.poi.hssf.record.SubRecord; 9 | 10 | /** 11 | * Record handler 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | public class ObjRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 16 | @Override 17 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 18 | ObjRecord or = (ObjRecord)record; 19 | for (SubRecord subRecord : or.getSubRecords()) { 20 | if (subRecord instanceof CommonObjectDataSubRecord) { 21 | CommonObjectDataSubRecord codsr = (CommonObjectDataSubRecord)subRecord; 22 | if (CommonObjectDataSubRecord.OBJECT_TYPE_COMMENT == codsr.getObjectType()) { 23 | xlsReadContext.xlsReadSheetHolder().setTempObjectIndex(codsr.getObjectId()); 24 | } 25 | break; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/RkRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.metadata.data.ReadCellData; 5 | import cn.idev.excel.context.xls.XlsReadContext; 6 | 7 | import org.apache.poi.hssf.record.RKRecord; 8 | import org.apache.poi.hssf.record.Record; 9 | 10 | /** 11 | * Record handler 12 | * 13 | * @author Dan Zheng 14 | */ 15 | public class RkRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 16 | 17 | @Override 18 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 19 | RKRecord re = (RKRecord)record; 20 | xlsReadContext.xlsReadSheetHolder().getCellMap().put((int)re.getColumn(), 21 | ReadCellData.newEmptyInstance(re.getRow(), (int)re.getColumn())); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v03/handlers/SstRecordHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v03.handlers; 2 | 3 | import cn.idev.excel.analysis.v03.IgnorableXlsRecordHandler; 4 | import cn.idev.excel.cache.XlsCache; 5 | import cn.idev.excel.context.xls.XlsReadContext; 6 | import org.apache.poi.hssf.record.Record; 7 | import org.apache.poi.hssf.record.SSTRecord; 8 | 9 | /** 10 | * Record handler 11 | * 12 | * @author Dan Zheng 13 | */ 14 | public class SstRecordHandler extends AbstractXlsRecordHandler implements IgnorableXlsRecordHandler { 15 | @Override 16 | public void processRecord(XlsReadContext xlsReadContext, Record record) { 17 | xlsReadContext.readWorkbookHolder().setReadCache(new XlsCache((SSTRecord)record)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v07.handlers; 2 | 3 | import cn.idev.excel.context.xlsx.XlsxReadContext; 4 | 5 | /** 6 | * Cell Value Handler 7 | * 8 | * @author jipengfei 9 | */ 10 | public abstract class AbstractCellValueTagHandler extends AbstractXlsxTagHandler { 11 | 12 | @Override 13 | public void characters(XlsxReadContext xlsxReadContext, char[] ch, int start, int length) { 14 | xlsxReadContext.xlsxReadSheetHolder().getTempData().append(ch, start, length); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v07.handlers; 2 | 3 | import cn.idev.excel.context.xlsx.XlsxReadContext; 4 | import org.xml.sax.Attributes; 5 | 6 | /** 7 | * Abstract tag handler 8 | * 9 | * @author Jiaju Zhuang 10 | */ 11 | public abstract class AbstractXlsxTagHandler implements XlsxTagHandler { 12 | @Override 13 | public boolean support(XlsxReadContext xlsxReadContext) { 14 | return true; 15 | } 16 | 17 | @Override 18 | public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) { 19 | 20 | } 21 | 22 | @Override 23 | public void endElement(XlsxReadContext xlsxReadContext, String name) { 24 | 25 | } 26 | 27 | @Override 28 | public void characters(XlsxReadContext xlsxReadContext, char[] ch, int start, int length) { 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v07.handlers; 2 | 3 | /** 4 | * Cell inline string value handler 5 | * 6 | * @author jipengfei 7 | */ 8 | public class CellInlineStringValueTagHandler extends AbstractCellValueTagHandler { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v07/handlers/CellValueTagHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v07.handlers; 2 | 3 | /** 4 | * Cell Value Handler 5 | * 6 | * @author jipengfei 7 | */ 8 | public class CellValueTagHandler extends AbstractCellValueTagHandler { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/analysis/v07/handlers/CountTagHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.analysis.v07.handlers; 2 | 3 | import cn.idev.excel.constant.ExcelXmlConstants; 4 | import cn.idev.excel.util.PositionUtils; 5 | import cn.idev.excel.context.xlsx.XlsxReadContext; 6 | 7 | import org.xml.sax.Attributes; 8 | 9 | /** 10 | * Cell Handler 11 | * 12 | * @author jipengfei 13 | */ 14 | public class CountTagHandler extends AbstractXlsxTagHandler { 15 | 16 | @Override 17 | public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) { 18 | String d = attributes.getValue(ExcelXmlConstants.ATTRIBUTE_REF); 19 | String totalStr = d.substring(d.indexOf(":") + 1); 20 | xlsxReadContext.readSheetHolder().setApproximateTotalRowNumber(PositionUtils.getRow(totalStr) + 1); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/ExcelIgnore.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Ignore convert excel 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target(ElementType.FIELD) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface ExcelIgnore {} 18 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/ExcelIgnoreUnannotated.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Ignore all unannotated fields. 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target(ElementType.TYPE) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface ExcelIgnoreUnannotated { 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/format/DateTimeFormat.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.format; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | import cn.idev.excel.enums.BooleanEnum; 10 | 11 | /** 12 | * Convert date format. 13 | * 14 | *

15 | * write: It can be used on classes {@link java.util.Date} 16 | *

17 | * read: It can be used on classes {@link String} 18 | * 19 | * @author Jiaju Zhuang 20 | */ 21 | @Target(ElementType.FIELD) 22 | @Retention(RetentionPolicy.RUNTIME) 23 | @Inherited 24 | public @interface DateTimeFormat { 25 | 26 | /** 27 | * 28 | * Specific format reference {@link java.text.SimpleDateFormat} 29 | * 30 | * @return Format pattern 31 | */ 32 | String value() default ""; 33 | 34 | /** 35 | * True if date uses 1904 windowing, or false if using 1900 date windowing. 36 | * 37 | * @return True if date uses 1904 windowing, or false if using 1900 date windowing. 38 | */ 39 | BooleanEnum use1904windowing() default BooleanEnum.DEFAULT; 40 | } 41 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/format/NumberFormat.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.format; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | import java.math.RoundingMode; 9 | 10 | /** 11 | * Convert number format. 12 | * 13 | *

14 | * write: It can be used on classes that inherit {@link Number} 15 | *

16 | * read: It can be used on classes {@link String} 17 | * 18 | * @author Jiaju Zhuang 19 | */ 20 | @Target(ElementType.FIELD) 21 | @Retention(RetentionPolicy.RUNTIME) 22 | @Inherited 23 | public @interface NumberFormat { 24 | 25 | /** 26 | * 27 | * Specific format reference {@link java.text.DecimalFormat} 28 | * 29 | * @return Format pattern 30 | */ 31 | String value() default ""; 32 | 33 | /** 34 | * Rounded by default 35 | * 36 | * @return RoundingMode 37 | */ 38 | RoundingMode roundingMode() default RoundingMode.HALF_UP; 39 | } 40 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/write/style/ColumnWidth.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.write.style; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Set the width of the table 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target({ElementType.FIELD, ElementType.TYPE}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface ColumnWidth { 18 | 19 | /** 20 | * Column width 21 | *

22 | * -1 means the default column width is used 23 | * 24 | * @return Column width 25 | */ 26 | int value() default -1; 27 | } 28 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/write/style/ContentLoopMerge.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.write.style; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * The regions of the loop merge 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target({ElementType.FIELD}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface ContentLoopMerge { 18 | /** 19 | * Each row 20 | * 21 | * @return 22 | */ 23 | int eachRow() default 1; 24 | 25 | /** 26 | * Extend column 27 | * 28 | * @return 29 | */ 30 | int columnExtend() default 1; 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/write/style/ContentRowHeight.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.write.style; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Set the height of each table 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target({ElementType.TYPE}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface ContentRowHeight { 18 | 19 | /** 20 | * Set the content height 21 | *

22 | * -1 mean the auto set height 23 | * 24 | * @return Content height 25 | */ 26 | short value() default -1; 27 | } 28 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/write/style/HeadRowHeight.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.write.style; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Set the height of each table 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target({ElementType.TYPE}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface HeadRowHeight { 18 | /** 19 | * Set the header height 20 | *

21 | * -1 mean the auto set height 22 | * 23 | * @return Header height 24 | */ 25 | short value() default -1; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/annotation/write/style/OnceAbsoluteMerge.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.annotation.write.style; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Inherited; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * Merge the cells once 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Target({ElementType.TYPE}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface OnceAbsoluteMerge { 18 | /** 19 | * First row 20 | * 21 | * @return 22 | */ 23 | int firstRowIndex() default -1; 24 | 25 | /** 26 | * Last row 27 | * 28 | * @return 29 | */ 30 | int lastRowIndex() default -1; 31 | 32 | /** 33 | * First column 34 | * 35 | * @return 36 | */ 37 | int firstColumnIndex() default -1; 38 | 39 | /** 40 | * Last row 41 | * 42 | * @return 43 | */ 44 | int lastColumnIndex() default -1; 45 | } 46 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/cache/MapCache.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.cache; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.context.AnalysisContext; 7 | 8 | /** 9 | * Putting temporary data directly into a map is a little more efficient but very memory intensive 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public class MapCache implements ReadCache { 14 | private final List cache = new ArrayList<>(); 15 | 16 | @Override 17 | public void init(AnalysisContext analysisContext) {} 18 | 19 | @Override 20 | public void put(String value) { 21 | cache.add(value); 22 | } 23 | 24 | @Override 25 | public String get(Integer key) { 26 | if (key == null || key < 0) { 27 | return null; 28 | } 29 | return cache.get(key); 30 | } 31 | 32 | @Override 33 | public void putFinished() {} 34 | 35 | @Override 36 | public void destroy() {} 37 | 38 | } 39 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/cache/ReadCache.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.cache; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | 5 | /** 6 | * Read cache 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public interface ReadCache { 11 | 12 | /** 13 | * Initialize cache 14 | * 15 | * @param analysisContext 16 | * A context is the main anchorage point of a excel reader. 17 | */ 18 | void init(AnalysisContext analysisContext); 19 | 20 | /** 21 | * Automatically generate the key and put it in the cache.Key start from 0 22 | * 23 | * @param value 24 | * Cache value 25 | */ 26 | void put(String value); 27 | 28 | /** 29 | * Get value 30 | * 31 | * @param key 32 | * Index 33 | * @return Value 34 | */ 35 | String get(Integer key); 36 | 37 | /** 38 | * It's called when all the values are put in 39 | */ 40 | void putFinished(); 41 | 42 | /** 43 | * Called when the excel read is complete 44 | */ 45 | void destroy(); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/cache/XlsCache.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.cache; 2 | 3 | import org.apache.poi.hssf.record.SSTRecord; 4 | 5 | import cn.idev.excel.context.AnalysisContext; 6 | 7 | /** 8 | * 9 | * Use SSTRecord. 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public class XlsCache implements ReadCache { 14 | private final SSTRecord sstRecord; 15 | 16 | public XlsCache(SSTRecord sstRecord) { 17 | this.sstRecord = sstRecord; 18 | } 19 | 20 | @Override 21 | public void init(AnalysisContext analysisContext) {} 22 | 23 | @Override 24 | public void put(String value) {} 25 | 26 | @Override 27 | public String get(Integer key) { 28 | return sstRecord.getString(key).toString(); 29 | } 30 | 31 | @Override 32 | public void putFinished() {} 33 | 34 | @Override 35 | public void destroy() {} 36 | 37 | } 38 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/cache/selector/EternalReadCacheSelector.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.cache.selector; 2 | 3 | import cn.idev.excel.cache.ReadCache; 4 | import org.apache.poi.openxml4j.opc.PackagePart; 5 | 6 | /** 7 | * Choose a eternal cache 8 | * 9 | * @author Jiaju Zhuang 10 | **/ 11 | public class EternalReadCacheSelector implements ReadCacheSelector { 12 | private ReadCache readCache; 13 | 14 | public EternalReadCacheSelector(ReadCache readCache) { 15 | this.readCache = readCache; 16 | } 17 | 18 | @Override 19 | public ReadCache readCache(PackagePart sharedStringsTablePackagePart) { 20 | return readCache; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/cache/selector/ReadCacheSelector.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.cache.selector; 2 | 3 | import cn.idev.excel.cache.ReadCache; 4 | import org.apache.poi.openxml4j.opc.PackagePart; 5 | 6 | /** 7 | * Select the cache 8 | * 9 | * @author Jiaju Zhuang 10 | **/ 11 | public interface ReadCacheSelector { 12 | 13 | /** 14 | * Select a cache 15 | * 16 | * @param sharedStringsTablePackagePart 17 | * @return 18 | */ 19 | ReadCache readCache(PackagePart sharedStringsTablePackagePart); 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/constant/EasyExcelConstants.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.constant; 2 | 3 | import java.math.MathContext; 4 | import java.math.RoundingMode; 5 | 6 | /** 7 | * Used to store constant 8 | * 9 | * @author Jiaju Zhuang 10 | */ 11 | public class EasyExcelConstants { 12 | 13 | /** 14 | * Excel by default with 15 to store Numbers, and the double in Java can use to store number 17, led to the accuracy 15 | * will be a problem. So you need to set up 15 to deal with precision 16 | */ 17 | public static final MathContext EXCEL_MATH_CONTEXT = new MathContext(15, RoundingMode.HALF_UP); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/constant/OrderConstant.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.constant; 2 | 3 | /** 4 | * Order constant. 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public class OrderConstant { 9 | 10 | /** 11 | * The system's own style 12 | */ 13 | public static int DEFAULT_DEFINE_STYLE = -70000; 14 | 15 | /** 16 | * Annotation style definition 17 | */ 18 | public static int ANNOTATION_DEFINE_STYLE = -60000; 19 | 20 | /** 21 | * Define style. 22 | */ 23 | public static final int DEFINE_STYLE = -50000; 24 | 25 | /** 26 | * default order. 27 | */ 28 | public static int DEFAULT_ORDER = 0; 29 | 30 | /** 31 | * Sorting of styles written to cells. 32 | */ 33 | public static int FILL_STYLE = 50000; 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/context/csv/CsvReadContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.context.csv; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | import cn.idev.excel.read.metadata.holder.csv.CsvReadSheetHolder; 5 | import cn.idev.excel.read.metadata.holder.csv.CsvReadWorkbookHolder; 6 | 7 | /** 8 | * A context is the main anchorage point of a ls xls reader. 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | public interface CsvReadContext extends AnalysisContext { 13 | /** 14 | * All information about the workbook you are currently working on. 15 | * 16 | * @return Current workbook holder 17 | */ 18 | CsvReadWorkbookHolder csvReadWorkbookHolder(); 19 | 20 | /** 21 | * All information about the sheet you are currently working on. 22 | * 23 | * @return Current sheet holder 24 | */ 25 | CsvReadSheetHolder csvReadSheetHolder(); 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/context/csv/DefaultCsvReadContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.context.csv; 2 | 3 | import cn.idev.excel.context.AnalysisContextImpl; 4 | import cn.idev.excel.read.metadata.ReadWorkbook; 5 | import cn.idev.excel.read.metadata.holder.csv.CsvReadSheetHolder; 6 | import cn.idev.excel.read.metadata.holder.csv.CsvReadWorkbookHolder; 7 | import cn.idev.excel.support.ExcelTypeEnum; 8 | 9 | /** 10 | * A context is the main anchorage point of a ls xls reader. 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | public class DefaultCsvReadContext extends AnalysisContextImpl implements CsvReadContext { 15 | 16 | public DefaultCsvReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum actualExcelType) { 17 | super(readWorkbook, actualExcelType); 18 | } 19 | 20 | @Override 21 | public CsvReadWorkbookHolder csvReadWorkbookHolder() { 22 | return (CsvReadWorkbookHolder)readWorkbookHolder(); 23 | } 24 | 25 | @Override 26 | public CsvReadSheetHolder csvReadSheetHolder() { 27 | return (CsvReadSheetHolder)readSheetHolder(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/context/xls/DefaultXlsReadContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.context.xls; 2 | 3 | import cn.idev.excel.context.AnalysisContextImpl; 4 | import cn.idev.excel.read.metadata.ReadWorkbook; 5 | import cn.idev.excel.read.metadata.holder.xls.XlsReadSheetHolder; 6 | import cn.idev.excel.read.metadata.holder.xls.XlsReadWorkbookHolder; 7 | import cn.idev.excel.support.ExcelTypeEnum; 8 | 9 | /** 10 | * 11 | * A context is the main anchorage point of a ls xls reader. 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | public class DefaultXlsReadContext extends AnalysisContextImpl implements XlsReadContext { 16 | 17 | public DefaultXlsReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum actualExcelType) { 18 | super(readWorkbook, actualExcelType); 19 | } 20 | 21 | @Override 22 | public XlsReadWorkbookHolder xlsReadWorkbookHolder() { 23 | return (XlsReadWorkbookHolder)readWorkbookHolder(); 24 | } 25 | 26 | @Override 27 | public XlsReadSheetHolder xlsReadSheetHolder() { 28 | return (XlsReadSheetHolder)readSheetHolder(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/context/xls/XlsReadContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.context.xls; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | import cn.idev.excel.read.metadata.holder.xls.XlsReadSheetHolder; 5 | import cn.idev.excel.read.metadata.holder.xls.XlsReadWorkbookHolder; 6 | 7 | /** 8 | * A context is the main anchorage point of a ls xls reader. 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | public interface XlsReadContext extends AnalysisContext { 13 | /** 14 | * All information about the workbook you are currently working on. 15 | * 16 | * @return Current workbook holder 17 | */ 18 | XlsReadWorkbookHolder xlsReadWorkbookHolder(); 19 | 20 | /** 21 | * All information about the sheet you are currently working on. 22 | * 23 | * @return Current sheet holder 24 | */ 25 | XlsReadSheetHolder xlsReadSheetHolder(); 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/context/xlsx/DefaultXlsxReadContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.context.xlsx; 2 | 3 | import cn.idev.excel.context.AnalysisContextImpl; 4 | import cn.idev.excel.read.metadata.ReadWorkbook; 5 | import cn.idev.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder; 6 | import cn.idev.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder; 7 | import cn.idev.excel.support.ExcelTypeEnum; 8 | 9 | /** 10 | * 11 | * A context is the main anchorage point of a ls xls reader. 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | public class DefaultXlsxReadContext extends AnalysisContextImpl implements XlsxReadContext { 16 | 17 | public DefaultXlsxReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum actualExcelType) { 18 | super(readWorkbook, actualExcelType); 19 | } 20 | 21 | @Override 22 | public XlsxReadWorkbookHolder xlsxReadWorkbookHolder() { 23 | return (XlsxReadWorkbookHolder)readWorkbookHolder(); 24 | } 25 | 26 | @Override 27 | public XlsxReadSheetHolder xlsxReadSheetHolder() { 28 | return (XlsxReadSheetHolder)readSheetHolder(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/context/xlsx/XlsxReadContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.context.xlsx; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | import cn.idev.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder; 5 | import cn.idev.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder; 6 | 7 | /** 8 | * A context is the main anchorage point of a ls xlsx reader. 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | public interface XlsxReadContext extends AnalysisContext { 13 | /** 14 | * All information about the workbook you are currently working on. 15 | * 16 | * @return Current workbook holder 17 | */ 18 | XlsxReadWorkbookHolder xlsxReadWorkbookHolder(); 19 | 20 | /** 21 | * All information about the sheet you are currently working on. 22 | * 23 | * @return Current sheet holder 24 | */ 25 | XlsxReadSheetHolder xlsxReadSheetHolder(); 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/AutoConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters; 2 | 3 | /** 4 | * An empty converter.It's automatically converted by type. 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public class AutoConverter implements Converter { 9 | } 10 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/NullableObjectConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters; 2 | 3 | /** 4 | * When implementing convertToExcelData method, pay attention to the reference value may be 5 | * null 6 | * 7 | * @author JiaJu Zhuang 8 | **/ 9 | public interface NullableObjectConverter extends Converter { 10 | } 11 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/ReadConverterContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | import cn.idev.excel.metadata.data.ReadCellData; 5 | import cn.idev.excel.metadata.property.ExcelContentProperty; 6 | 7 | import lombok.AllArgsConstructor; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | /** 13 | * read converter context 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | @AllArgsConstructor 21 | public class ReadConverterContext { 22 | /** 23 | * Excel cell data.NotNull. 24 | */ 25 | private ReadCellData readCellData; 26 | /** 27 | * Content property.Nullable. 28 | */ 29 | private ExcelContentProperty contentProperty; 30 | /** 31 | * context.NotNull. 32 | */ 33 | private AnalysisContext analysisContext; 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/WriteConverterContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters; 2 | 3 | import cn.idev.excel.context.WriteContext; 4 | import cn.idev.excel.metadata.property.ExcelContentProperty; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.NoArgsConstructor; 10 | import lombok.Setter; 11 | 12 | /** 13 | * write converter context 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | @NoArgsConstructor 21 | @AllArgsConstructor 22 | public class WriteConverterContext { 23 | 24 | /** 25 | * Java Data.NotNull. 26 | */ 27 | private T value; 28 | 29 | /** 30 | * Content property.Nullable. 31 | */ 32 | private ExcelContentProperty contentProperty; 33 | 34 | /** 35 | * write context 36 | */ 37 | private WriteContext writeContext; 38 | } 39 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/bytearray/BoxingByteArrayImageConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters.bytearray; 2 | 3 | import cn.idev.excel.converters.Converter; 4 | import cn.idev.excel.metadata.GlobalConfiguration; 5 | import cn.idev.excel.metadata.data.WriteCellData; 6 | import cn.idev.excel.metadata.property.ExcelContentProperty; 7 | 8 | /** 9 | * Boxing Byte array and image converter 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public class BoxingByteArrayImageConverter implements Converter { 14 | @Override 15 | public Class supportJavaTypeKey() { 16 | return Byte[].class; 17 | } 18 | 19 | @Override 20 | public WriteCellData convertToExcelData(Byte[] value, ExcelContentProperty contentProperty, 21 | GlobalConfiguration globalConfiguration) { 22 | byte[] byteValue = new byte[value.length]; 23 | for (int i = 0; i < value.length; i++) { 24 | byteValue[i] = value[i]; 25 | } 26 | return new WriteCellData<>(byteValue); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/bytearray/ByteArrayImageConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters.bytearray; 2 | 3 | import cn.idev.excel.converters.Converter; 4 | import cn.idev.excel.metadata.GlobalConfiguration; 5 | import cn.idev.excel.metadata.data.WriteCellData; 6 | import cn.idev.excel.metadata.property.ExcelContentProperty; 7 | 8 | /** 9 | * Byte array and image converter 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public class ByteArrayImageConverter implements Converter { 14 | 15 | @Override 16 | public Class supportJavaTypeKey() { 17 | return byte[].class; 18 | } 19 | 20 | @Override 21 | public WriteCellData convertToExcelData(byte[] value, ExcelContentProperty contentProperty, 22 | GlobalConfiguration globalConfiguration) { 23 | return new WriteCellData<>(value); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/file/FileImageConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters.file; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | 6 | import cn.idev.excel.converters.Converter; 7 | import cn.idev.excel.util.FileUtils; 8 | import cn.idev.excel.metadata.GlobalConfiguration; 9 | import cn.idev.excel.metadata.data.WriteCellData; 10 | import cn.idev.excel.metadata.property.ExcelContentProperty; 11 | 12 | /** 13 | * File and image converter 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | public class FileImageConverter implements Converter { 18 | @Override 19 | public Class supportJavaTypeKey() { 20 | return File.class; 21 | } 22 | 23 | @Override 24 | public WriteCellData convertToExcelData(File value, ExcelContentProperty contentProperty, 25 | GlobalConfiguration globalConfiguration) throws IOException { 26 | return new WriteCellData<>(FileUtils.readFileToByteArray(value)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/inputstream/InputStreamImageConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters.inputstream; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | import cn.idev.excel.converters.Converter; 7 | import cn.idev.excel.util.IoUtils; 8 | import cn.idev.excel.metadata.GlobalConfiguration; 9 | import cn.idev.excel.metadata.data.WriteCellData; 10 | import cn.idev.excel.metadata.property.ExcelContentProperty; 11 | 12 | /** 13 | * File and image converter 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | public class InputStreamImageConverter implements Converter { 18 | @Override 19 | public Class supportJavaTypeKey() { 20 | return InputStream.class; 21 | } 22 | 23 | @Override 24 | public WriteCellData convertToExcelData(InputStream value, ExcelContentProperty contentProperty, 25 | GlobalConfiguration globalConfiguration) throws IOException { 26 | return new WriteCellData<>(IoUtils.toByteArray(value)); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/converters/string/StringImageConverter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.converters.string; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | 6 | import cn.idev.excel.converters.Converter; 7 | import cn.idev.excel.util.FileUtils; 8 | import cn.idev.excel.metadata.GlobalConfiguration; 9 | import cn.idev.excel.metadata.data.WriteCellData; 10 | import cn.idev.excel.metadata.property.ExcelContentProperty; 11 | 12 | /** 13 | * String and image converter 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | public class StringImageConverter implements Converter { 18 | @Override 19 | public Class supportJavaTypeKey() { 20 | return String.class; 21 | } 22 | 23 | @Override 24 | public WriteCellData convertToExcelData(String value, ExcelContentProperty contentProperty, 25 | GlobalConfiguration globalConfiguration) throws IOException { 26 | return new WriteCellData<>(FileUtils.readFileToByteArray(new File(value))); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/BooleanEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * Default values cannot be used for annotations. 7 | * So an additional an enumeration to determine whether the user has added the enumeration. 8 | * 9 | * @author Jiaju Zhuang 10 | */ 11 | @Getter 12 | public enum BooleanEnum { 13 | /** 14 | * NULL 15 | */ 16 | DEFAULT(null), 17 | /** 18 | * TRUE 19 | */ 20 | TRUE(Boolean.TRUE), 21 | /** 22 | * FALSE 23 | */ 24 | FALSE(Boolean.FALSE), 25 | ; 26 | 27 | Boolean booleanValue; 28 | 29 | BooleanEnum(Boolean booleanValue) { 30 | this.booleanValue = booleanValue; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/CacheLocationEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * cache location 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum CacheLocationEnum { 9 | /** 10 | * The cache will be stored in {@code ThreadLocal}, and will be cleared when the excel read and write is completed. 11 | */ 12 | THREAD_LOCAL, 13 | 14 | /** 15 | * The cache will not be cleared unless the app is stopped. 16 | */ 17 | MEMORY, 18 | 19 | /** 20 | * No caching.It may lose some of performance. 21 | */ 22 | NONE 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/CellExtraTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * Extra data type 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum CellExtraTypeEnum { 9 | /** 10 | * Comment 11 | */ 12 | COMMENT, 13 | /** 14 | * Hyperlink 15 | */ 16 | HYPERLINK, 17 | /** 18 | * Merge 19 | */ 20 | MERGE 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/HeadKindEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * The types of header 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum HeadKindEnum { 9 | /** 10 | * none 11 | */ 12 | NONE, 13 | /** 14 | * class 15 | */ 16 | CLASS, 17 | /** 18 | * String 19 | */ 20 | STRING 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/HolderEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * The types of holder 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum HolderEnum { 9 | /** 10 | * workbook 11 | */ 12 | WORKBOOK, 13 | /** 14 | * sheet 15 | */ 16 | SHEET, 17 | /** 18 | * table 19 | */ 20 | TABLE, 21 | /** 22 | * row 23 | */ 24 | ROW; 25 | } 26 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/NumericCellTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | import org.apache.poi.ss.usermodel.CellType; 4 | 5 | /** 6 | * Used to supplement {@link CellType}. 7 | * 8 | * Cannot distinguish between date and number in write case. 9 | * 10 | * @author Jiaju Zhuang 11 | */ 12 | public enum NumericCellTypeEnum { 13 | /** 14 | * number 15 | */ 16 | NUMBER, 17 | /** 18 | * date. Support only when writing. 19 | */ 20 | DATE, 21 | ; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/ReadDefaultReturnEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | import java.math.BigDecimal; 4 | import java.time.LocalDateTime; 5 | 6 | import cn.idev.excel.metadata.data.ReadCellData; 7 | 8 | /** 9 | * Read not to {@code cn.idev.excel.metadata.BasicParameter#clazz} value, the default will return type. 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public enum ReadDefaultReturnEnum { 14 | /** 15 | * default.The content of cells into string, is the same as you see in the excel. 16 | */ 17 | STRING, 18 | 19 | /** 20 | * Returns the actual type. 21 | * Will be automatically selected according to the cell contents what return type, will return the following class: 22 | *
    23 | *
  1. {@link BigDecimal}
  2. 24 | *
  3. {@link Boolean}
  4. 25 | *
  5. {@link String}
  6. 26 | *
  7. {@link LocalDateTime}
  8. 27 | *
28 | */ 29 | ACTUAL_DATA, 30 | 31 | /** 32 | * Return to {@link ReadCellData}, can decide which field you need. 33 | */ 34 | READ_CELL_DATA 35 | 36 | } 37 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/RowTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * The types of row 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum RowTypeEnum { 9 | /** 10 | * data 11 | */ 12 | DATA, 13 | /** 14 | * empty 15 | */ 16 | EMPTY,; 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/WriteDirectionEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * Direction of writing 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum WriteDirectionEnum { 9 | /** 10 | * Vertical write. 11 | */ 12 | VERTICAL, 13 | /** 14 | * Horizontal write. 15 | */ 16 | HORIZONTAL,; 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/WriteLastRowTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * The types of write last row 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum WriteLastRowTypeEnum { 9 | /** 10 | * Excel are created without templates ,And any data has been written; 11 | */ 12 | COMMON_EMPTY, 13 | /** 14 | * Excel are created with templates ,And any data has been written; 15 | */ 16 | TEMPLATE_EMPTY, 17 | /** 18 | * Any data has been written; 19 | */ 20 | HAS_DATA 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/WriteTemplateAnalysisCellTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * Type of template to read when writing 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum WriteTemplateAnalysisCellTypeEnum { 9 | /** 10 | * Common field. 11 | */ 12 | COMMON, 13 | /** 14 | * A collection of fields. 15 | */ 16 | COLLECTION 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/enums/WriteTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.enums; 2 | 3 | /** 4 | * Enumeration of write methods 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public enum WriteTypeEnum { 9 | /** 10 | * Add. 11 | */ 12 | ADD, 13 | /** 14 | * Fill. 15 | */ 16 | FILL 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/event/AnalysisEventListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.event; 2 | 3 | import java.util.Map; 4 | 5 | import cn.idev.excel.context.AnalysisContext; 6 | import cn.idev.excel.metadata.data.ReadCellData; 7 | import cn.idev.excel.read.listener.ReadListener; 8 | import cn.idev.excel.util.ConverterUtils; 9 | 10 | /** 11 | * Receives the return of each piece of data parsed 12 | * 13 | * @author jipengfei 14 | */ 15 | public abstract class AnalysisEventListener implements ReadListener { 16 | 17 | @Override 18 | public void invokeHead(Map> headMap, AnalysisContext context) { 19 | invokeHeadMap(ConverterUtils.convertToStringMap(headMap, context), context); 20 | } 21 | 22 | /** 23 | * Returns the header as a map.Override the current method to receive header data. 24 | * 25 | * @param headMap 26 | * @param context 27 | */ 28 | public void invokeHeadMap(Map headMap, AnalysisContext context) {} 29 | 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/event/Handler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.event; 2 | 3 | import cn.idev.excel.constant.OrderConstant; 4 | 5 | /** 6 | * Intercepts handle some business logic 7 | * 8 | * @author Jiaju Zhuang 9 | **/ 10 | public interface Handler extends Order { 11 | 12 | /** 13 | * handler order 14 | * 15 | * @return order 16 | */ 17 | @Override 18 | default int order() { 19 | return OrderConstant.DEFAULT_ORDER; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/event/Listener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.event; 2 | 3 | /** 4 | * Interface to listen for processing results 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public interface Listener {} 9 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/event/NotRepeatExecutor.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.event; 2 | 3 | /** 4 | * There are multiple interceptors that execute only one of them when fired once.If you want to control which one to 5 | * execute please use {@link Order} 6 | * 7 | * @author Jiaju Zhuang 8 | **/ 9 | public interface NotRepeatExecutor { 10 | /** 11 | * To see if it's the same executor 12 | * 13 | * @return 14 | */ 15 | String uniqueValue(); 16 | } 17 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/event/Order.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.event; 2 | 3 | /** 4 | * Implement this interface when sorting 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public interface Order { 9 | /** 10 | * The smaller the first implementation 11 | * 12 | * @return 13 | */ 14 | int order(); 15 | } 16 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/event/SyncReadListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.event; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.context.AnalysisContext; 7 | 8 | /** 9 | * Synchronous data reading 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | public class SyncReadListener extends AnalysisEventListener { 14 | private List list = new ArrayList(); 15 | 16 | @Override 17 | public void invoke(Object object, AnalysisContext context) { 18 | list.add(object); 19 | } 20 | 21 | @Override 22 | public void doAfterAllAnalysed(AnalysisContext context) {} 23 | 24 | public List getList() { 25 | return list; 26 | } 27 | 28 | public void setList(List list) { 29 | this.list = list; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/exception/ExcelAnalysisException.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.exception; 2 | 3 | /** 4 | * 5 | * @author jipengfei 6 | */ 7 | public class ExcelAnalysisException extends ExcelRuntimeException { 8 | 9 | public ExcelAnalysisException() {} 10 | 11 | public ExcelAnalysisException(String message) { 12 | super(message); 13 | } 14 | 15 | public ExcelAnalysisException(String message, Throwable cause) { 16 | super(message, cause); 17 | } 18 | 19 | public ExcelAnalysisException(Throwable cause) { 20 | super(cause); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/exception/ExcelAnalysisStopException.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.exception; 2 | 3 | /** 4 | * Throw the exception when you need to stop 5 | * This exception will stop the entire excel parsing. If you only want to stop the parsing of a certain sheet, please 6 | * use ExcelAnalysisStopSheetException. 7 | * 8 | * @author Jiaju Zhuang 9 | * @see ExcelAnalysisStopException 10 | */ 11 | public class ExcelAnalysisStopException extends ExcelAnalysisException { 12 | 13 | public ExcelAnalysisStopException() {} 14 | 15 | public ExcelAnalysisStopException(String message) { 16 | super(message); 17 | } 18 | 19 | public ExcelAnalysisStopException(String message, Throwable cause) { 20 | super(message, cause); 21 | } 22 | 23 | public ExcelAnalysisStopException(Throwable cause) { 24 | super(cause); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/exception/ExcelAnalysisStopSheetException.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.exception; 2 | 3 | /** 4 | * Throw the exception when you need to stop 5 | * This exception will only stop the parsing of the current sheet. If you want to stop the entire excel parsing, please 6 | * use ExcelAnalysisStopException. 7 | * 8 | * The cn.idev.excel.read.listener.ReadListener#doAfterAllAnalysed(cn.idev.excel.context.AnalysisContext) method 9 | * is called after the call is stopped. 10 | * 11 | * @author Jiaju Zhuang 12 | * @see ExcelAnalysisStopException 13 | * @since 3.3.4 14 | */ 15 | public class ExcelAnalysisStopSheetException extends ExcelAnalysisException { 16 | 17 | public ExcelAnalysisStopSheetException() {} 18 | 19 | public ExcelAnalysisStopSheetException(String message) { 20 | super(message); 21 | } 22 | 23 | public ExcelAnalysisStopSheetException(String message, Throwable cause) { 24 | super(message, cause); 25 | } 26 | 27 | public ExcelAnalysisStopSheetException(Throwable cause) { 28 | super(cause); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/exception/ExcelCommonException.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.exception; 2 | 3 | /** 4 | * 5 | * @author Jiaju Zhuang 6 | */ 7 | public class ExcelCommonException extends ExcelRuntimeException { 8 | 9 | public ExcelCommonException() {} 10 | 11 | public ExcelCommonException(String message) { 12 | super(message); 13 | } 14 | 15 | public ExcelCommonException(String message, Throwable cause) { 16 | super(message, cause); 17 | } 18 | 19 | public ExcelCommonException(Throwable cause) { 20 | super(cause); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/exception/ExcelGenerateException.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.exception; 2 | 3 | /** 4 | * @author jipengfei 5 | */ 6 | public class ExcelGenerateException extends ExcelRuntimeException { 7 | 8 | public ExcelGenerateException(String message) { 9 | super(message); 10 | } 11 | 12 | public ExcelGenerateException(String message, Throwable cause) { 13 | super(message, cause); 14 | } 15 | 16 | public ExcelGenerateException(Throwable cause) { 17 | super(cause); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/exception/ExcelRuntimeException.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.exception; 2 | 3 | /** 4 | * Excel Exception 5 | * @author Jiaju Zhuang 6 | */ 7 | public class ExcelRuntimeException extends RuntimeException { 8 | public ExcelRuntimeException() {} 9 | 10 | public ExcelRuntimeException(String message) { 11 | super(message); 12 | } 13 | 14 | public ExcelRuntimeException(String message, Throwable cause) { 15 | super(message, cause); 16 | } 17 | 18 | public ExcelRuntimeException(Throwable cause) { 19 | super(cause); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/AbstractCell.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * cell 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class AbstractCell implements Cell { 16 | /** 17 | * Row index 18 | */ 19 | private Integer rowIndex; 20 | /** 21 | * Column index 22 | */ 23 | private Integer columnIndex; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/Cell.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | /** 4 | * Cell 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public interface Cell { 9 | /** 10 | * Row index 11 | * 12 | * @return 13 | */ 14 | Integer getRowIndex(); 15 | 16 | /** 17 | * Column index 18 | * 19 | * @return 20 | */ 21 | Integer getColumnIndex(); 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/CellRange.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author jipengfei 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class CellRange { 14 | 15 | private int firstRow; 16 | private int lastRow; 17 | private int firstCol; 18 | private int lastCol; 19 | 20 | public CellRange(int firstRow, int lastRow, int firstCol, int lastCol) { 21 | this.firstRow = firstRow; 22 | this.lastRow = lastRow; 23 | this.firstCol = firstCol; 24 | this.lastCol = lastCol; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/ConfigurationHolder.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import java.util.Map; 4 | 5 | import cn.idev.excel.converters.Converter; 6 | import cn.idev.excel.converters.ConverterKeyBuild; 7 | 8 | /** 9 | * Get the corresponding holder 10 | * 11 | * @author Jiaju Zhuang 12 | **/ 13 | public interface ConfigurationHolder extends Holder { 14 | 15 | /** 16 | * Record whether it's new or from cache 17 | * 18 | * @return Record whether it's new or from cache 19 | */ 20 | boolean isNew(); 21 | 22 | /** 23 | * Some global variables 24 | * 25 | * @return Global configuration 26 | */ 27 | GlobalConfiguration globalConfiguration(); 28 | 29 | /** 30 | * What converter does the currently operated cell need to execute 31 | * 32 | * @return Converter 33 | */ 34 | Map> converterMap(); 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/FieldCache.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import java.util.Map; 4 | 5 | import lombok.AllArgsConstructor; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | /** 11 | * filed cache 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | @Getter 16 | @Setter 17 | @EqualsAndHashCode 18 | @AllArgsConstructor 19 | public class FieldCache { 20 | 21 | /** 22 | * A field cache that has been sorted by a class. 23 | * It will exclude fields that are not needed. 24 | */ 25 | private Map sortedFieldMap; 26 | 27 | /** 28 | * Fields using the index attribute 29 | */ 30 | private Map indexFieldMap; 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/FieldWrapper.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import java.lang.reflect.Field; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.AllArgsConstructor; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.NoArgsConstructor; 11 | import lombok.Setter; 12 | 13 | /** 14 | * filed wrapper 15 | * 16 | * @author Jiaju Zhuang 17 | */ 18 | @Getter 19 | @Setter 20 | @EqualsAndHashCode 21 | @AllArgsConstructor 22 | @NoArgsConstructor 23 | public class FieldWrapper { 24 | 25 | /** 26 | * field 27 | */ 28 | private Field field; 29 | 30 | /** 31 | * The field name matching cglib 32 | */ 33 | private String fieldName; 34 | 35 | /** 36 | * The name of the sheet header. 37 | * 38 | * @see ExcelProperty 39 | */ 40 | private String[] heads; 41 | } 42 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/Font.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import cn.idev.excel.write.metadata.style.WriteFont; 4 | 5 | /** 6 | * 7 | * @author jipengfei 8 | * @deprecated please use {@link WriteFont} 9 | */ 10 | @Deprecated 11 | public class Font { 12 | 13 | /** 14 | */ 15 | private String fontName; 16 | 17 | /** 18 | */ 19 | private short fontHeightInPoints; 20 | 21 | /** 22 | */ 23 | private boolean bold; 24 | 25 | public String getFontName() { 26 | return fontName; 27 | } 28 | 29 | public void setFontName(String fontName) { 30 | this.fontName = fontName; 31 | } 32 | 33 | public short getFontHeightInPoints() { 34 | return fontHeightInPoints; 35 | } 36 | 37 | public void setFontHeightInPoints(short fontHeightInPoints) { 38 | this.fontHeightInPoints = fontHeightInPoints; 39 | } 40 | 41 | public boolean isBold() { 42 | return bold; 43 | } 44 | 45 | public void setBold(boolean bold) { 46 | this.bold = bold; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/Holder.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | import cn.idev.excel.enums.HolderEnum; 4 | 5 | /** 6 | * 7 | * Get the corresponding holder 8 | * 9 | * @author Jiaju Zhuang 10 | **/ 11 | public interface Holder { 12 | 13 | /** 14 | * What holder is the return 15 | * 16 | * @return Holder enum. 17 | */ 18 | HolderEnum holderType(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/NullObject.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata; 2 | 3 | /** 4 | * Null object. 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public class NullObject { 9 | } 10 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/data/CommentData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.data; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * comment 9 | * 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class CommentData extends ClientAnchorData { 16 | /** 17 | * Name of the original comment author 18 | */ 19 | private String author; 20 | /** 21 | * rich text string 22 | */ 23 | private RichTextStringData richTextStringData; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/data/FormulaData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.data; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * formula 9 | * 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class FormulaData { 16 | /** 17 | * formula 18 | */ 19 | private String formulaValue; 20 | 21 | @Override 22 | public FormulaData clone() { 23 | FormulaData formulaData = new FormulaData(); 24 | formulaData.setFormulaValue(getFormulaValue()); 25 | return formulaData; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/property/ColumnWidthProperty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.property; 2 | 3 | import cn.idev.excel.annotation.write.style.ColumnWidth; 4 | 5 | /** 6 | * Configuration from annotations 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public class ColumnWidthProperty { 11 | private Integer width; 12 | 13 | public ColumnWidthProperty(Integer width) { 14 | this.width = width; 15 | } 16 | 17 | public static ColumnWidthProperty build(ColumnWidth columnWidth) { 18 | if (columnWidth == null || columnWidth.value() < 0) { 19 | return null; 20 | } 21 | return new ColumnWidthProperty(columnWidth.value()); 22 | } 23 | 24 | public Integer getWidth() { 25 | return width; 26 | } 27 | 28 | public void setWidth(Integer width) { 29 | this.width = width; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/property/DateTimeFormatProperty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.property; 2 | 3 | import cn.idev.excel.annotation.format.DateTimeFormat; 4 | import cn.idev.excel.util.BooleanUtils; 5 | 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | /** 11 | * Configuration from annotations 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | @Getter 16 | @Setter 17 | @EqualsAndHashCode 18 | public class DateTimeFormatProperty { 19 | private String format; 20 | private Boolean use1904windowing; 21 | 22 | public DateTimeFormatProperty(String format, Boolean use1904windowing) { 23 | this.format = format; 24 | this.use1904windowing = use1904windowing; 25 | } 26 | 27 | public static DateTimeFormatProperty build(DateTimeFormat dateTimeFormat) { 28 | if (dateTimeFormat == null) { 29 | return null; 30 | } 31 | return new DateTimeFormatProperty(dateTimeFormat.value(), 32 | BooleanUtils.isTrue(dateTimeFormat.use1904windowing().getBooleanValue())); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/property/ExcelContentProperty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.property; 2 | 3 | import java.lang.reflect.Field; 4 | 5 | import cn.idev.excel.converters.Converter; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * @author jipengfei 13 | */ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class ExcelContentProperty { 18 | public static final ExcelContentProperty EMPTY = new ExcelContentProperty(); 19 | 20 | /** 21 | * Java field 22 | */ 23 | private Field field; 24 | /** 25 | * Custom defined converters 26 | */ 27 | private Converter converter; 28 | /** 29 | * date time format 30 | */ 31 | private DateTimeFormatProperty dateTimeFormatProperty; 32 | /** 33 | * number format 34 | */ 35 | private NumberFormatProperty numberFormatProperty; 36 | /** 37 | * Content style 38 | */ 39 | private StyleProperty contentStyleProperty; 40 | /** 41 | * Content font 42 | */ 43 | private FontProperty contentFontProperty; 44 | } 45 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/property/NumberFormatProperty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.property; 2 | 3 | import java.math.RoundingMode; 4 | 5 | import cn.idev.excel.annotation.format.NumberFormat; 6 | 7 | /** 8 | * Configuration from annotations 9 | * 10 | * @author Jiaju Zhuang 11 | */ 12 | public class NumberFormatProperty { 13 | private String format; 14 | private RoundingMode roundingMode; 15 | 16 | public NumberFormatProperty(String format, RoundingMode roundingMode) { 17 | this.format = format; 18 | this.roundingMode = roundingMode; 19 | } 20 | 21 | public static NumberFormatProperty build(NumberFormat numberFormat) { 22 | if (numberFormat == null) { 23 | return null; 24 | } 25 | return new NumberFormatProperty(numberFormat.value(), numberFormat.roundingMode()); 26 | } 27 | 28 | public String getFormat() { 29 | return format; 30 | } 31 | 32 | public void setFormat(String format) { 33 | this.format = format; 34 | } 35 | 36 | public RoundingMode getRoundingMode() { 37 | return roundingMode; 38 | } 39 | 40 | public void setRoundingMode(RoundingMode roundingMode) { 41 | this.roundingMode = roundingMode; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/metadata/property/RowHeightProperty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.metadata.property; 2 | 3 | import cn.idev.excel.annotation.write.style.ContentRowHeight; 4 | import cn.idev.excel.annotation.write.style.HeadRowHeight; 5 | 6 | /** 7 | * Configuration from annotations 8 | * 9 | * @author Jiaju Zhuang 10 | */ 11 | public class RowHeightProperty { 12 | private Short height; 13 | 14 | public RowHeightProperty(Short height) { 15 | this.height = height; 16 | } 17 | 18 | public static RowHeightProperty build(HeadRowHeight headRowHeight) { 19 | if (headRowHeight == null || headRowHeight.value() < 0) { 20 | return null; 21 | } 22 | return new RowHeightProperty(headRowHeight.value()); 23 | } 24 | 25 | public static RowHeightProperty build(ContentRowHeight contentRowHeight) { 26 | if (contentRowHeight == null || contentRowHeight.value() < 0) { 27 | return null; 28 | } 29 | return new RowHeightProperty(contentRowHeight.value()); 30 | } 31 | 32 | public Short getHeight() { 33 | return height; 34 | } 35 | 36 | public void setHeight(Short height) { 37 | this.height = height; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/listener/IgnoreExceptionReadListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.listener; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | 5 | /** 6 | * Interface to listen for read results 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public interface IgnoreExceptionReadListener extends ReadListener { 11 | 12 | /** 13 | * All listeners receive this method when any one Listener does an error report. If an exception is thrown here, the 14 | * entire read will terminate. 15 | * 16 | * @param exception 17 | * @param context 18 | * @throws Exception 19 | */ 20 | @Override 21 | default void onException(Exception exception, AnalysisContext context) throws Exception {} 22 | 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/metadata/ReadBasicParameter.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.metadata; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.metadata.BasicParameter; 7 | import cn.idev.excel.read.listener.ReadListener; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | /** 13 | * Read basic parameter 14 | * 15 | * @author Jiaju Zhuang 16 | **/ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | public class ReadBasicParameter extends BasicParameter { 21 | /** 22 | * Count the number of added heads when read sheet. 23 | * 24 | *

25 | * 0 - This Sheet has no head ,since the first row are the data 26 | *

27 | * 1 - This Sheet has one row head , this is the default 28 | *

29 | * 2 - This Sheet has two row head ,since the third row is the data 30 | */ 31 | private Integer headRowNumber; 32 | /** 33 | * Custom type listener run after default 34 | */ 35 | private List> customReadListenerList; 36 | 37 | public ReadBasicParameter() { 38 | customReadListenerList = new ArrayList<>(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/metadata/holder/ReadHolder.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.metadata.holder; 2 | 3 | import java.util.List; 4 | 5 | import cn.idev.excel.metadata.ConfigurationHolder; 6 | import cn.idev.excel.read.listener.ReadListener; 7 | import cn.idev.excel.read.metadata.property.ExcelReadHeadProperty; 8 | 9 | /** 10 | * Get the corresponding Holder 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | public interface ReadHolder extends ConfigurationHolder { 15 | /** 16 | * What handler does the currently operated cell need to execute 17 | * 18 | * @return Current {@link ReadListener} 19 | */ 20 | List> readListenerList(); 21 | 22 | /** 23 | * What {@link ExcelReadHeadProperty} does the currently operated cell need to execute 24 | * 25 | * @return Current {@link ExcelReadHeadProperty} 26 | */ 27 | ExcelReadHeadProperty excelReadHeadProperty(); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/metadata/holder/csv/CsvReadSheetHolder.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.metadata.holder.csv; 2 | 3 | import cn.idev.excel.read.metadata.ReadSheet; 4 | import cn.idev.excel.read.metadata.holder.ReadSheetHolder; 5 | import cn.idev.excel.read.metadata.holder.ReadWorkbookHolder; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * sheet holder 13 | * 14 | * @author Jiaju Zhuang 15 | */ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class CsvReadSheetHolder extends ReadSheetHolder { 20 | 21 | public CsvReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder readWorkbookHolder) { 22 | super(readSheet, readWorkbookHolder); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.metadata.holder.csv; 2 | 3 | import cn.idev.excel.read.metadata.ReadWorkbook; 4 | import cn.idev.excel.read.metadata.holder.ReadWorkbookHolder; 5 | import cn.idev.excel.support.ExcelTypeEnum; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | import org.apache.commons.csv.CSVFormat; 10 | import org.apache.commons.csv.CSVParser; 11 | 12 | /** 13 | * Workbook holder 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | public class CsvReadWorkbookHolder extends ReadWorkbookHolder { 21 | 22 | private CSVFormat csvFormat; 23 | private CSVParser csvParser; 24 | 25 | public CsvReadWorkbookHolder(ReadWorkbook readWorkbook) { 26 | super(readWorkbook); 27 | setExcelType(ExcelTypeEnum.CSV); 28 | this.csvFormat = CSVFormat.DEFAULT; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/metadata/property/ExcelReadHeadProperty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.metadata.property; 2 | 3 | import java.util.List; 4 | 5 | import cn.idev.excel.metadata.ConfigurationHolder; 6 | import cn.idev.excel.metadata.property.ExcelHeadProperty; 7 | 8 | /** 9 | * Define the header attribute of excel 10 | * 11 | * @author jipengfei 12 | */ 13 | public class ExcelReadHeadProperty extends ExcelHeadProperty { 14 | 15 | public ExcelReadHeadProperty(ConfigurationHolder configurationHolder, Class headClazz, List> head) { 16 | super(configurationHolder, headClazz, head); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/read/processor/AnalysisEventProcessor.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.read.processor; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | 5 | /** 6 | * Event processor 7 | * 8 | * @author jipengfei 9 | */ 10 | public interface AnalysisEventProcessor { 11 | /** 12 | * Read extra information 13 | * 14 | * @param analysisContext 15 | */ 16 | void extra(AnalysisContext analysisContext); 17 | 18 | /** 19 | * End row 20 | * 21 | * @param analysisContext 22 | */ 23 | void endRow(AnalysisContext analysisContext); 24 | 25 | /** 26 | * Notify after all analysed 27 | * 28 | * @param analysisContext Analysis context 29 | */ 30 | void endSheet(AnalysisContext analysisContext); 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/util/IntUtils.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.util; 2 | 3 | /** 4 | * Int utils 5 | * 6 | * @author Jiaju Zhuang 7 | **/ 8 | public class IntUtils { 9 | private IntUtils() {} 10 | 11 | 12 | /** 13 | * The largest power of two that can be represented as an {@code int}. 14 | * 15 | * @since 10.0 16 | */ 17 | public static final int MAX_POWER_OF_TWO = 1 << (Integer.SIZE - 2); 18 | 19 | /** 20 | * Returns the {@code int} nearest in value to {@code value}. 21 | * 22 | * @param value any {@code long} value 23 | * @return the same value cast to {@code int} if it is in the range of the {@code int} type, 24 | * {@link Integer#MAX_VALUE} if it is too large, or {@link Integer#MIN_VALUE} if it is too 25 | * small 26 | */ 27 | public static int saturatedCast(long value) { 28 | if (value > Integer.MAX_VALUE) { 29 | return Integer.MAX_VALUE; 30 | } 31 | if (value < Integer.MIN_VALUE) { 32 | return Integer.MIN_VALUE; 33 | } 34 | return (int) value; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/executor/ExcelWriteExecutor.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.executor; 2 | 3 | /** 4 | * Excel write Executor 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public interface ExcelWriteExecutor { 9 | } 10 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/AbstractRowWriteHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler; 2 | 3 | import cn.idev.excel.write.metadata.holder.WriteSheetHolder; 4 | import cn.idev.excel.write.metadata.holder.WriteTableHolder; 5 | 6 | import org.apache.poi.ss.usermodel.Row; 7 | 8 | /** 9 | * Abstract row write handler 10 | * 11 | * @author Jiaju Zhuang 12 | * @deprecated Please use it directly {@link RowWriteHandler} 13 | **/ 14 | @Deprecated 15 | public abstract class AbstractRowWriteHandler implements RowWriteHandler { 16 | @Override 17 | public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer rowIndex, 18 | Integer relativeRowIndex, Boolean isHead) { 19 | 20 | } 21 | 22 | @Override 23 | public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, 24 | Integer relativeRowIndex, Boolean isHead) { 25 | 26 | } 27 | 28 | @Override 29 | public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, 30 | Integer relativeRowIndex, Boolean isHead) { 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/AbstractSheetWriteHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler; 2 | 3 | import cn.idev.excel.write.metadata.holder.WriteSheetHolder; 4 | import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder; 5 | 6 | /** 7 | * Abstract sheet write handler 8 | * 9 | * @author Jiaju Zhuang 10 | * @deprecated Please use it directly {@link SheetWriteHandler} 11 | **/ 12 | @Deprecated 13 | public abstract class AbstractSheetWriteHandler implements SheetWriteHandler { 14 | @Override 15 | public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { 16 | 17 | } 18 | 19 | @Override 20 | public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/AbstractWorkbookWriteHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler; 2 | 3 | import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder; 4 | 5 | /** 6 | * Abstract workbook write handler 7 | * 8 | * @author Jiaju Zhuang 9 | * @deprecated Please use it directly {@link WorkbookWriteHandler} 10 | **/ 11 | @Deprecated 12 | public abstract class AbstractWorkbookWriteHandler implements WorkbookWriteHandler { 13 | 14 | @Override 15 | public void beforeWorkbookCreate() { 16 | 17 | } 18 | 19 | @Override 20 | public void afterWorkbookCreate(WriteWorkbookHolder writeWorkbookHolder) { 21 | 22 | } 23 | 24 | @Override 25 | public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/WriteHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler; 2 | 3 | import cn.idev.excel.event.Handler; 4 | 5 | /** 6 | * intercepts handle excel write 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public interface WriteHandler extends Handler {} 11 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/context/SheetWriteHandlerContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler.context; 2 | 3 | import cn.idev.excel.context.WriteContext; 4 | import cn.idev.excel.write.metadata.holder.WriteSheetHolder; 5 | import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder; 6 | 7 | import lombok.AllArgsConstructor; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | /** 13 | * sheet context 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | @AllArgsConstructor 21 | public class SheetWriteHandlerContext { 22 | /** 23 | * write context 24 | */ 25 | private WriteContext writeContext; 26 | /** 27 | * workbook 28 | */ 29 | private WriteWorkbookHolder writeWorkbookHolder; 30 | /** 31 | * sheet 32 | */ 33 | private WriteSheetHolder writeSheetHolder; 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/context/WorkbookWriteHandlerContext.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler.context; 2 | 3 | import cn.idev.excel.context.WriteContext; 4 | import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * workbook context 13 | * 14 | * @author Jiaju Zhuang 15 | */ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | @AllArgsConstructor 20 | public class WorkbookWriteHandlerContext { 21 | /** 22 | * write context 23 | */ 24 | private WriteContext writeContext; 25 | /** 26 | * workbook 27 | */ 28 | private WriteWorkbookHolder writeWorkbookHolder; 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/handler/impl/DefaultRowWriteHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.handler.impl; 2 | 3 | import cn.idev.excel.write.handler.RowWriteHandler; 4 | import cn.idev.excel.write.handler.context.RowWriteHandlerContext; 5 | 6 | import lombok.extern.slf4j.Slf4j; 7 | 8 | /** 9 | * Default row handler. 10 | * 11 | * @author Jiaju Zhuang 12 | */ 13 | @Slf4j 14 | public class DefaultRowWriteHandler implements RowWriteHandler { 15 | 16 | @Override 17 | public void afterRowDispose(RowWriteHandlerContext context) { 18 | context.getWriteSheetHolder().setLastRowIndex(context.getRowIndex()); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/merge/AbstractMergeStrategy.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.merge; 2 | 3 | import cn.idev.excel.write.handler.CellWriteHandler; 4 | import cn.idev.excel.write.handler.context.CellWriteHandlerContext; 5 | import cn.idev.excel.metadata.Head; 6 | 7 | import org.apache.poi.ss.usermodel.Cell; 8 | import org.apache.poi.ss.usermodel.Sheet; 9 | 10 | /** 11 | * Merge strategy 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | public abstract class AbstractMergeStrategy implements CellWriteHandler { 16 | 17 | @Override 18 | public void afterCellDispose(CellWriteHandlerContext context) { 19 | if (context.getHead()) { 20 | return; 21 | } 22 | merge(context.getWriteSheetHolder().getSheet(), context.getCell(), context.getHeadData(), 23 | context.getRelativeRowIndex()); 24 | } 25 | 26 | /** 27 | * merge 28 | * 29 | * @param sheet 30 | * @param cell 31 | * @param head 32 | * @param relativeRowIndex 33 | */ 34 | protected abstract void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex); 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/CollectionRowData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * A collection row of data. 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public class CollectionRowData implements RowData { 11 | 12 | private final Object[] array; 13 | 14 | public CollectionRowData(Collection collection) { 15 | this.array = collection.toArray(); 16 | } 17 | 18 | @Override 19 | public Object get(int index) { 20 | return array[index]; 21 | } 22 | 23 | @Override 24 | public int size() { 25 | return array.length; 26 | } 27 | 28 | @Override 29 | public boolean isEmpty() { 30 | return array.length == 0; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/MapRowData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * A map row of data. 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public class MapRowData implements RowData { 11 | 12 | private final Map map; 13 | 14 | public MapRowData(Map map) { 15 | this.map = map; 16 | } 17 | 18 | @Override 19 | public Object get(int index) { 20 | return map.get(index); 21 | } 22 | 23 | @Override 24 | public int size() { 25 | return map.size(); 26 | } 27 | 28 | @Override 29 | public boolean isEmpty() { 30 | return map.isEmpty(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/RowData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata; 2 | 3 | /** 4 | * A row of data. 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public interface RowData { 9 | 10 | /** 11 | * Returns the value to which the specified key is mapped, 12 | * or {@code null} if this map contains no mapping for the key. 13 | * 14 | * @param index 15 | * @return data 16 | */ 17 | Object get(int index); 18 | 19 | /** 20 | * Returns the number of elements in this collection. If this collection 21 | * contains more than Integer.MAX_VALUE elements, returns 22 | * Integer.MAX_VALUE. 23 | * 24 | * @return the number of elements in this collection 25 | */ 26 | int size(); 27 | 28 | /** 29 | * Returns true if this collection contains no elements. 30 | * 31 | * @return true if this collection contains no elements 32 | */ 33 | boolean isEmpty(); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/WriteSheet.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * Write sheet 9 | * 10 | * @author jipengfei 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class WriteSheet extends WriteBasicParameter { 16 | /** 17 | * Starting from 0 18 | */ 19 | private Integer sheetNo; 20 | /** 21 | * sheet name 22 | */ 23 | private String sheetName; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/WriteTable.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * table 9 | * 10 | * @author jipengfei 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class WriteTable extends WriteBasicParameter { 16 | /** 17 | * Starting from 0 18 | */ 19 | private Integer tableNo; 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/fill/FillWrapper.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata.fill; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Multiple lists are supported when packing 7 | * 8 | * @author Jiaju Zhuang 9 | **/ 10 | public class FillWrapper { 11 | /** 12 | * The collection prefix that needs to be filled. 13 | */ 14 | private String name; 15 | /** 16 | * Data that needs to be filled. 17 | */ 18 | private Collection collectionData; 19 | 20 | public FillWrapper(Collection collectionData) { 21 | this.collectionData = collectionData; 22 | } 23 | 24 | public FillWrapper(String name, Collection collectionData) { 25 | this.name = name; 26 | this.collectionData = collectionData; 27 | } 28 | 29 | public String getName() { 30 | return name; 31 | } 32 | 33 | public void setName(String name) { 34 | this.name = name; 35 | } 36 | 37 | public Collection getCollectionData() { 38 | return collectionData; 39 | } 40 | 41 | public void setCollectionData(Collection collectionData) { 42 | this.collectionData = collectionData; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/metadata/holder/WriteTableHolder.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.metadata.holder; 2 | 3 | import cn.idev.excel.enums.HolderEnum; 4 | import cn.idev.excel.write.metadata.WriteTable; 5 | 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | /** 11 | * sheet holder 12 | * 13 | * @author Jiaju Zhuang 14 | */ 15 | @Getter 16 | @Setter 17 | @EqualsAndHashCode 18 | public class WriteTableHolder extends AbstractWriteHolder { 19 | /*** 20 | * poi sheet 21 | */ 22 | private WriteSheetHolder parentWriteSheetHolder; 23 | /*** 24 | * tableNo 25 | */ 26 | private Integer tableNo; 27 | /** 28 | * current table param 29 | */ 30 | private WriteTable writeTable; 31 | 32 | public WriteTableHolder(WriteTable writeTable, WriteSheetHolder writeSheetHolder) { 33 | super(writeTable, writeSheetHolder); 34 | this.parentWriteSheetHolder = writeSheetHolder; 35 | this.tableNo = writeTable.getTableNo(); 36 | this.writeTable = writeTable; 37 | 38 | // init handler 39 | initHandler(writeTable, writeSheetHolder); 40 | } 41 | 42 | @Override 43 | public HolderEnum holderType() { 44 | return HolderEnum.TABLE; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/style/column/SimpleColumnWidthStyleStrategy.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.style.column; 2 | 3 | import cn.idev.excel.metadata.Head; 4 | 5 | /** 6 | * All the columns are the same width 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public class SimpleColumnWidthStyleStrategy extends AbstractHeadColumnWidthStyleStrategy { 11 | private final Integer columnWidth; 12 | 13 | /** 14 | * 15 | * @param columnWidth 16 | */ 17 | public SimpleColumnWidthStyleStrategy(Integer columnWidth) { 18 | this.columnWidth = columnWidth; 19 | } 20 | 21 | @Override 22 | protected Integer columnWidth(Head head, Integer columnIndex) { 23 | return columnWidth; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /fastexcel-core/src/main/java/cn/idev/excel/write/style/row/SimpleRowHeightStyleStrategy.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.write.style.row; 2 | 3 | import org.apache.poi.ss.usermodel.Row; 4 | 5 | /** 6 | * Set the head column high and content column high 7 | * 8 | * @author Jiaju Zhuang 9 | */ 10 | public class SimpleRowHeightStyleStrategy extends AbstractRowHeightStyleStrategy { 11 | private final Short headRowHeight; 12 | private final Short contentRowHeight; 13 | 14 | public SimpleRowHeightStyleStrategy(Short headRowHeight, Short contentRowHeight) { 15 | this.headRowHeight = headRowHeight; 16 | this.contentRowHeight = contentRowHeight; 17 | } 18 | 19 | @Override 20 | protected void setHeadColumnHeight(Row row, int relativeRowIndex) { 21 | if (headRowHeight != null) { 22 | row.setHeightInPoints(headRowHeight); 23 | } 24 | } 25 | 26 | @Override 27 | protected void setContentColumnHeight(Row row, int relativeRowIndex) { 28 | if (contentRowHeight != null) { 29 | row.setHeightInPoints(contentRowHeight); 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-support/README.md: -------------------------------------------------------------------------------- 1 | # easyexcel-support 2 | 3 | 外部依赖的代码,目前就一个cglib,由于cglib不支持jdk高版本,所以单独复制了一份 -------------------------------------------------------------------------------- /fastexcel-support/README_EN.md: -------------------------------------------------------------------------------- 1 | # easyexcel-support 2 | 3 | External dependencies: Currently, there is only one dependency, cglib. Since cglib does not support higher versions of the JDK, a separate copy has been made. -------------------------------------------------------------------------------- /fastexcel-support/src/main/java/cn/idev/excel/support/Empty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.support; 2 | 3 | /** 4 | * empty 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public class Empty { 9 | } 10 | -------------------------------------------------------------------------------- /fastexcel-test/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/README.md -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/annotation/AnnotationData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.annotation; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelIgnore; 6 | import cn.idev.excel.annotation.ExcelProperty; 7 | import cn.idev.excel.annotation.format.DateTimeFormat; 8 | import cn.idev.excel.annotation.format.NumberFormat; 9 | import cn.idev.excel.annotation.write.style.ColumnWidth; 10 | import cn.idev.excel.annotation.write.style.ContentRowHeight; 11 | import cn.idev.excel.annotation.write.style.HeadRowHeight; 12 | 13 | import lombok.EqualsAndHashCode; 14 | import lombok.Getter; 15 | import lombok.Setter; 16 | 17 | /** 18 | * @author Jiaju Zhuang 19 | */ 20 | @Getter 21 | @Setter 22 | @EqualsAndHashCode 23 | @ColumnWidth(50) 24 | @HeadRowHeight(50) 25 | @ContentRowHeight(100) 26 | public class AnnotationData { 27 | @ExcelProperty("日期") 28 | @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒") 29 | private Date date; 30 | 31 | @ExcelProperty(value = "数字") 32 | @NumberFormat("#.##%") 33 | private Double number; 34 | 35 | @ExcelIgnore 36 | private String ignore; 37 | private static final String staticFinal = "test"; 38 | private transient String transientString; 39 | } 40 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/annotation/AnnotationIndexAndNameData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.annotation; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class AnnotationIndexAndNameData { 16 | @ExcelProperty(value = "第四个", index = 4) 17 | private String index4; 18 | @ExcelProperty(value = "第二个") 19 | private String index2; 20 | @ExcelProperty(index = 0) 21 | private String index0; 22 | @ExcelProperty(value = "第一个", index = 1) 23 | private String index1; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/bom/BomData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.bom; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | @Getter 10 | @Setter 11 | @EqualsAndHashCode 12 | public class BomData { 13 | @ExcelProperty("姓名") 14 | private String name; 15 | @ExcelProperty("年纪") 16 | private Long age; 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/cache/CacheData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.cache; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class CacheData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | 19 | @ExcelProperty("年龄") 20 | private Long age; 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/cache/CacheInvokeData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.cache; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class CacheInvokeData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | 19 | @ExcelProperty("年龄") 20 | private Long age; 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/cache/CacheInvokeMemoryData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.cache; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class CacheInvokeMemoryData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | 19 | @ExcelProperty("年龄") 20 | private Long age; 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/celldata/CellDataReadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.celldata; 2 | 3 | import cn.idev.excel.annotation.format.DateTimeFormat; 4 | import cn.idev.excel.metadata.data.ReadCellData; 5 | 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | /** 11 | * @author Jiaju Zhuang 12 | */ 13 | @Getter 14 | @Setter 15 | @EqualsAndHashCode 16 | public class CellDataReadData { 17 | @DateTimeFormat("yyyy年MM月dd日") 18 | private ReadCellData date; 19 | private ReadCellData integer1; 20 | private Integer integer2; 21 | private ReadCellData formulaValue; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/celldata/CellDataWriteData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.celldata; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.format.DateTimeFormat; 6 | import cn.idev.excel.metadata.data.WriteCellData; 7 | 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | /** 13 | * @author Jiaju Zhuang 14 | */ 15 | @Getter 16 | @Setter 17 | @EqualsAndHashCode 18 | public class CellDataWriteData { 19 | @DateTimeFormat("yyyy年MM月dd日") 20 | private WriteCellData date; 21 | private WriteCellData integer1; 22 | private Integer integer2; 23 | private WriteCellData formulaValue; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/charset/CharsetData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.charset; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | @Getter 10 | @Setter 11 | @EqualsAndHashCode 12 | public class CharsetData { 13 | @ExcelProperty("姓名") 14 | private String name; 15 | @ExcelProperty("年纪") 16 | private Integer age; 17 | } 18 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/converter/ConverterTest.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.converter; 2 | 3 | import java.math.BigDecimal; 4 | 5 | import cn.idev.excel.converters.WriteConverterContext; 6 | import cn.idev.excel.converters.floatconverter.FloatNumberConverter; 7 | import cn.idev.excel.metadata.data.WriteCellData; 8 | 9 | import org.junit.jupiter.api.Assertions; 10 | import org.junit.jupiter.api.MethodOrderer; 11 | import org.junit.jupiter.api.Test; 12 | import org.junit.jupiter.api.TestMethodOrder; 13 | 14 | /** 15 | * @author Jiaju Zhuang 16 | */ 17 | @TestMethodOrder(MethodOrderer.MethodName.class) 18 | public class ConverterTest { 19 | 20 | @Test 21 | public void t01FloatNumberConverter() { 22 | FloatNumberConverter floatNumberConverter = new FloatNumberConverter(); 23 | WriteConverterContext context = new WriteConverterContext<>(); 24 | context.setValue(95.62F); 25 | WriteCellData writeCellData = floatNumberConverter.convertToExcelData(context); 26 | Assertions.assertEquals(0, writeCellData.getNumberValue().compareTo(new BigDecimal("95.62"))); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/converter/CustomConverterWriteData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.converter; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | import java.sql.Timestamp; 9 | 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class CustomConverterWriteData { 14 | @ExcelProperty(value = "时间戳-字符串", converter = TimestampStringConverter.class) 15 | private Timestamp timestampStringData; 16 | @ExcelProperty(value = "时间戳-数字", converter = TimestampNumberConverter.class) 17 | private Timestamp timestampNumberData; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/converter/ImageData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.converter; 2 | 3 | import java.io.File; 4 | import java.io.InputStream; 5 | 6 | import cn.idev.excel.annotation.ExcelProperty; 7 | import cn.idev.excel.annotation.write.style.ColumnWidth; 8 | import cn.idev.excel.annotation.write.style.ContentRowHeight; 9 | import cn.idev.excel.converters.string.StringImageConverter; 10 | 11 | import lombok.EqualsAndHashCode; 12 | import lombok.Getter; 13 | import lombok.Setter; 14 | 15 | /** 16 | * @author Jiaju Zhuang 17 | */ 18 | @Getter 19 | @Setter 20 | @EqualsAndHashCode 21 | @ContentRowHeight(500) 22 | @ColumnWidth(500 / 8) 23 | public class ImageData { 24 | private File file; 25 | private InputStream inputStream; 26 | @ExcelProperty(converter = StringImageConverter.class) 27 | private String string; 28 | private byte[] byteArray; 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/dataformat/DateFormatData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.dataformat; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class DateFormatData { 14 | private String date; 15 | private String dateStringCn; 16 | private String dateStringCn2; 17 | private String dateStringUs; 18 | private String number; 19 | private String numberStringCn; 20 | private String numberStringUs; 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/encrypt/EncryptData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.encrypt; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class EncryptData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/exception/ExceptionData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.exception; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class ExceptionData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/exception/ExceptionThrowDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.exception; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.read.listener.ReadListener; 7 | import cn.idev.excel.context.AnalysisContext; 8 | 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | /** 13 | * @author Jiaju Zhuang 14 | */ 15 | public class ExceptionThrowDataListener implements ReadListener { 16 | private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionData.class); 17 | List list = new ArrayList(); 18 | 19 | @Override 20 | public void invoke(ExceptionData data, AnalysisContext context) { 21 | list.add(data); 22 | if (list.size() == 5) { 23 | int i = 5 / 0; 24 | } 25 | } 26 | 27 | @Override 28 | public void doAfterAllAnalysed(AnalysisContext context) { 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/excludeorinclude/ExcludeOrIncludeData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.excludeorinclude; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class ExcludeOrIncludeData { 16 | @ExcelProperty(order = 1) 17 | private String column1; 18 | @ExcelProperty(order = 2) 19 | private String column2; 20 | @ExcelProperty(order = 3) 21 | private String column3; 22 | @ExcelProperty(order = 4) 23 | private String column4; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/extra/ExtraData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.extra; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class ExtraData { 14 | 15 | private String row1; 16 | 17 | private String row2; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/fill/FillData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.fill; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import cn.idev.excel.annotation.format.NumberFormat; 5 | import cn.idev.excel.converters.doubleconverter.DoubleStringConverter; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * @author Jiaju Zhuang 13 | */ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class FillData { 18 | private String name; 19 | @NumberFormat("#") 20 | @ExcelProperty(converter = DoubleStringConverter.class) 21 | private Double number; 22 | private String empty; 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/fill/style/FillStyleData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.fill.style; 2 | 3 | import java.util.Date; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class FillStyleData { 16 | private String name; 17 | private Double number; 18 | private Date date; 19 | private String empty; 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/handler/WriteHandlerData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.handler; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class WriteHandlerData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/head/ComplexDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.head; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.event.AnalysisEventListener; 7 | import cn.idev.excel.context.AnalysisContext; 8 | import com.alibaba.fastjson2.JSON; 9 | 10 | import org.junit.jupiter.api.Assertions; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | 14 | /** 15 | * @author Jiaju Zhuang 16 | */ 17 | public class ComplexDataListener extends AnalysisEventListener { 18 | private static final Logger LOGGER = LoggerFactory.getLogger(ComplexHeadData.class); 19 | List list = new ArrayList(); 20 | 21 | @Override 22 | public void invoke(ComplexHeadData data, AnalysisContext context) { 23 | list.add(data); 24 | } 25 | 26 | @Override 27 | public void doAfterAllAnalysed(AnalysisContext context) { 28 | Assertions.assertEquals(list.size(), 1); 29 | ComplexHeadData data = list.get(0); 30 | Assertions.assertEquals(data.getString4(), "字符串4"); 31 | LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/head/ComplexHeadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.head; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class ComplexHeadData { 16 | @ExcelProperty({"顶格", "顶格", "两格"}) 17 | private String string0; 18 | @ExcelProperty({"顶格", "顶格", "两格"}) 19 | private String string1; 20 | @ExcelProperty({"顶格", "四联", "四联"}) 21 | private String string2; 22 | @ExcelProperty({"顶格", "四联", "四联"}) 23 | private String string3; 24 | @ExcelProperty({"顶格"}) 25 | private String string4; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/head/MaxHeadSizeData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.head; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | @Getter 9 | @Setter 10 | @EqualsAndHashCode 11 | public class MaxHeadSizeData { 12 | @ExcelProperty({"名称"}) 13 | private String string0; 14 | @ExcelProperty({"区域"}) 15 | private String string1; 16 | @ExcelProperty({"所属项目"}) 17 | private String string2; 18 | @ExcelProperty({"所属维保单位"}) 19 | private String string3; 20 | @ExcelProperty({"序列号"}) 21 | private String string4; 22 | @ExcelProperty({"到期时间"}) 23 | private String string5; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/head/NoHeadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.head; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class NoHeadData { 16 | @ExcelProperty("字符串") 17 | private String string; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/head/NoHeadDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.head; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.event.AnalysisEventListener; 7 | import cn.idev.excel.context.AnalysisContext; 8 | import com.alibaba.fastjson2.JSON; 9 | 10 | import org.junit.jupiter.api.Assertions; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | 14 | /** 15 | * @author Jiaju Zhuang 16 | */ 17 | public class NoHeadDataListener extends AnalysisEventListener { 18 | private static final Logger LOGGER = LoggerFactory.getLogger(NoHeadData.class); 19 | List list = new ArrayList(); 20 | 21 | @Override 22 | public void invoke(NoHeadData data, AnalysisContext context) { 23 | list.add(data); 24 | } 25 | 26 | @Override 27 | public void doAfterAllAnalysed(AnalysisContext context) { 28 | Assertions.assertEquals(list.size(), 1); 29 | NoHeadData data = list.get(0); 30 | Assertions.assertEquals(data.getString(), "字符串0"); 31 | LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/hiddensheets/HiddenSheetsData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.hiddensheets; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | @EqualsAndHashCode 10 | public class HiddenSheetsData { 11 | private String title; 12 | } 13 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/hiddensheets/HiddenSheetsListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.hiddensheets; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | import cn.idev.excel.event.AnalysisEventListener; 5 | import com.alibaba.fastjson2.JSON; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.junit.jupiter.api.Assertions; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | public class HiddenSheetsListener extends AnalysisEventListener { 14 | List list = new ArrayList<>(); 15 | 16 | @Override 17 | public void invoke(HiddenSheetsData data, AnalysisContext context) { 18 | list.add(data); 19 | } 20 | 21 | @Override 22 | public void doAfterAllAnalysed(AnalysisContext context) { 23 | log.info("A form is read finished."); 24 | Assertions.assertEquals("data01", list.get(0).getTitle()); 25 | log.info("All row:{}", JSON.toJSONString(list)); 26 | } 27 | 28 | public List getList() { 29 | return list; 30 | } 31 | 32 | public void setList(List list) { 33 | this.list = list; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/large/LargeData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.large; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class LargeData { 14 | 15 | private String str1; 16 | 17 | private String str2; 18 | 19 | private String str3; 20 | 21 | private String str4; 22 | 23 | private String str5; 24 | 25 | private String str6; 26 | 27 | private String str7; 28 | 29 | private String str8; 30 | 31 | private String str9; 32 | 33 | private String str10; 34 | 35 | private String str11; 36 | 37 | private String str12; 38 | 39 | private String str13; 40 | 41 | private String str14; 42 | 43 | private String str15; 44 | 45 | private String str16; 46 | 47 | private String str17; 48 | 49 | private String str18; 50 | 51 | private String str19; 52 | 53 | private String str20; 54 | 55 | private String str21; 56 | 57 | private String str22; 58 | 59 | private String str23; 60 | 61 | private String str24; 62 | 63 | private String str25; 64 | } 65 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/multiplesheets/MultipleSheetsData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.multiplesheets; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class MultipleSheetsData { 14 | private String title; 15 | } 16 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/noncamel/UnCamelData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.noncamel; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class UnCamelData { 14 | private String string1; 15 | private String String2; 16 | private String sTring3; 17 | private String STring4; 18 | private String STRING5; 19 | private String STRing6; 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/parameter/ParameterData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.parameter; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class ParameterData { 16 | @ExcelProperty("姓名") 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/repetition/RepetitionData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.repetition; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class RepetitionData { 16 | @ExcelProperty("字符串") 17 | private String string; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/simple/SimpleData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.simple; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * mock data format for simple read/write 11 | *

12 | * Use ExcelProperty {@link ExcelProperty} to mark headers 13 | *

14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | public class SimpleData { 21 | @ExcelProperty("姓名") 22 | private String name; 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/simple/SimpleDataSheetNameListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.simple; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.event.AnalysisEventListener; 7 | import cn.idev.excel.context.AnalysisContext; 8 | import com.alibaba.fastjson2.JSON; 9 | 10 | import org.junit.jupiter.api.Assertions; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | 14 | /** 15 | * @author Jiaju Zhuang 16 | */ 17 | public class SimpleDataSheetNameListener extends AnalysisEventListener { 18 | private static final Logger LOGGER = LoggerFactory.getLogger(SimpleDataSheetNameListener.class); 19 | List list = new ArrayList(); 20 | 21 | @Override 22 | public void invoke(SimpleData data, AnalysisContext context) { 23 | list.add(data); 24 | } 25 | 26 | @Override 27 | public void doAfterAllAnalysed(AnalysisContext context) { 28 | Assertions.assertEquals(list.size(), 1); 29 | Assertions.assertEquals(list.get(0).getName(), "张三"); 30 | LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/skip/SkipData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.skip; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class SkipData { 16 | 17 | @ExcelProperty("姓名") 18 | private String name; 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/sort/SortData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.sort; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class SortData { 16 | private String column5; 17 | private String column6; 18 | @ExcelProperty(order = 100) 19 | private String column4; 20 | @ExcelProperty(order = 99) 21 | private String column3; 22 | @ExcelProperty(value = "column2", index = 1) 23 | private String column2; 24 | @ExcelProperty(value = "column1", index = 0) 25 | private String column1; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/style/StyleData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.style; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import cn.idev.excel.annotation.write.style.HeadFontStyle; 5 | import cn.idev.excel.annotation.write.style.HeadStyle; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * @author Jiaju Zhuang 13 | */ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | @HeadStyle 18 | @HeadFontStyle 19 | public class StyleData { 20 | @ExcelProperty("字符串") 21 | private String string; 22 | @ExcelProperty("字符串1") 23 | private String string1; 24 | } 25 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/style/StyleDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.style; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import cn.idev.excel.event.AnalysisEventListener; 7 | import cn.idev.excel.test.core.simple.SimpleDataListener; 8 | import cn.idev.excel.context.AnalysisContext; 9 | import com.alibaba.fastjson2.JSON; 10 | 11 | import org.junit.jupiter.api.Assertions; 12 | import org.slf4j.Logger; 13 | import org.slf4j.LoggerFactory; 14 | 15 | /** 16 | * @author Jiaju Zhuang 17 | */ 18 | public class StyleDataListener extends AnalysisEventListener { 19 | private static final Logger LOGGER = LoggerFactory.getLogger(SimpleDataListener.class); 20 | List list = new ArrayList(); 21 | 22 | @Override 23 | public void invoke(StyleData data, AnalysisContext context) { 24 | list.add(data); 25 | } 26 | 27 | @Override 28 | public void doAfterAllAnalysed(AnalysisContext context) { 29 | Assertions.assertEquals(list.size(), 2); 30 | Assertions.assertEquals(list.get(0).getString(), "字符串0"); 31 | Assertions.assertEquals(list.get(1).getString(), "字符串1"); 32 | LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/core/template/TemplateData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.core.template; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class TemplateData { 16 | @ExcelProperty("字符串0") 17 | private String string0; 18 | @ExcelProperty("字符串1") 19 | private String string1; 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/fill/FillData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.fill; 2 | 3 | import java.util.Date; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class FillData { 16 | private String name; 17 | private double number; 18 | private Date date; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/CellDataReadDemoData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.metadata.data.CellData; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * 基础数据类.这里的排序和excel里面的排序一致 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class CellDataReadDemoData { 20 | private CellData string; 21 | // 这里注意 虽然是日期 但是 类型 存储的是number 因为excel 存储的就是number 22 | private CellData date; 23 | private CellData doubleData; 24 | // 这里并不一定能完美的获取 有些公式是依赖性的 可能会读不到 这个问题后续会修复 25 | private CellData formulaValue; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/ConverterData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import cn.idev.excel.annotation.format.DateTimeFormat; 5 | import cn.idev.excel.annotation.format.NumberFormat; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * Basic data class. The order here is consistent with the order in the Excel file. 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class ConverterData { 20 | 21 | /** 22 | * I use a custom converter. No matter what is passed from the database, I prepend "Custom:". 23 | */ 24 | @ExcelProperty(converter = CustomStringStringConverter.class) 25 | private String string; 26 | 27 | /** 28 | * I use a string to receive the date so that it can be formatted. I want to receive the date in the format of yyyy-MM-dd HH:mm:ss. 29 | */ 30 | @DateTimeFormat("yyyy-MM-dd HH:mm:ss") 31 | private String date; 32 | 33 | /** 34 | * I want to receive a number in percentage format. 35 | */ 36 | @NumberFormat("#.##%") 37 | private String doubleData; 38 | } 39 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/DemoChainAccessorsData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import java.util.Date; 7 | 8 | /** 9 | * 基础数据类.这里的排序和excel里面的排序一致 10 | * 11 | * @author Jiaju Zhuang 12 | **/ 13 | @Data 14 | @Accessors(chain = true) 15 | public class DemoChainAccessorsData { 16 | private String string; 17 | private Date date; 18 | private Double doubleData; 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/DemoCompatibleHeaderData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import lombok.Data; 5 | 6 | import java.util.Date; 7 | 8 | /** 9 | * Compatible header data class. 10 | */ 11 | @Data 12 | public class DemoCompatibleHeaderData { 13 | 14 | @ExcelProperty("String") 15 | private String string; 16 | 17 | @ExcelProperty("Date") 18 | private Date date; 19 | 20 | @ExcelProperty("DoubleData") 21 | private Double doubleData; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/DemoDAO.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 假设这个是你的DAO存储。当然还要这个类让spring管理,当然你不用需要存储,也不需要这个类。 7 | * 8 | * @author Jiaju Zhuang 9 | **/ 10 | public class DemoDAO { 11 | 12 | public void save(List list) { 13 | // 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/DemoData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import java.util.Date; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * 基础数据类.这里的排序和excel里面的排序一致 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class DemoData { 18 | private String string; 19 | private Date date; 20 | private Double doubleData; 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/DemoDataAnother.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @Setter 10 | @EqualsAndHashCode 11 | @ToString 12 | public class DemoDataAnother { 13 | private String strA; 14 | private String strB; 15 | private String strC; 16 | } 17 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/DemoExtraData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class DemoExtraData { 14 | 15 | private String row1; 16 | 17 | private String row2; 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/ExceptionDemoData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * Basic data class. The order here is consistent with the order in the Excel file. 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class ExceptionDemoData { 18 | 19 | /** 20 | * Using a Date to receive a string will definitely cause an error. 21 | */ 22 | private Date date; 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/GenericHeaderTypeDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import cn.idev.excel.context.AnalysisContext; 4 | import cn.idev.excel.read.listener.ReadListener; 5 | import lombok.extern.slf4j.Slf4j; 6 | 7 | /** 8 | * A data listener example that specifies the header type through generics. 9 | * 10 | * @param 11 | */ 12 | @Slf4j 13 | public class GenericHeaderTypeDataListener implements ReadListener { 14 | 15 | private final Class headerClass; 16 | 17 | private GenericHeaderTypeDataListener(Class headerClass) { 18 | this.headerClass = headerClass; 19 | } 20 | 21 | 22 | @Override 23 | public void invoke(T data, AnalysisContext context) { 24 | log.info("data:{}", data); 25 | // Execute business logic 26 | } 27 | 28 | @Override 29 | public void doAfterAllAnalysed(AnalysisContext context) { 30 | // Perform cleanup tasks 31 | } 32 | 33 | public static GenericHeaderTypeDataListener build(Class excelHeaderClass) { 34 | return new GenericHeaderTypeDataListener<>(excelHeaderClass); 35 | } 36 | 37 | public Class getHeaderClass() { 38 | return headerClass; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/IndexOrNameData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * Basic data class 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class IndexOrNameData { 20 | /** 21 | * Force reading the third column. It is not recommended to use both index and name at the same time. 22 | * Either use index only or use name only for matching within a single object. 23 | */ 24 | @ExcelProperty(index = 2) 25 | private Double doubleData; 26 | /** 27 | * Match by name. Note that if the name is duplicated, only one field will be populated with data. 28 | */ 29 | @ExcelProperty("String") 30 | private String string; 31 | 32 | @ExcelProperty("Date") 33 | private Date date; 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/read/Sample.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.read; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | @Getter 9 | @Setter 10 | @EqualsAndHashCode 11 | @NoArgsConstructor 12 | public class Sample { 13 | 14 | private String header; 15 | } -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/web/DownloadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.web; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * 基础数据类 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class DownloadData { 20 | @ExcelProperty("字符串标题") 21 | private String string; 22 | @ExcelProperty("日期标题") 23 | private Date date; 24 | @ExcelProperty("数字标题") 25 | private Double doubleData; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/web/EasyexcelApplication.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.web; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class EasyexcelApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(EasyexcelApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/web/UploadDAO.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.web; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.stereotype.Repository; 6 | 7 | /** 8 | * 假设这个是你的DAO存储。当然还要这个类让spring管理,当然你不用需要存储,也不需要这个类。 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | @Repository 13 | public class UploadDAO { 14 | 15 | public void save(List list) { 16 | // 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/web/UploadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.web; 2 | 3 | import java.util.Date; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * 基础数据类 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class UploadData { 18 | private String string; 19 | private Date date; 20 | private Double doubleData; 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/ColorDemoData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import cn.idev.excel.annotation.write.style.HeadFontStyle; 5 | import lombok.AllArgsConstructor; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.NoArgsConstructor; 8 | import lombok.Setter; 9 | import lombok.Getter; 10 | import org.apache.poi.ss.usermodel.Font; 11 | 12 | /** 13 | * Basic data class for test color 14 | * 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | @AllArgsConstructor 20 | @NoArgsConstructor 21 | public class ColorDemoData { 22 | 23 | 24 | @ExcelProperty("姓名") 25 | private String name; 26 | @ExcelProperty("年龄") 27 | @HeadFontStyle(color = Font.COLOR_RED) 28 | private Integer age; 29 | @ExcelProperty("性别") 30 | private String sex; 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/ComplexHeadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * 复杂头数据.这里最终效果是第一行就一个主标题,第二行分类 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class ComplexHeadData { 20 | @ExcelProperty({"主标题", "字符串标题"}) 21 | private String string; 22 | @ExcelProperty({"主标题", "日期标题"}) 23 | private Date date; 24 | @ExcelProperty({"主标题", "数字标题"}) 25 | private Double doubleData; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/ConverterData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | import cn.idev.excel.annotation.format.DateTimeFormat; 7 | import cn.idev.excel.annotation.format.NumberFormat; 8 | 9 | import lombok.EqualsAndHashCode; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | 13 | /** 14 | * 基础数据类.这里的排序和excel里面的排序一致 15 | * 16 | * @author Jiaju Zhuang 17 | **/ 18 | @Getter 19 | @Setter 20 | @EqualsAndHashCode 21 | public class ConverterData { 22 | /** 23 | * 我想所有的 字符串起前面加上"自定义:"三个字 24 | */ 25 | @ExcelProperty(value = "字符串标题", converter = CustomStringStringConverter.class) 26 | private String string; 27 | /** 28 | * 我想写到excel 用年月日的格式 29 | */ 30 | @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒") 31 | @ExcelProperty("日期标题") 32 | private Date date; 33 | /** 34 | * 我想写到excel 用百分比表示 35 | */ 36 | @NumberFormat("#.##%") 37 | @ExcelProperty(value = "数字标题") 38 | private Double doubleData; 39 | } 40 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/DemoData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import cn.idev.excel.annotation.ExcelIgnore; 4 | import cn.idev.excel.annotation.ExcelProperty; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * Basic data class 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class DemoData { 20 | /** 21 | * String Title 22 | */ 23 | @ExcelProperty("String Title") 24 | private String string; 25 | 26 | /** 27 | * Date Title 28 | */ 29 | @ExcelProperty("Date Title") 30 | private Date date; 31 | 32 | /** 33 | * Number Title 34 | */ 35 | @ExcelProperty("Number Title") 36 | private Double doubleData; 37 | 38 | /** 39 | * Ignore this field 40 | */ 41 | @ExcelIgnore 42 | private String ignore; 43 | } 44 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/DemoMergeData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | import cn.idev.excel.annotation.write.style.ContentLoopMerge; 7 | 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | /** 13 | * 样式的数据类 14 | * 15 | * @author Jiaju Zhuang 16 | **/ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | // 将第6-7行的2-3列合并成一个单元格 21 | // @OnceAbsoluteMerge(firstRowIndex = 5, lastRowIndex = 6, firstColumnIndex = 1, lastColumnIndex = 2) 22 | public class DemoMergeData { 23 | // 这一列 每隔2行 合并单元格 24 | @ContentLoopMerge(eachRow = 2) 25 | @ExcelProperty("字符串标题") 26 | private String string; 27 | @ExcelProperty("日期标题") 28 | private Date date; 29 | @ExcelProperty("数字标题") 30 | private Double doubleData; 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/ImageDataWithAnnotation.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.io.File; 4 | import java.io.InputStream; 5 | import java.net.URL; 6 | 7 | import cn.idev.excel.annotation.write.style.ContentRowHeight; 8 | import cn.idev.excel.converters.string.StringImageConverter; 9 | import cn.idev.excel.annotation.ExcelProperty; 10 | import cn.idev.excel.annotation.write.style.ColumnWidth; 11 | 12 | import lombok.EqualsAndHashCode; 13 | import lombok.Getter; 14 | import lombok.Setter; 15 | 16 | /** 17 | * 图片导出类 18 | */ 19 | @Getter 20 | @Setter 21 | @EqualsAndHashCode 22 | @ContentRowHeight(100) 23 | @ColumnWidth(100 / 8) 24 | public class ImageDataWithAnnotation { 25 | private File file; 26 | private InputStream inputStream; 27 | /** 28 | * 如果string类型 必须指定转换器,string默认转换成string 29 | */ 30 | @ExcelProperty(converter = StringImageConverter.class) 31 | private String string; 32 | private byte[] byteArray; 33 | /** 34 | * 根据url导出 35 | * 36 | * @since 2.1.1 37 | */ 38 | private URL url; 39 | } 40 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/IndexData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * 基础数据类 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class IndexData { 20 | @ExcelProperty(value = "字符串标题", index = 0) 21 | private String string; 22 | @ExcelProperty(value = "日期标题", index = 1) 23 | private Date date; 24 | /** 25 | * 这里设置3 会导致第二列空的 26 | */ 27 | @ExcelProperty(value = "数字标题", index = 3) 28 | private Double doubleData; 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/LongestMatchColumnWidthData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * 基础数据类 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class LongestMatchColumnWidthData { 20 | @ExcelProperty("字符串标题") 21 | private String string; 22 | @ExcelProperty("日期标题很长日期标题很长日期标题很长很长") 23 | private Date date; 24 | @ExcelProperty("数字") 25 | private Double doubleData; 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/WidthAndHeightData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | import cn.idev.excel.annotation.write.style.ColumnWidth; 7 | import cn.idev.excel.annotation.write.style.ContentRowHeight; 8 | import cn.idev.excel.annotation.write.style.HeadRowHeight; 9 | 10 | import lombok.EqualsAndHashCode; 11 | import lombok.Getter; 12 | import lombok.Setter; 13 | 14 | /** 15 | * 基础数据类 16 | * 17 | * @author Jiaju Zhuang 18 | **/ 19 | @Getter 20 | @Setter 21 | @EqualsAndHashCode 22 | @ContentRowHeight(10) 23 | @HeadRowHeight(20) 24 | @ColumnWidth(25) 25 | public class WidthAndHeightData { 26 | @ExcelProperty("字符串标题") 27 | private String string; 28 | @ExcelProperty("日期标题") 29 | private Date date; 30 | /** 31 | * 宽度为50 32 | */ 33 | @ColumnWidth(50) 34 | @ExcelProperty("数字标题") 35 | private Double doubleData; 36 | } 37 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/WriteCellDemoData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import cn.idev.excel.metadata.data.WriteCellData; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * 根据WriteCellData写 11 | * 12 | * @author Jiaju Zhuang 13 | */ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class WriteCellDemoData { 18 | /** 19 | * 超链接 20 | * 21 | * @since 3.0.0-beta1 22 | */ 23 | private WriteCellData hyperlink; 24 | 25 | /** 26 | * 备注 27 | * 28 | * @since 3.0.0-beta1 29 | */ 30 | private WriteCellData commentData; 31 | 32 | /** 33 | * 公式 34 | * 35 | * @since 3.0.0-beta1 36 | */ 37 | private WriteCellData formulaData; 38 | 39 | /** 40 | * 指定单元格的样式。当然样式 也可以用注解等方式。 41 | * 42 | * @since 3.0.0-beta1 43 | */ 44 | private WriteCellData writeCellStyle; 45 | 46 | /** 47 | * 指定一个单元格有多个样式 48 | * 49 | * @since 3.0.0-beta1 50 | */ 51 | private WriteCellData richText; 52 | } 53 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/demo/write/WriteWithColorTest.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.demo.write; 2 | 3 | import cn.idev.excel.EasyExcel; 4 | import cn.idev.excel.test.util.TestFileUtil; 5 | import org.junit.jupiter.api.Test; 6 | 7 | import java.util.LinkedList; 8 | import java.util.List; 9 | 10 | /** 11 | * Class for testing colors 12 | * 13 | */ 14 | public class WriteWithColorTest { 15 | 16 | 17 | @Test 18 | public void write() { 19 | String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; 20 | EasyExcel.write(fileName, ColorDemoData.class) 21 | .sheet("模板") 22 | .doWrite(this::data); 23 | System.out.println(fileName); 24 | } 25 | 26 | private List data() { 27 | List list = new LinkedList<>(); 28 | for (int i = 0; i < 10; i++) { 29 | list.add(new ColorDemoData("name" + i, i, "男")); 30 | } 31 | return list; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/CamlData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * TODO 9 | * 10 | * @author 是仪 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class CamlData { 16 | private String string1; 17 | private String String2; 18 | private String sTring3; 19 | private String STring4; 20 | private String STRING5; 21 | private String STRing6; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/DemoData2.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp; 2 | 3 | import java.math.BigDecimal; 4 | import java.util.Date; 5 | 6 | import cn.idev.excel.annotation.ExcelIgnore; 7 | import cn.idev.excel.annotation.ExcelProperty; 8 | 9 | import lombok.EqualsAndHashCode; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | 13 | /** 14 | * 基础数据类 15 | * 16 | * @author Jiaju Zhuang 17 | **/ 18 | @Getter 19 | @Setter 20 | @EqualsAndHashCode 21 | public class DemoData2 { 22 | @ExcelProperty("字符串标题") 23 | private String string; 24 | @ExcelProperty("日期标题") 25 | private Date date; 26 | @ExcelProperty("数字标题") 27 | private Double doubleData; 28 | @ExcelProperty("数字标题2") 29 | private BigDecimal bigDecimal; 30 | /** 31 | * 忽略这个字段 32 | */ 33 | @ExcelIgnore 34 | private String ignore; 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/DemoData3.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * 基础数据类 13 | * 14 | * @author Jiaju Zhuang 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class DemoData3 { 20 | @ExcelProperty("日期时间标题") 21 | private LocalDateTime localDateTime; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/LockData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp; 2 | 3 | import cn.idev.excel.annotation.format.NumberFormat; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * 基础数据类.这里的排序和excel里面的排序一致 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class LockData { 18 | @NumberFormat("#.##%") 19 | private Double string0; 20 | private String string1; 21 | private String string2; 22 | private String string3; 23 | private String string4; 24 | private String string5; 25 | private String string6; 26 | private String string7; 27 | private String string8; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/StyleData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp; 2 | 3 | import java.util.List; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | **/ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class StyleData { 16 | private byte[] byteValue; 17 | private Byte[] byteValue2; 18 | private byte byteValue1; 19 | private Byte byteValue4; 20 | private byte byteValue3; 21 | private String[] ss; 22 | private List s1s; 23 | } 24 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/TempFillData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp; 2 | 3 | import cn.idev.excel.annotation.write.style.ContentRowHeight; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | @ContentRowHeight(30) 16 | public class TempFillData { 17 | private String name; 18 | private double number; 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/bug/DataType.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.bug; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author jiaosong 11 | * @desc 12 | * @date 2021/4/6 13 | */ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class DataType { 18 | /** 19 | * 任务id 20 | */ 21 | @ExcelProperty("任务ID") 22 | private Integer id; 23 | 24 | @ExcelProperty("多余字段1") 25 | private String firstSurplus; 26 | 27 | @ExcelProperty("多余字段2") 28 | private String secSurplus; 29 | 30 | @ExcelProperty("多余字段3") 31 | private String thirdSurplus; 32 | 33 | @ExcelProperty(value = "备注1") 34 | private String firstRemark; 35 | 36 | @ExcelProperty(value = "备注2") 37 | private String secRemark; 38 | } 39 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/bug/ExcelCreat.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.bug; 2 | 3 | import java.io.FileNotFoundException; 4 | import java.io.FileOutputStream; 5 | import java.util.Collections; 6 | import java.util.List; 7 | 8 | import cn.idev.excel.EasyExcel; 9 | import cn.idev.excel.ExcelWriter; 10 | import cn.idev.excel.write.metadata.WriteSheet; 11 | 12 | /** 13 | * @author jiaosong 14 | * @desc 15 | * @date 2020/4/6 16 | */ 17 | public class ExcelCreat { 18 | 19 | public static void main(String[] args) throws FileNotFoundException { 20 | List data = getData(); 21 | ExcelWriter excelWriter = null; 22 | excelWriter = EasyExcel.write(new FileOutputStream("all.xlsx")).build(); 23 | WriteSheet writeSheet = EasyExcel.writerSheet(1, "test") 24 | .head(HeadType.class) 25 | .build(); 26 | excelWriter.write(data, writeSheet); 27 | excelWriter.finish(); 28 | } 29 | 30 | private static List getData() { 31 | DataType vo = new DataType(); 32 | vo.setId(738); 33 | vo.setFirstRemark("1222"); 34 | vo.setSecRemark("22222"); 35 | return Collections.singletonList(vo); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/bug/HeadType.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.bug; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * @author jiaosong 11 | * @desc 12 | * @date 2021/4/6 13 | */ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class HeadType { 18 | 19 | /** 20 | * 任务id 21 | */ 22 | @ExcelProperty("任务ID") 23 | private Integer id; 24 | 25 | @ExcelProperty(value = "备注1") 26 | private String firstRemark; 27 | 28 | @ExcelProperty(value = "备注2") 29 | private String secRemark; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/csv/CsvData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.csv; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelIgnore; 6 | import cn.idev.excel.annotation.ExcelProperty; 7 | 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | /** 13 | * TODO 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode 20 | public class CsvData { 21 | @ExcelProperty("字符串标题") 22 | private String string; 23 | @ExcelProperty("日期标题") 24 | private Date date; 25 | @ExcelProperty("数字标题") 26 | private Double doubleData; 27 | /** 28 | * 忽略这个字段 29 | */ 30 | @ExcelIgnore 31 | private String ignore; 32 | } 33 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/csv/CsvDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.csv; 2 | 3 | import cn.idev.excel.event.AnalysisEventListener; 4 | import cn.idev.excel.context.AnalysisContext; 5 | import com.alibaba.fastjson2.JSON; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | 9 | @Slf4j 10 | public class CsvDataListener extends AnalysisEventListener { 11 | @Override 12 | public void invoke(CsvData data, AnalysisContext context) { 13 | log.info("data:{}", JSON.toJSONString(data)); 14 | } 15 | 16 | @Override 17 | public void doAfterAllAnalysed(AnalysisContext context) { 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/data/DataType.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.data; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | @Getter 10 | @Setter 11 | @EqualsAndHashCode 12 | public class DataType { 13 | /** 14 | * 任务id 15 | */ 16 | @ExcelProperty("任务ID") 17 | private Integer id; 18 | 19 | @ExcelProperty("多余字段1") 20 | private String firstSurplus; 21 | 22 | @ExcelProperty("多余字段2") 23 | private String secSurplus; 24 | 25 | @ExcelProperty("多余字段3") 26 | private String thirdSurplus; 27 | 28 | @ExcelProperty(value = "备注1") 29 | private String firstRemark; 30 | 31 | @ExcelProperty(value = "备注2") 32 | private String secRemark; 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/data/HeadType.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.data; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | @Getter 10 | @Setter 11 | @EqualsAndHashCode 12 | public class HeadType { 13 | 14 | /** 15 | * 任务id 16 | */ 17 | @ExcelProperty("任务ID") 18 | private Integer id; 19 | 20 | @ExcelProperty(value = "备注1") 21 | private String firstRemark; 22 | 23 | @ExcelProperty(value = "备注2") 24 | private String secRemark; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/dataformat/DataFormatData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.dataformat; 2 | 3 | import cn.idev.excel.metadata.data.ReadCellData; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * TODO 11 | * 12 | * @author 罗成 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class DataFormatData { 18 | private ReadCellData date; 19 | private ReadCellData num; 20 | } 21 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/fill/FillData2.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.fill; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * @author Jiaju Zhuang 9 | */ 10 | @Getter 11 | @Setter 12 | @EqualsAndHashCode 13 | public class FillData2 { 14 | private String test; 15 | } 16 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue1662/Data1662.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.issue1662; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelProperty; 6 | 7 | import lombok.AllArgsConstructor; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.NoArgsConstructor; 11 | import lombok.Setter; 12 | 13 | @Getter 14 | @Setter 15 | @EqualsAndHashCode 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class Data1662 { 19 | @ExcelProperty(index = 0) 20 | private String str; 21 | @ExcelProperty(index = 1) 22 | private Date date; 23 | @ExcelProperty(index = 2) 24 | private double r; 25 | } 26 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue1663/FillData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.issue1663; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | @EqualsAndHashCode 10 | public class FillData { 11 | private String name; 12 | private double number; 13 | } 14 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.issue2319; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | @EqualsAndHashCode 10 | public class Issue2319 { 11 | private String num1; 12 | private String num2; 13 | } -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2443/Issue2443.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.issue2443; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | @EqualsAndHashCode 10 | public class Issue2443 { 11 | private int a; 12 | private int b; 13 | } 14 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/large/LargeData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.large; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | /** 9 | * @author Jiaju Zhuang 10 | */ 11 | @Getter 12 | @Setter 13 | @EqualsAndHashCode 14 | @NoArgsConstructor 15 | public class LargeData { 16 | 17 | private String str1; 18 | 19 | private String str2; 20 | 21 | private String str3; 22 | 23 | private String str4; 24 | 25 | private String str5; 26 | 27 | private String str6; 28 | 29 | private String str7; 30 | 31 | private String str8; 32 | 33 | private String str9; 34 | 35 | private String str10; 36 | 37 | private String str11; 38 | 39 | private String str12; 40 | 41 | private String str13; 42 | 43 | private String str14; 44 | 45 | private String str15; 46 | 47 | private String str16; 48 | 49 | private String str17; 50 | 51 | private String str18; 52 | 53 | private String str19; 54 | 55 | private String str20; 56 | 57 | private String str21; 58 | 59 | private String str22; 60 | 61 | private String str23; 62 | 63 | private String str24; 64 | 65 | private String str25; 66 | } 67 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/large/LargeDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.large; 2 | 3 | import cn.idev.excel.event.AnalysisEventListener; 4 | import cn.idev.excel.context.AnalysisContext; 5 | import com.alibaba.fastjson2.JSON; 6 | 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | 10 | /** 11 | * @author Jiaju Zhuang 12 | */ 13 | public class LargeDataListener extends AnalysisEventListener { 14 | private static final Logger LOGGER = LoggerFactory.getLogger(LargeDataListener.class); 15 | private int count = 0; 16 | 17 | @Override 18 | public void invoke(LargeData data, AnalysisContext context) { 19 | if (count == 0) { 20 | LOGGER.info("First row:{}", JSON.toJSONString(data)); 21 | } 22 | count++; 23 | if (count % 100000 == 0) { 24 | LOGGER.info("Already read:{}", count); 25 | } 26 | } 27 | 28 | @Override 29 | public void doAfterAllAnalysed(AnalysisContext context) { 30 | LOGGER.info("Large row count:{}", count); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/large/NoModelLargeDataListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.large; 2 | 3 | import java.util.Map; 4 | 5 | import cn.idev.excel.event.AnalysisEventListener; 6 | import cn.idev.excel.context.AnalysisContext; 7 | import com.alibaba.fastjson2.JSON; 8 | 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | /** 13 | * @author Jiaju Zhuang 14 | */ 15 | public class NoModelLargeDataListener extends AnalysisEventListener> { 16 | 17 | private static final Logger LOGGER = LoggerFactory.getLogger(NoModelLargeDataListener.class); 18 | private int count = 0; 19 | 20 | @Override 21 | public void invoke(Map data, AnalysisContext context) { 22 | if (count == 0) { 23 | LOGGER.info("First row:{}", JSON.toJSONString(data)); 24 | } 25 | count++; 26 | if (count % 100000 == 0) { 27 | LOGGER.info("Already read:{}", count); 28 | } 29 | } 30 | 31 | @Override 32 | public void doAfterAllAnalysed(AnalysisContext context) { 33 | LOGGER.info("Large row count:{}", count); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/poi/TestCell.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.poi; 2 | 3 | import java.util.List; 4 | 5 | import cn.idev.excel.metadata.data.CellData; 6 | 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | /** 12 | * TODO 13 | * 14 | * @author 罗成 15 | **/ 16 | @Getter 17 | @Setter 18 | @EqualsAndHashCode 19 | public class TestCell { 20 | private CellData c1; 21 | private CellData> c2; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/read/HeadReadData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.read; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * 临时测试 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class HeadReadData { 18 | @ExcelProperty({"主标题", "数据1"}) 19 | private String h1; 20 | @ExcelProperty({"主标题", "数据2"}) 21 | private String h2; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/read/TestListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.read; 2 | 3 | import cn.idev.excel.event.AnalysisEventListener; 4 | import cn.idev.excel.context.AnalysisContext; 5 | import com.alibaba.fastjson2.JSON; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | 9 | /** 10 | * TODO 11 | * 12 | * @author JiaJu Zhuang 13 | * @date 2020/4/9 16:33 14 | **/ 15 | @Slf4j 16 | public class TestListener extends AnalysisEventListener { 17 | 18 | @Override 19 | public void invoke(Object o, AnalysisContext analysisContext) { 20 | log.info("解析一条:{}", JSON.toJSONString(o)); 21 | } 22 | 23 | @Override 24 | public void doAfterAllAnalysed(AnalysisContext analysisContext) { 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/simple/DemoData1.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.simple; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelIgnore; 6 | import cn.idev.excel.annotation.ExcelProperty; 7 | import cn.idev.excel.annotation.write.style.HeadStyle; 8 | import cn.idev.excel.enums.poi.FillPatternTypeEnum; 9 | 10 | import lombok.EqualsAndHashCode; 11 | import lombok.Getter; 12 | import lombok.Setter; 13 | 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class DemoData1 { 18 | @ExcelProperty("字符串标题") 19 | @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42) 20 | private String string; 21 | @ExcelProperty("日期标题") 22 | private Date date; 23 | @ExcelProperty("数字标题") 24 | private Double doubleData; 25 | /** 26 | * 忽略这个字段 27 | */ 28 | @ExcelIgnore 29 | private String ignore; 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/simple/DemoData2.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.simple; 2 | 3 | import java.util.Date; 4 | 5 | import cn.idev.excel.annotation.ExcelIgnore; 6 | import cn.idev.excel.annotation.ExcelProperty; 7 | import cn.idev.excel.annotation.write.style.HeadStyle; 8 | import cn.idev.excel.enums.poi.FillPatternTypeEnum; 9 | 10 | import lombok.EqualsAndHashCode; 11 | import lombok.Getter; 12 | import lombok.Setter; 13 | 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class DemoData2 { 18 | @ExcelProperty("字符串标题") 19 | @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42) 20 | private String string; 21 | @ExcelProperty("日期标题") 22 | private Date date; 23 | @ExcelProperty("数字标题") 24 | private Double doubleData; 25 | /** 26 | * 忽略这个字段 27 | */ 28 | @ExcelIgnore 29 | private String ignore; 30 | } 31 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/simple/HgListener.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.simple; 2 | 3 | import java.util.Map; 4 | 5 | import cn.idev.excel.event.AnalysisEventListener; 6 | import cn.idev.excel.context.AnalysisContext; 7 | import com.alibaba.fastjson2.JSON; 8 | 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | /** 13 | * 模板的读取类 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | public class HgListener extends AnalysisEventListener> { 18 | private static final Logger LOGGER = LoggerFactory.getLogger(HgListener.class); 19 | /** 20 | * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收 21 | */ 22 | private static final int BATCH_COUNT = 5; 23 | 24 | @Override 25 | public void invoke(Map data, AnalysisContext context) { 26 | LOGGER.info("index:{}", context.readRowHolder().getRowIndex()); 27 | LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); 28 | } 29 | 30 | @Override 31 | public void doAfterAllAnalysed(AnalysisContext context) { 32 | LOGGER.info("所有数据解析完成!"); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/simple/JsonData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.simple; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * TODO 9 | * 10 | * @author Jiaju Zhuang 11 | **/ 12 | @Getter 13 | @Setter 14 | @EqualsAndHashCode 15 | public class JsonData { 16 | private String SS1; 17 | private String sS2; 18 | private String ss3; 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/simple/WriteData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.simple; 2 | 3 | import java.util.Date; 4 | 5 | import lombok.EqualsAndHashCode; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * write data 11 | * 12 | * @author Jiaju Zhuang 13 | **/ 14 | @Getter 15 | @Setter 16 | @EqualsAndHashCode 17 | public class WriteData { 18 | // @ContentStyle(locked = true) 19 | private Date dd; 20 | // @ContentStyle(locked = false) 21 | private float f1; 22 | } 23 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/simple/WriteHandler.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.simple; 2 | 3 | import cn.idev.excel.write.handler.SheetWriteHandler; 4 | import cn.idev.excel.write.metadata.holder.WriteSheetHolder; 5 | import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | 9 | /** 10 | * @author Jiaju Zhuang 11 | */ 12 | @Slf4j 13 | public class WriteHandler implements SheetWriteHandler { 14 | 15 | @Override 16 | public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, 17 | WriteSheetHolder writeSheetHolder) { 18 | log.info("锁住"); 19 | writeSheetHolder.getSheet().protectSheet("edit"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/temp/write/TempWriteData.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.temp.write; 2 | 3 | import cn.idev.excel.annotation.ExcelProperty; 4 | import cn.idev.excel.annotation.write.style.ContentStyle; 5 | import cn.idev.excel.annotation.write.style.HeadStyle; 6 | import cn.idev.excel.enums.BooleanEnum; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | //@Accessors(chain = true) 12 | public class TempWriteData { 13 | private String name1; 14 | 15 | @ExcelProperty(" 换行\r\n \\ \r\n的名字") 16 | @HeadStyle(wrapped = BooleanEnum.TRUE) 17 | @ContentStyle(wrapped = BooleanEnum.TRUE) 18 | private String name; 19 | } 20 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/java/cn/idev/excel/test/util/TestUtil.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.test.util; 2 | 3 | import java.text.ParseException; 4 | import java.time.LocalDate; 5 | import java.time.LocalDateTime; 6 | import java.util.Date; 7 | 8 | import cn.idev.excel.util.DateUtils; 9 | 10 | import lombok.extern.slf4j.Slf4j; 11 | 12 | /** 13 | * test util 14 | * 15 | * @author Jiaju Zhuang 16 | */ 17 | @Slf4j 18 | public class TestUtil { 19 | 20 | public static final Date TEST_DATE; 21 | public static final LocalDate TEST_LOCAL_DATE = LocalDate.of(2020, 1, 1); 22 | public static final LocalDateTime TEST_LOCAL_DATE_TIME = LocalDateTime.of(2020, 1, 1, 1, 1, 1); 23 | 24 | static { 25 | try { 26 | TEST_DATE = DateUtils.parseDate("2020-01-01 01:01:01"); 27 | } catch (ParseException e) { 28 | log.error("init TestUtil error.", e); 29 | throw new RuntimeException(e); 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/bom/no_bom.csv: -------------------------------------------------------------------------------- 1 | 姓名,年纪 2 | 姓名0,20 3 | 姓名1,20 4 | 姓名2,20 5 | 姓名3,20 6 | 姓名4,20 7 | 姓名5,20 8 | 姓名6,20 9 | 姓名7,20 10 | 姓名8,20 11 | 姓名9,20 -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/bom/office_bom.csv: -------------------------------------------------------------------------------- 1 | 姓名,年纪 2 | 姓名0,20 3 | 姓名1,20 4 | 姓名2,20 5 | 姓名3,20 6 | 姓名4,20 7 | 姓名5,20 8 | 姓名6,20 9 | 姓名7,20 10 | 姓名8,20 11 | 姓名9,20 -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/cache/headt1.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/cache/headt1.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/cache/t2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/cache/t2.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/comment/comment.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/comment/comment.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/comment/comment.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/comment/comment.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t01.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t01.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t02.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t02.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t03.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t03.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t04.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t04.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t05.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t05.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t06.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t06.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t07.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t07.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/compatibility/t09.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/compatibility/t09.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/converter/converter03.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/converter/converter03.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/converter/converter07.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/converter/converter07.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/converter/converterCsv.csv: -------------------------------------------------------------------------------- 1 | 大数的布尔(不支持),大数的数字,大数的字符串,大整数的布尔(不支持),大整数的数字,大整数的字符串,布尔的布尔,布尔的数字(不支持),布尔的字符串,字节的布尔(不支持),字节的数字,字节的字符串,日期的数字,日期的字符串,本地日期的数字,本地日期的字符串,双精度浮点的布尔(不支持),双精度浮点的数字,双精度浮点的字符串,浮点的布尔(不支持),浮点的数字,浮点的字符串,整型的布尔(不支持),整型的数字,整型的字符串,长整型的布尔(不支持),长整型的数字,长整型的字符串,短整型的布尔(不支持),短整型的数字,短整型的字符串,字符串的布尔,字符串的数字,字符串的字符串,字符串的错误,字符串的数字公式,字符串的字符串公式,字符串的数字日期 2 | 1,1,1,1,1,1,TRUE,TRUE,TRUE,1,1,1,2020-01-01 01:01:01,2020-01-01 01:01:01,2020-01-01 01:01:01,2020-01-01 01:01:01,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,TRUE,1,测试,#VALUE!,2,1测试,2020-01-01 01:01:01 -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/converter/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/converter/img.jpg -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/dataformat/dataformat.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/dataformat/dataformat.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/dataformat/dataformat.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/dataformat/dataformat.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/dataformat/dataformatv2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/dataformat/dataformatv2.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/cellDataDemo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/cellDataDemo.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/demo.csv: -------------------------------------------------------------------------------- 1 | String,Date,Number 2 | String0,2020-01-01 01:01:00,1 3 | String1,2020-01-02 01:01:00,2 4 | String2,2020-01-03 01:01:00,3 5 | String3,2020-01-04 01:01:00,4 6 | String4,2020-01-05 01:01:00,5 7 | String5,2020-01-06 01:01:00,6 8 | String6,2020-01-07 01:01:00,7 9 | String7,2020-01-08 01:01:00,8 10 | String8,2020-01-09 01:01:00,9 11 | String9,2020-01-10 01:01:00,10 -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/demo.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/extra.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/extra.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/complex.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/complex.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/complexFillWithTable.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/complexFillWithTable.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/composite.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/composite.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/dateFormat.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/dateFormat.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/horizontal.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/horizontal.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/list.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/list.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/fill/simple.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/fill/simple.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/generic-demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/generic-demo.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/demo/pwd_123.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/demo/pwd_123.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/extra/extra.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/extra/extra.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/extra/extra.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/extra/extra.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/extra/extraRelationships.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/extra/extraRelationships.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/annotation.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/annotation.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/annotation.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/annotation.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/byName.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/byName.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/byName.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/byName.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/complex.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/complex.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/complex.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/complex.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/composite.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/composite.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/composite.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/composite.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/horizontal.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/horizontal.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/horizontal.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/horizontal.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/simple.csv: -------------------------------------------------------------------------------- 1 | Name,Number,Complex,Ignored,Empty 2 | {name},{number},{name} is {number} years old this year,\{name\} ignored, {name},Empty{.empty} -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/simple.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/simple.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/simple.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/simple.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/style.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/style.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/fill/style.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/fill/style.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/hiddensheets/hiddensheets.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/hiddensheets/hiddensheets.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/hiddensheets/hiddensheets.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/hiddensheets/hiddensheets.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/large/fill.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/large/fill.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/large/large07.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/large/large07.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ${CONSOLE_LOG_PATTERN} 8 | utf8 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/multiplesheets/multiplesheets.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/multiplesheets/multiplesheets.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/multiplesheets/multiplesheets.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/multiplesheets/multiplesheets.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/poi/last_row_number_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/poi/last_row_number_test.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/poi/last_row_number_xssf_date_test.csv: -------------------------------------------------------------------------------- 1 | 2025/3/25,2025/3/25,2025/3/25,2025/3/25,2025/3/25,2025/3/25,,,,testssdf是士大夫否t 2 | 2025/3/26,1909/2/15,1909/2/15,2025/3/26,2025/3/26,2025/3/26,,,, 3 | 2025/3/27,2025/3/27,2025/3/27,2025/3/27,2025/3/27,2025/3/27,,,, 4 | 2025/3/28,2025/3/28,2025/3/28,2025/3/28,2025/3/28,2025/3/28,,,, 5 | 2025/3/29,2025/3/29,2025/3/29,2025/3/29,2025/3/29,2025/3/29,,,, 6 | 2025/3/30,2025/3/30,2025/3/30,2025/3/30,2025/3/30,2025/3/30,,,, 7 | 2025/3/31,2025/3/31,2025/3/31,2025/3/31,2025/3/31,2025/3/31,,,, 8 | 2025/4/1,2025/4/1,2025/4/1,2025/4/1,2025/4/1,2025/4/1,,,, 9 | 2025/4/2,2025/4/2,2025/4/2,2025/4/2,2025/4/2,2025/4/2,,,, 10 | 2025/4/3,2025/4/3,2025/4/3,2025/4/3,2025/4/3,2025/4/3,,,, 11 | -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/poi/last_row_number_xssf_date_test.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/poi/last_row_number_xssf_date_test.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/poi/last_row_number_xssf_date_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/poi/last_row_number_xssf_date_test.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/poi/last_row_number_xssf_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/poi/last_row_number_xssf_test.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/repeat/repeat.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/repeat/repeat.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/repeat/repeat.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/repeat/repeat.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/simple/simple07.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/simple/simple07.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/style/styleTest.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/style/styleTest.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/style/styleTest.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/style/styleTest.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue1663/template.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue1663/template.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue220/test01.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue220/test01.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue220/test02.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue220/test02.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue220/test03.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue220/test03.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue2319/test1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue2319/test1.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue2319/test2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue2319/test2.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue2443/date1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue2443/date1.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/issue2443/date2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/issue2443/date2.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/lock_data.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/lock_data.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/temp/number_format.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/temp/number_format.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/template/template03.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/template/template03.xls -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/template/template07.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/template/template07.xlsx -------------------------------------------------------------------------------- /fastexcel-test/src/test/resources/web/io.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/fastexcel-test/src/test/resources/web/io.xlsx -------------------------------------------------------------------------------- /fastexcel/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | 8 | cn.idev.excel 9 | fastexcel-parent 10 | 1.2.0 11 | ../pom.xml 12 | 13 | 14 | fastexcel 15 | fastexcel 16 | 17 | 18 | 19 | cn.idev.excel 20 | fastexcel-core 21 | ${project.version} 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /fastexcel/src/main/java/cn/idev/excel/easyexcelplus/Empty.java: -------------------------------------------------------------------------------- 1 | package cn.idev.excel.easyexcelplus; 2 | 3 | /** 4 | * empty 5 | * 6 | * @author Jiaju Zhuang 7 | */ 8 | public class Empty { 9 | } 10 | -------------------------------------------------------------------------------- /img/readme/large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/img/readme/large.png -------------------------------------------------------------------------------- /img/style/eclipse/step.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/img/style/eclipse/step.jpg -------------------------------------------------------------------------------- /img/style/idea/step1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/img/style/idea/step1.png -------------------------------------------------------------------------------- /img/style/idea/step2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/img/style/idea/step2.png -------------------------------------------------------------------------------- /img/style/idea/step3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/img/style/idea/step3.png -------------------------------------------------------------------------------- /lombok.config: -------------------------------------------------------------------------------- 1 | lombok.toString.callSuper = CALL 2 | lombok.equalsAndHashCode.callSuper= CALL -------------------------------------------------------------------------------- /style/STYLE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-excel/fastexcel/ea9a858878f251805266138940a95e51384477ab/style/STYLE.md --------------------------------------------------------------------------------